Я на Ubuntu (с IP 10.0.0.1) пытается уловить пакеты, выходящие из порта 9090. Я хочу изменить исходный IP-адрес на 10.0.0.2

Я добавил следующее правило через iptables:

# iptables -t nat -A POSTROUTING -o eth0 --protocol TCP --source-port 9090 -j SNAT --to-source 10.0.0.2:9090

# sudo iptables -t nat -vL
Chain POSTROUTING (policy ACCEPT 2432 packets, 162K bytes)
pkts bytes target     prot opt in     out     source               destination
   0     0 SNAT       tcp  --  any    eth0    anywhere             anywhere        tcp spt:9090 to:10.0.0.2:9090

Однако это не изменило IP-адрес источника. Через tcpdump я мог видеть исходный IP на исходящих пакетах 10.0.0.1.

Обратите внимание, что 10.0.0.2 назначен другому компьютеру.

Мои вопросы: (1) Я не уверен, что пакеты соответствуют этому правилу. Какой хороший способ убедиться, что пакеты действительно соответствуют этому правилу. (2) Есть ли что-то еще, что мне нужно выполнить / включить, чтобы заставить работать SNAT (возможно, цепочку?).

Спасибо!

1 ответ1

0

Спасибо @DanielB. Ну, у меня есть сервер (IP 10.0.0.1), работающий на порту 9090. Когда он получает SYN от клиента, я хочу, чтобы SYN-ACK выходил с src IP:port как 10.0.0.2:9090. Через tcpdump я вижу, что SYN-ACK выходит с 10.0.0.1:9090

Я не думаю, что есть способ достичь того, что вы хотите, с помощью iptables NAT (и если вы это сделаете, я не думаю, что это будет полезно, клиенты будут отклонять пакеты с неожиданных IP-адресов)

NAT iptables работает на соединениях, только первый пакет каждого соединения подчиняется видимым пользователям таблицам NAT. Более поздние пакеты транслируются (или нет) в соответствии с записями отслеживания соединения, установленными первым пакетом.

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