У меня на компьютере Linux есть два физических сетевых адаптера: eth0 и eth1. eth0 предназначен для пользователей, а eth1 имеет доступ к внешней сети. Затем я могу сделать iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
, и пользователи могут подключаться к сети за NAT.
Что я хочу сделать: вручную захватывать пакеты из eth0, проверять его (возможно, вносить некоторые изменения, dump et c. ) и напишите обратно в eth1. Примерно так:
+-------------------------------------+
| / my program \ |
user --- |eth0 ----- |tap0 --- tap1| ----- eth1| --- Network
+-------------------------------------+
Я написал программу, которая открывает tap0 и tap1, просто читает из tap0 и пишет в tap1 и наоборот (пока нет изменений пакета):
tap0 192.168.100.1
tap1 192.168.200.1
Тогда:
ip route add <outer network IP> via 192.168.100.1
iptables -t nat -A POSTROUTING -o tap0 -j MASQUERADE
Я тоже пытался;
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE`)
Я вижу ARP-запросы, поступающие на tap0 и исходящие от tap1 (повторяется моей программой), но не более того.
Как сделать эти пакеты на go к eth1? Как сделать все входящие пакеты на eth0 до go через мой фильтр и во внешнюю сеть (не только указав c адрес)?