LINUX.ORG.RU
решено ФорумAdmin

Как пробросить трафик между двумя интерфейсами через свой фильтр?

 ,


0

2

Есть два физических интерфейса, например, eth0 и eth1. Юзер подключается к eth0, я ему раздаю ip, включаю маскарадинг на eth1, и он из-под NAT выходит в инет через этот eth1. Тут вопросов нет.

Я хочу этот трафик обрабатывать, протаскивать все пакеты через свой процесс и иногда кое-что в этих пакетах менять. Как это сделать? Попробовал сделать так: написал софтину, которая поднимает два tap интерфейса, tap0 и tap1, внутри пока что просто читаю из tap0 и пишу в tap1 и наоборот (дальше надо будет разбирать и модифицировать). Мне надо заставить пакеты ходить так: eth0 - (tap0 - tap1) - eth1.

Сделал:

ifconfig tap0 192.168.100.1
ifconfig tap1 192.168.200.1
ip route add <адрес внешнего сервера> via 192.168.100.1
iptables -t nat -A POSTROUTING -o tap0 -j MASQUERADE

Теперь пакеты идут через мой tap0, но во внешнюю сеть они не уходят. Точнее, идут только ARP запросы, ответов нет, на этом все заканчивается. Как мне заставить пакеты идти с tap1 в eth1?

Может быть, есть более адекватный способ эту задачу решить, но еще раз, внимание! Мне надо не просто пробросить трафик, а иметь возможность делать некую произвольную модификацию пакетов, т.е. только лишь средствами iptables тут не обойтись. Или обойтись? В iptables не силен..

ARP-запросы предназначены для хождения в пределах одной сети (broadcast домена), через маршрутизатор они не должны проходить, это бессмысленно. Иначе маршрутизатор в этом случае превращается в мост (обычный switch).

Вам же, кажется, подойдёт iptables NFQUEUE (https://ru.wikibooks.org/wiki/Iptables):

Передача на обработку userspace-демонам пакетов целиком (NFQUEUE)
либо информации о них (NFLOG), что позволяет решать самый широкий круг
задач по фильтрации, модификации и учету трафика.

И ещё статья на эту тему - Using NFQUEUE to build your own firewall

И ещё: читать пакеты с eth0 и отправлять через eth1 совсем не обязательно, ядро и само это сделает с помощью механизма маршрутизации. Достаточно читать из NFQUEUE и возвращать туда же, а дальше ядро само разберётся.

spirit ★★★★★
()
Ответ на: комментарий от spirit

Огромное спасибо! NFQUEUE - это как раз то, что мне нужно.

a400k4a
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.