3

Я хотел бы изменить IP-адрес источника в соответствии с IP-адресом и интерфейсом, в котором он был. Давайте рассмотрим следующий пример:

  -----------------------------
  |                            |
  |          host 1            |
  |                            |
  |        application         |
  |                            |
  |                    eth0    |
  -----------------------------
                         |
                         |  IP0-IP47
                         |
          -----------------------------
          |             eth0           |
          |         host 2             |
          |                            |
          |         NAT                |
          |                            |
          |  eth1.1   eth1.2  eth1.3   |
          -----------------------------
              |         |        |
              |         |        | 
         IP0-IP15   IP0-IP15   IP0-IP15

Хост 2 получает сообщения по интерфейсам eth1.1, eth1.2, eth1.3. На каждом интерфейсе имеется 16 хостов с 16 уникальными IP-адресами, но эти 16 IP-адресов одинаковы для всех интерфейсов. Мне нужно сделать NAT, чтобы исходный ip изменялся в зависимости от src ip и интерфейса, в который он вошел, чтобы иметь 48 уникальных исходных ip-адресов для сообщений, поступающих в приложение.

Приложение, работающее на самых отключенных хостах, и их ip не могут быть изменены. Вот почему я решил поместить их в VLAN.

Я искал различные учебные пособия и HOWTO, но не смог найти то, что искал. Проблема в том, что SNAT можно использовать только в цепочке POSTROUTING, но в POSTROUTING у меня нет информации об интерфейсе, в котором он появился.

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

Спасибо за вашу помощь.

2 ответа2

1

Вероятно, вы можете сделать это:

  1. Пометить пакеты, поступающие с разных интерфейсов, с разными номерами во время PREROUTING.

    sudo iptables -t nat -A PREROUTING -i eth1.<x> -j MARK --set-mark <choose_a_unique_number_per_interface>
    
  2. Используйте SNAT и отметки во время пост-маршрутизации:

    sudo iptables -t nat -A POSTROUTING -s <iprange_of_eth1.<x>> -m mark --mark <number_given_to_eth1.<x>_at_the_time_of_prerouting> -j SNAT --to-source <an_ip_from_48_ipset>
    
0

Решаемые.

Поскольку местом назначения пакетов была машина, на которой работал NAT, я не мог использовать цепочку POSTROUTING.

Для других с такой же проблемой: проверьте xtables-addons: цель RAWNAT http://manpages.ubuntu.com/manpages/karmic/man8/xtables-addons.8.html

Это позволяет использовать SNAT без сохранения состояния в PREROUTING. Это было именно то, что я искал. Вам просто нужно собрать модуль и загрузить его (например, с помощью modprobe).

Если вы будете реализовывать это, не забывайте, что это NAT без сохранения состояния, поэтому он не будет выполнять обратный NAT автоматически, как это делают SNAT и DNAT. Поэтому вам необходимо реализовать свои собственные правила обратного NAT.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .