>iptables -L -v -t nat в студию, адреса можно изменить Вывод с сервера2:
Chain PREROUTING (policy ACCEPT 9243K packets, 567M bytes)
pkts bytes target prot opt in out source destination
734 45495 DNAT icmp -- eth0 * 0.0.0.0/0 xx.xx.xxx.53 to:172.xx.1.9 #обратный проброс для сервера1 (на его eth0)
31 1956 DNAT icmp -- eth0 * 0.0.0.0/0 xx.xx.xxx.49 to:172.xx.1.5 #обратный nat для сервера2 (на его eth0)
***************
дальше идут клиентские пробросы
*************
Chain POSTROUTING (policy ACCEPT 376K packets, 26M bytes)
pkts bytes target prot opt in out source destination
1965 251K SNAT all -- * eth0 172.хх.1.5 0.0.0.0/0 to:хх.хх.ххх.49
29309 2127K SNAT all -- * eth0 172.хх.1.9 0.0.0.0/0 to:хх.хх.ххх.53
******************
дальше идет клиентское натирование.
*******************
Chain OUTPUT (policy ACCEPT 122K packets, 14M bytes)
pkts bytes target prot opt in out source destination
Т.е. интерфейсы eth0 сервера1 и eth1 сервера2 это подсеть 172.хх.1.8/29
Т.е. интерфейсы eth0 сервера2 и [hardware gateway] это подсеть 172.хх.1.4/30
Теперь при снифе на eth0 сервера2:
Запускаем с сервера1 пинги в инет:
# /usr/sbin/tcpdump -i eth0 -f 'src host хх.хх.ххх.53 or dst host хх.хх.ххх.53'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
23:06:31.516921 IP хх.хх.ххх.53 > 77.234.201.242: icmp 64: echo request seq 0
23:06:31.543021 IP 77.234.201.242 > хх.хх.ххх.53: icmp 64: echo reply seq 0
23:06:32.517843 IP хх.хх.ххх.53 > 77.234.201.242: icmp 64: echo request seq 1
23:06:32.545051 IP 77.234.201.242 > хх.хх.ххх.53: icmp 64: echo reply seq 1
23:06:33.522144 IP хх.хх.ххх.53 > 77.234.201.242: icmp 64: echo request seq 2
23:06:33.548065 IP 77.234.201.242 > хх.хх.ххх.53: icmp 64: echo reply seq 2
23:06:34.523050 IP хх.хх.ххх.53 > 77.234.201.242: icmp 64: echo request seq 3
23:06:34.550374 IP 77.234.201.242 > хх.хх.ххх.53: icmp 64: echo reply seq 3
Т.е. видим, что IP 172.хх.1.9 сервера1 было на сервере2 проNATино в хх.хх.ххх.53
82.137.183.89 - IP, с которого я проверял пинги и трассу в свою локалку с инета.
Пример2 - пинг на сервер1 с инета:
#/usr/sbin/tcpdump -i eth0 -f 'src host хх.хх.ххх.53 or dst host хх.хх.ххх.53'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
23:09:13.603550 IP 82.137.183.89 > хх.хх.ххх.53: icmp 40: echo request seq 4609
23:09:13.605275 IP хх.хх.ххх.53 > 82.137.183.89: icmp 40: echo reply seq 4609
23:09:14.430659 IP 82.137.183.89 > хх.хх.ххх.53: icmp 40: echo request seq 4865
23:09:14.431198 IP хх.хх.ххх.53 > 82.137.183.89: icmp 40: echo reply seq 4865
23:09:15.431548 IP 82.137.183.89 > хх.хх.ххх.53: icmp 40: echo request seq 5121
23:09:15.432220 IP хх.хх.ххх.53 > 82.137.183.89: icmp 40: echo reply seq 5121
23:09:16.415883 IP 82.137.183.89 > хх.хх.ххх.53: icmp 40: echo request seq 5377
23:09:16.417392 IP хх.хх.ххх.53 > 82.137.183.89: icmp 40: echo reply seq 5377
Во всех примерах НАТ работает.
Ну и теперь главное - трасса с инета на реальный ИП (хх.хх.ххх.65) в локалке за сервером1:
# /usr/sbin/tcpdump -i eth0 -f 'src host 82.137.183.89 or dst host 82.137.183.89'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
23:48:46.558837 IP 82.137.183.89 > хх.хх.ххх.65: icmp 72: echo request seq 22529
23:48:46.559450 IP 172.хх.1.9 > 82.137.183.89: icmp 100: time exceeded in-transit
23:48:51.058281 IP 82.137.183.89 > хх.хх.ххх.65: icmp 72: echo request seq 22785
23:48:51.058771 IP 172.хх.1.9 > 82.137.183.89: icmp 100: time exceeded in-transit
23:48:55.543205 IP 82.137.183.89 > хх.хх.ххх.65: icmp 72: echo request seq 23041
23:48:55.544751 IP 172.хх.1.9 > 82.137.183.89: icmp 100: time exceeded in-transit
Т.е. тут уже при ответе сервера1 нат не отрабатывает и идет серый ИП.