Назад | Перейти на главную страницу

iptables bridge redirect также перенаправляет другие интерфейсы

Запуск домашнего сервера Ubuntu 14.04LTS. У меня есть небольшое устройство IOT, которое отправляет сообщения HTTP на удаленный веб-сервер, который я хочу перенаправить в локальный процесс (в основном перехватывая его сообщения в моем собственном локальном процессе). Сервер использует eth0 (встроенный порт Ethernet), устройство IOT находится на eth1, который является USB-ключом Ethernet. Я создал мост в / etc / network / interfaces

auto eth0 
iface eth0 inet dhcp 
auto eth1 
iface eth1 inet manual 
auto br0 
iface br0 inet dhcp    
   bridge_ports eth0 eth1

Я использовал следующее правило iptables для перенаправления трафика моста на локальный порт 22041. Это нормально работает.

iptables -t nat -A PREROUTING -i br0 -p tcp --dport 80 -j REDIRECT --to-port 22041

Проблема в том, что он также перенаправляет трафик порта 80 на сервер, когда что-либо в локальной сети пытается получить доступ к веб-странице. Если я запустил firefox http://127.0.0.1/page'с сервера, все работает нормально. Если я запускаю firefox httpt: // server_ip / page с другого компьютера в локальной сети, он перенаправляется на порт 22041.

Я думал, что '-i br0' применит это правило только к трафику, идущему с моста, но, очевидно, это не то, что происходит. Как запретить iptables перенаправлять внешний трафик на порт 22041?

Заранее спасибо, TD

Думаю, я нашел свой ответ в другом посте. Если я использую Physdev для сопоставления eth1 вместо сопоставления на мосту, он работает и не останавливает мой обычный трафик.

iptables -t nat -A PREROUTING -m physdev --physdev-in eth1 -p tcp --dport 80 -j REDIRECT --to-port 22041