iptables: разные правила для разных текущих IP-адресов шлюза

iptables: разные правила для разных текущих IP-адресов шлюза

Предположим, что в качестве шлюза у меня есть Машина А. Машина А имеет один интерфейс с 2 IP-адресами.

Конфигурация netplan для машины A выглядит следующим образом:

  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      addresses:
        - 192.168.1.1/24
        - 192.168.1.2/24

Теперь я хочу, чтобы правила REDIRECT в iptables вели себя по-разному в зависимости от того, установил ли компьютер B свой шлюз как 192.168.1.1 или как 192.168.1.2.

Вот команда iptables, которую я пытаюсь выполнить на машине A:

iptables --table nat --append PREROUTING --some-parameter 192.168.1.1 --protocol tcp  --jump REDIRECT --to-ports 9991
iptables --table nat --append PREROUTING --some-parameter 192.168.1.2 --protocol tcp  --jump REDIRECT --to-ports 9992

Не могли бы вы сказать, как правильно называется вышеприведенное --some-parameter ?

решение1

Нет возможности сделать это с 192.168.1.1 и 192.168.1.2 на одном сетевом интерфейсе шлюза, таким образом, разрешая один и тот же MAC-адрес. Это не функция, не реализованная вiptablesкоторую можно реализовать, но эту функцию реализовать невозможно из-за особенностей работы IP-сетей.

Клиент, использующий 192.168.1.1 или 192.168.1.2 в качестве шлюза, никогда не отправит ни одного пакета IPv4 с 192.168.1.1 или 192.168.1.2 в нем при отправке пакетов в Интернет. Он будет:

  • проконсультируйтесь с таблицей маршрутизации для указанного пункта назначения
  • обнаружить, что есть шлюз для этого пункта назначения
  • ИспользоватьАРПили кэшированная запись для разрешения адреса L2 (MAC-адрес Ethernet), необходимого для доступа к шлюзу.

На последнем шаге будет только один пункт назначения Ethernet: уникальный MAC-адрес сетевой карты шлюза: то же самое для клиента со шлюзом 192.168.1.1 или другого клиента со шлюзом 192.168.1.2.

Таким образом, теперь каждый клиент будет отправлять пакет на шлюз со своим исходным адресом IPv4, при этом предполагаемый пункт назначения IPv4 в кадре Ethernet имеет в обоих случаях один и тот же MAC-адрес назначения Ethernet. 192.168.1.1/192.168.1.2 выходит из цикла.

Теперь шлюз видит два пакета для маршрутизации. Ни в коем случае эти пакеты больше не намекают, использовали ли они 192.168.1.1или 192.168.1.2как шлюз: информация не появляется на проводе, поэтому не может быть известна шлюзу. Если у системы нет информации для различения случаев, тоiptablesне может быть и этой несуществующей информации.


Предложение по обходному пути:

Можно использоватьМАКВЛАНинтерфейс для второй сетевой карты с собственным отдельным MAC-адресом и назначить ему 192.168.1.2/24 вместо этого, что заставит пакеты от клиентов, использующих 192.168.1.2 в качестве шлюза, прибывать на эту сетевую карту. Этот случай легко отличить с помощьюiptables: другой -i NICфильтр.

Однако это создает проблему маршрутизации, связанную с наличием нескольких сетевых карт в одной локальной сети, и требует либо:

  • расширенные правила маршрутизации политик для надлежащего рассмотрения этого случая

    таким образом, ответы не отправляются через неправильную сетевую карту, что может повлиять на поведение маршрутизации или правила брандмауэра.

    • и кроме того, любая служба UDP, запрашиваемая на 192.168.1.2 (если 192.168.1.1 является адресом по умолчанию), должна знать, как ответить с правильным адресом источника 192.168.1.2 (вместо адреса по умолчанию 192.168.1.1): она должна быть осведомлена о многосетевом режиме. TCP не требует особого внимания.
  • или же дополнительное сетевое пространство имен для отделения добавленного интерфейса. Но с правилом REDIRECT это означает, что служба на порту 9992 должна работать в дополнительном сетевом пространстве имен вместо этого. И это сетевое пространство имен все еще, вероятно, должно взаимодействовать с Интернетом, используя исходное сетевое пространство имен: также больше конфигурации для планирования в разных местах.

Связанный контент