Дано: сервер на Linux (Centos 6.3 - да, уже старый, но «работает-не трогай»), работающий Интернет-шлюзом для нескольких частных сетей. Адреса в частных сетях «серые», На интерфейсе eth0, которым сервер подключен к Интернет-сегменту, делается SNAT по принципу «много в один» (подсеть «серых» адресов в один «белый» IP). Например (реальные адреса, естественно, заменены):
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j SNAT --to-source 1.1.1.1
По идее пакетов с источником из сети 10.10.10.0 на выходе с eth0 после этого быть не должно, вместо этого у всех исходящих с eth0 пакетов источником должен быть 1.1.1.1. В большинстве случаев это так, однако регулярно появляются и пакеты с сурсом из 10.10.10.0. И tcpdump'ом на eth0 их видно и на внешние адреса приходят.
Например, фрагмент дампа, где появляются такие пакеты:
22:16:20.458067 IP 93.184.221.240.http > 1.1.1.1.58349: Flags [.], seq 2865:4297, ack 312, win 288, length 1432
22:16:22.915330 IP 93.184.221.240.http > 1.1.1.1.58349: Flags [.], seq 4297:5729, ack 312, win 288, length 1432
22:16:26.611440 IP 93.184.221.240.http > 1.1.1.1.58349: Flags [.], seq 1433:2865, ack 312, win 288, length 1432
22:16:28.601530 IP 1.1.1.1.58349 > 93.184.221.240.http: Flags [.], ack 2865, win 160, length 0
22:16:28.604610 IP 1.1.1.1.58349 > 93.184.221.240.http: Flags [F.], seq 312, ack 2865, win 160, length 0
22:16:28.625207 IP 93.184.221.240.http > 1.1.1.1.58349: Flags [.], seq 5729:7161, ack 312, win 288, length 1432
22:16:28.625236 IP 93.184.221.240.http > 1.1.1.1.58349: Flags [P.], seq 7161:8593, ack 312, win 288, length 1432
22:16:28.628016 IP 93.184.221.240.http > 1.1.1.1.58349: Flags [.], ack 313, win 288, length 0
22:16:28.656497 IP 10.10.10.124.58349 > 93.184.221.240.http: Flags [R], seq 3280738781, win 0, length 0
22:16:29.011868 IP 10.10.10.124.58349 > 93.184.221.240.http: Flags [R], seq 3280738781, win 0, length 0
22:16:35.505264 IP 10.10.10.124.58349 > 93.184.221.240.http: Flags [R], seq 3280738781, win 0, length 0
22:16:35.756197 IP 10.10.10.124.58349 > 93.184.221.240.http: Flags [R], seq 3280738781, win 0, length 0
22:16:35.883696 IP 10.10.10.124.58349 > 93.184.221.240.http: Flags [R], seq 3280738781, win 0, length 0
22:16:35.968263 IP 1.1.1.1.58349 > 93.184.221.240.http: Flags [R], seq 3280738782, win 0, length 0
В интернетах копался долго, но ничего похожего не нашел.Насколько я понимаю, в цепочку POSTROUTING таблицы nat должны попадать все выходящие через интерфейс (в данном случае eth0) пакеты, и source IP у них должен подменяться. После этого теоретически с ними мог бы что-до делать mangle POSTROUTING, но его у меня нету. Но по факту - иногда source IP не подменяется.
Вопрос: а почему? И как от этого избавиться.
Примечание: если сделать трансляцию «один в один», типа
-A POSTROUTING -s 10.10.10.124/32 -o eth0 -j SNAT --to-source 1.1.1.1