Цель: на маршрутизаторе 192.168.0.2 сделать заворот http трафика (80 порт tcp) на маршрутизатор со SQUID 192.168.1.2 с помощью iptables. Физически маршрутизаторы находятся за разными портами и свичами.

Это оказалось не возможно выполнить малой кровью – правила PREROUTING с DSTNAT и POSTROUTING с SRCNAT работают криво – пакет приходит “как бы” от 192.168.0.2, а в заголовке http стоит адрес исходного устройства, после чего прокси-сервер отбрасывает запрос.

Прозрачное проксирование с помощью iptables, iproute2

Все работы производятся на 192.168.0.2.

Маркируем пакет:

iptables -t mangle -A PREROUTING -i eth1 -s 192.168.0.0/24 ! -d 192.168.0.0/16 -p tcp –dport 80 -j MARK –set-mark 2


Ставим маркер “2”1) только на пакеты из интерфейса eth1, только из подсети 192.168.0.0/24, только на нелокальные адреса, только по TCP 80 порту.

Настраиваем маршрутизацию для конкретного маркера:

Добавляем отдельную таблицу маршрутизации:2) 3)

echo 202 www.out>> /etc/iproute2/rt_tables


Редактируем сетевой интерфейс eth1 – /etc/network/interfaces, добавляем создание маршрутов при старте сети:

up ip rule add fwmark 2 table www.out
up ip route add default via 192.168.1.1 dev eth1 table www.out


Маршрутизация через 192.168.1.1 обусловлена тем, что он является промежуточным звеном между сетями 192.168.0.0/24 и 192.168.1.0/24, а пакеты передаёт дальше, на 192.168.1.2.

Очищаем кеш пакетов:

ip route flush cache


Наслаждаемся работой.

1) Поле mark представляет собой беззнаковое целое число в диапазоне от 0 до 4294967296 для 32-битных систем.
2) Вместо www.out можно вставить любое название, это только имя таблицы маршрутов.
3) 202 так же можно заменить на своё значение, это резервируемый номер таблицы маршрутов.

Добавить комментарий