2

У меня есть правила iptables, приведенные ниже, для пересылки входящего трафика SSH через порт 2222 на виртуальную машину, работающую в сети vmware "vmnet" на том же хосте.

192.168.1.1   192.168.1.40
+---------+     +------+     +-----------------+ 
| network |---->| host |__   | virtual machine |
+---------+     +------+ \\__+-----------------+
              192.168.2.1 \_____192.168.2.22  

В auth.log виртуальной машины входящий IP-адрес для удаленных входов в систему всегда является IP-адресом хоста, который пересылал пакеты. Как я могу сохранить информацию об удаленном IP?

*filter
:INPUT ACCEPT [593178:45807398]
:FORWARD ACCEPT [881:158378]
:OUTPUT ACCEPT [859348:1232593358]
-A FORWARD -d 192.168.2.22/32 -o vmnet99 -p tcp -m tcp --dport 22 -j ACCEPT
COMMIT

*nat
:PREROUTING ACCEPT [943:138565]
:INPUT ACCEPT [658:122878]
:OUTPUT ACCEPT [3266:229178]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -p tcp -m tcp --dport 2222 -j DNAT --to-destination 192.168.2.22:22
-A POSTROUTING -j MASQUERADE
COMMIT

1 ответ1

3

Ваше последнее правило Iptables,

 -A POSTROUTING -j MASQUERADE

маскирует все пакеты, покидающие хост, включая те, что поступают на виртуальную машину: это причина, по которой вы видите на госте все пакеты, поступающие с хоста. Вместо этого вы должны ограничить маскировку пакетами, оставляющими хост для Интернета, что-то вроде

 -A POSTROUTING -o eth0 -j MASQUERADE

если вы звоните eth0 интерфейс, подключенный к Интернету.

Редактировать:

Если вопрос заключается в том, что еще мне нужно для работы IP-переадресации, то достаточный ответ:

  sudo iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DNAT --to-destination 192.168.2.22:22

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