Поиск расширения iptables для соответствия IP на основе текущего IP-адреса интерфейсаLinux

Ответить Пред. темаСлед. тема
Anonymous
 Поиск расширения iptables для соответствия IP на основе текущего IP-адреса интерфейса

Сообщение Anonymous »

Я пытаюсь настроить DNAT для своих виртуальных машин (ВМ), но это сложно, поскольку общедоступный IP-адрес моего хост-компьютера (Хоста) назначается DHCP и изменяется динамически. Я ищу расширение iptables, которое может сопоставлять IP-адрес источника/назначения на основе текущего IP-адреса данного интерфейса. Это облегчит составление правил ДНКАТ. Если вам известно такое расширение или лучшее решение, поделитесь.
Топология сети:
топология
  • Публичный IP-адрес хоста (например, 1.1.1.1) со временем меняется
  • Хост подключается к Интернету через энп0. Другие интерфейсы также обеспечивают доступ в Интернет, но без общедоступных IP-адресов.
  • Хост настраивает virbr0 для частной сети с виртуальными машинами со статическими IP-адресами, назначенными вручную.
  • ВМ в частной сети (например, 192.168.122.154) обслуживает службу UDP через порт 4567.
  • правила iptables должны обеспечивать доступ к 192.168 .122.154:4567
Мои требования:
  • Пакеты ДНКАТ из Интернета с таргетингом 1.1.1.1:4567 на VM:4567. Это исходное значение DNAT.
  • Пакеты DNAT с хоста, нацеленного на 1.1.1.1:4567, на VM:456, обеспечивающие доступ к услуга с хоста через домен. Например, служба DDNS используется для записи последнего общедоступного IP-адреса хоста с доменом Host. Кто-то, работая на хосте, пытается получить доступ к службе виртуальной машины по сетевому расположению Host:4567, которое разрешается как 1.1.1.1:4567.
  • Маршрут пакеты с виртуальной машины с таргетингом 1.1.1.1:4567 на виртуальную машину: 4567. Как и в предыдущем требованию, разрешите доступ к Host:4567 с виртуальных машин.
Используя только первое требование, я мог бы избежать явного использования версии 1.1.1.1, поэтому изменение IP-адреса хоста не является проблемой:

Код: Выделить всё

iptables -t nat -I PREROUTING \
-i enp0 -p udp --dport 4567 \
-j DNAT --to-destination 192.168.122.154:4567

iptables -t filter -I FORWARD \
-i enp0 -p udp -d 192.168.122.154 --dport 4567 \
-j ACCEPT
Хитрость заключается в том, чтобы сопоставить пакеты на основе интерфейса, через который они поступают.
Но эта хитрость не применима к оставшимся двум требованиям. и мне придется переключиться на явный IP-адрес и столкнуться с проблемой динамического общедоступного IP-адреса хоста.
Ниже приведены мои текущие правила iptables:
Требование I:
Пакет из Интернета

Код: Выделить всё

iptables -t nat -I PREROUTING \
-d 166.111.83.86 -p udp --dport 8854 \
-j DNAT --to-destination 192.168.122.154:4567

iptables -t filter -I FORWARD \
-d 166.111.83.86 -p udp --dport 8854 \
-j ACCEPT
Требование II:
Пакет с хоста

Код: Выделить всё

iptables -t nat -I OUTPUT \
-p udp -d 166.111.83.86 --dport 4567 \
-j DNAT --to-destination 192.168.122.154:4567
Требование III:
Пакет из виртуальной машины

Код: Выделить всё

iptables -t nat -I POSTROUTING \
-s 192.168.122.154 -d 192.168.122.154 -p udp --dport 8854 \
-j SNAT --to-source 192.168.122.1
Это правило кажется странным, поскольку я использую SNAT для DNAT. Без SNAT пакеты с src_ip = dst_ip = 192.168.122.154 = VM_ip пересылаются на виртуальную машину, но никогда не «получаются» виртуальной машиной. На самом деле, из журналов ВМ я обнаружил, что пакеты отбрасываются непосредственно перед цепочкой INPUT. Я видел их только в цепочке PREROUTING.
Не знаю причину, но с помощью SNAT можно обойти источник 192.168.122.1.
Что я ищу:
Расширение iptables, которое позволяет мне изменить мое правило:

Код: Выделить всё

iptables -t nat -I PREROUTING \
-d 166.111.83.86 -p udp --dport 8854 \
-j DNAT --to-destination 192.168.122.154:4567
на это:

Код: Выделить всё

iptables -t nat -I PREROUTING \
-m magic-extension --dst enp0 -p udp --dport 8854 \
-j DNAT --to-destination 192.168.122.154:4567
где --magic-extension --dst enp0 означает соответствие IP-пакетам, IP-адрес назначения которых является одним из текущих IP-адресов интерфейса enp0.
Итак, я могу изменить свои правила на:

Код: Выделить всё

# req I
iptables -t nat -I PREROUTING \
-m magic-extension --dst enp0 -p udp --dport 8854 \
-j DNAT --to-destination 192.168.122.154:4567
iptables -t filter -I FORWARD \
-m magic-extension --dst enp0 -p udp --dport 8854 \
-j ACCEPT

# req II
iptables -t nat -I OUTPUT \
-m magic-extension --dst enp0 -p udp --dport 4567 \
-j DNAT --to-destination 192.168.122.154:4567

# req III
iptables -t nat -I POSTROUTING \
-m magic-extension --dst enp0 -s 192.168.122.154 -p udp --dport 8854 \
-j SNAT --to-source 192.168.122.1
Что я знаю
Я знаю, что это можно сделать с помощью ipset с помощью cron > задание по обновлению набора IP, но ищу более компактное решение.

Подробнее здесь: https://stackoverflow.com/questions/788 ... n-interfac
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как извлечь и заблокировать IP-адреса VPN из файлов конфигурации NetworkManager с помощью iptables и Python?
    Anonymous » » в форуме Python
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Могу ли я изменить URL-адрес в CSS на основе текущего URL-адреса сайта? [закрыто]
    Anonymous » » в форуме CSS
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous
  • Загрузите другой заголовок на основе текущего URL -адреса в PHP с помощью веточки или JavaScript
    Anonymous » » в форуме Javascript
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Пересылка iptables в Linux libvirt с использованием режима Natted
    Anonymous » » в форуме Linux
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Udp-прокси с использованием iptables или firewalld
    Anonymous » » в форуме Linux
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Linux»