В моем сценарии есть машина, которая одновременно действует как межсетевой экран на базе iptables и как сервер OpenVPN. Он имеет два сетевых интерфейса - eth1
подключен к Интернету, тогда как eth0
подключен к локальной сети за машиной.
До сих пор понимаю, как настроить iptables для маршрутизация / TUNна основе VPN-соединений. Вы можете найти следующую визуализацию на openvpn.net:
| FIREWALL |
| |
{eth1 eth0}
| \ / |
| +----------------------+ |
| | iptables and | |
| | routing engine | |
| +--+----------------+--+ |
| | | |
| (openvpn)-------{tun0} |
| 10.8.0.1 |
+--------------------------------+
Согласно изображению, логический поток пакетов выглядит так:
Интернет -> eth1 -> iptables (через INPUT-цепочку) -> OpenVPN -> tun0 -> iptables (через FORWARD-цепочку) -> eth0 -> LAN
... что должно привести к следующим правилам iptables, если я не ошибаюсь:
# allow incoming and outgoing VPN traffic from/to the internet
iptables -A INPUT -i eth1 -p udp --dport 1194 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
# allow traffic between tun0 and LAN
iptables -A FORWARD -i tun+ -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -o tun+ -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Все идет нормально. Сейчас я хочу реализовать тот же сценарий, что и выше, но с мост / TAPна основе VPN-соединений, но у меня проблемы с пониманием логического потока пакетов и созданием правил iptables в среде с мостом.
Что я получаю до сих пор:
tun0
заменяется на tap0
br0
Для простоты предположим, что и tap0, и br0 уже настроены.
Чего я не понимаю, так это потока пакетов с точки зрения iptables и особенно того, как iptables работает с br0
. Моя цель - создать ту же визуализацию и правила, что и выше, но для описанной среды на основе моста / TAP.
edit: Мне не нужно создавать настоящую и готовую к работе среду, не волнуйтесь. Я просто хочу это понять :)
Что касается iptables, br0 можно рассматривать как единый интерфейс (например, вы можете сопоставить -i br0
или -o br0
, который будет применяться к пакетам, прибывающим или уходящим через tap0, а также eth0), но вы также можете ссылаться на его подынтерфейсы в правилах, используя physdev
модуль, например -m physdev --physdev-in tap0
.
Пожалуйста, постарайтесь конкретизировать свой вопрос, и я постараюсь ответить на него лучше.