Товарищи сетевики, помогите разобраться с бесовой приблудой в iptables.

Есть linux машина которая выступает в роли шлюза между локалкой и интернетом.
На данной машинке поднят SQUID для http/https и SNAT для всего остального.

*nat
-A PREROUTING -s 192.168.0.0/24 -d ! 192.168.0.1 -p tcp –dport 80 -j REDIRECT –to-ports 3128
-A PREROUTING -s 192.168.0.0/24 -d ! 192.168.0.1 -p tcp –dport 443 -j REDIRECT –to-ports 3128
-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT –to-source xxx.xxx.xxx.xxx
COMMIT

Первые 2 правила создают перенаправление трафика от машин из локалки на порт SQUID на сервере. А последнее правило занимается собственно трансляцией сетевых адресов в мир.

Всё работает и всё хорошо.
Но есть одни нюанс: необходимо считать трафик.
Для всего кроме http и https, эта задача решается крайне просто использованием правила

*mangle
-A POSTROUTING -o eth1 -j ULOG –ulog-nlgroup 1
COMMIT

Впринципе http и https трафик оно тоже считает, но в качестве источника я получаю ip на котором пработает SQUID, что абсолютно логично.
В тоже время на локальные машины в сети трафик приходит с IP именно узла к которому они отсылали http запрос. Это происходит из-за того что ядро помнит о существовании правила
-A PREROUTING -s 192.168.0.0/24 -d ! 192.168.0.1 -p tcp –dport 80 -j REDIRECT –to-ports 3128
и автоматически делает обратную трансляцию.

Вопрос: как мне отловить пакеты идущие к локальным машинам от сервера уже после автоматической автотрансляции.


Comments Off