Я отказался от Shorewall, потому что он казался излишним для простого и неизменного набора правил, который, похоже, требовал.
У меня есть 2 межсетевых экрана-бастиона в стойке между хостом и каждым провайдером.
Хост содержит виртуальную машину с привязкой к корпусу, которая балансирует нагрузку на 2 подключения WAN и обеспечивает маршрутизацию для нескольких сетей.
Поскольку на нем также размещаются мосты, хост виртуальной машины имеет IP-адрес в каждой подсети, который соединяет каждый брандмауэр-бастион с их собственным портом WAN на маршрутизаторе виртуальной машины.
Хосту виртуальной машины не требуется ни одно из этих подключений, кроме возможности предоставить маршрутизатору доступ виртуальной машины к физическим портам - маршрутизатор виртуальной машины предоставляет шлюз и DNS хоста.
Цель состоит в том, чтобы определить правила, которые заставляют весь входящий трафик на eth (n) и vmbr (n) использовать VM-WAN-IP-foo в качестве шлюза, а весь исходящий трафик на eth (n) и vmbr (n) использовать bastion- fw-IP-bar как шлюз.
Также для eth (x) и vmbr (x).
Первоначально я думал, что могу сделать это с помощью:
iptables -A INPUT -i eth(n) -s 0.0.0.0/0 -d 0.0.0.0/0 -j ROUTE --gw foo(n)
iptables -A OUTPUT -o eth(n) -s 0.0.0.0/0 -d 0.0.0.0/0 -j ROUTE --gw bar(n)
и
iptables -A INPUT -i eth(x) -s 0.0.0.0/0 -d 0.0.0.0/0 -j ROUTE --gw foo(x)
iptables -A OUTPUT -o eth(x) -s 0.0.0.0/0 -d 0.0.0.0/0 -j ROUTE --gw bar(x)
Но этого не произошло, поэтому я, должно быть, неправильно понимаю то, что вижу на странице руководства.
Когда я спросил в IRC-комнате #netfilter, кто-то упомянул, что «ROUTE» обесценился, и вместо этого использовал -mangle. Никогда бы не подумал, что для чего-то вроде этого понадобится покалечка.
Я ошибаюсь, что это должно быть просто и понятно?
У меня такое чувство, что есть более простой способ, о котором я просто не знаю, может быть, кто-то сможет меня просветить.
РЕДАКТИРОВАТЬ:
Другими словами, хост виртуальной машины размещает эти точки подключения, но не может их использовать.
Он и все остальное, что может попасть на эти интерфейсы, должно пройти через маршрутизатор виртуальной машины, чтобы достичь узла виртуальной машины.
Вот рисунок до и после того, что я имею в виду:
|-------| |-------|
| ISP-A |<--| | ISP-B |<--|
|-------| | |-------| |
| |
V V
|-----------| |-----------|
| BASTION-A |<--| | BASTION-B |<--|
|-----------| | |-----------| |
| |
| |
| |
VM Host | |
| | |
| | |
\|/ | |
V | |
| |
||=================\|/=====================\|/==========||
|| |---V---| |---V---| ||
|| | |<----\ /---->| | ||
|| | | \ / | | ||
|| | eth(n)| V |eth(x) | ||
|| | | | | | ||
|| | |<--| | |-->| | ||
|| |-------| | | | |-------| ||
|| | | | ||
|| | | | ||
|| | | | ||
|| |-------| | | | |-------| ||
|| | |<--| | |-->| | ||
|| | | | | | ||
|| |vmbr(n)| | |vmbr(x)| ||
|| | | | | | ||
|| |-->| |<--| | |-->| |<--| ||
|| | |-------| | | | |-------| | ||
|| | | | | | ||
|| | | | | | ||
|| | | | | | ||
|| | | | | | ||
|| | | | | | ||
|| | | | | | ||
|| | / / \ \ | ||
|| | V V V V |---| ||
|| | |---------------| | ||
|| | | | | ||
|| | | | | ||
|| | |-->| VM Host | | ||
|| | | | | | ||
|| | | | | | ||
|| | | |---------------| | ||
|| | | | ||
|| | | | ||
|| V V V ||
|| |-------------------------------------------| ||
|| | WAN LAN WAN | ||
|| | | ||
|| | VM Router | ||
|| | | ||
|| | | ||
|| | | ||
|| | LAN LAN LAN LAN SAN | ||
|| |-------------------------------------------| ||
|| ^ ^ ^ ^ ^ ||
|| | | | | | ||
|| | | | | | ||
|| | | | | | ||
|| , , , , , ||
|| .*^*, .*^*, .*^*, .*^*, .*^*, ||
|| ( ) ( ) ( ) ( ) ( ) ||
|| (( ) (( ) (( ) (( ) (( ) ||
|| ( .) ( .) ( .) ( .) ( .) ||
|| `~ `~ `~ `~ `~ ||
|| ||
|| ||
||======================================================||
|-------| |-------|
| ISP-A |<--| | ISP-B |<--|
|-------| | |-------| |
| |
V V
|-----------| |-----------|
| BASTION-A |<--| | BASTION-B |<--|
|-----------| | |-----------| |
| |
| |
| |
VM Host | |
| | |
| | |
\|/ | |
V | |
| |
||=================\|/=====================\|/==========||
|| |---V---| |---V---| ||
|| | |<----\ /---->| | ||
|| | | \ / | | ||
|| | eth(n)| V |eth(x) | ||
|| | | | | | ||
|| | |<--| | |-->| | ||
|| |-------| | | | |-------| ||
|| | | | ||
|| | | | ||
|| | | | ||
|| |-------| | | | |-------| ||
|| | |<--| | |-->| | ||
|| | | | | | ||
|| |vmbr(n)| | |vmbr(x)| ||
|| | | | | | ||
|| |-->| |<--| | |-->| |<--| ||
|| | |-------| | | | |-------| | ||
|| | | | | | ||
|| | //============================// | ||
|| | // // | ||
|| | // IP Tables Says: 'Detour' // | ||
|| | // // | ||
|| | //============================// | ||
|| | / / \ \ | ||
|| | V V V V |---| ||
|| | |---------------| | ||
|| | | | | ||
|| | | | | ||
|| | |-->| VM Host | | ||
|| | | | | | ||
|| | | | | | ||
|| | | |---------------| | ||
|| | | | ||
|| | | | ||
|| V V V ||
|| |-------------------------------------------| ||
|| | WAN LAN WAN | ||
|| | | ||
|| | VM Router | ||
|| | | ||
|| | | ||
|| | | ||
|| | LAN LAN LAN LAN SAN | ||
|| |-------------------------------------------| ||
|| ^ ^ ^ ^ ^ ||
|| | | | | | ||
|| | | | | | ||
|| | | | | | ||
|| , , , , , ||
|| .*^*, .*^*, .*^*, .*^*, .*^*, ||
|| ( ) ( ) ( ) ( ) ( ) ||
|| (( ) (( ) (( ) (( ) (( ) ||
|| ( .) ( .) ( .) ( .) ( .) ||
|| `~ `~ `~ `~ `~ ||
|| ||
|| ||
||======================================================||
Я не уверен, что вы действительно можете определить шлюз для входящего трафика.
Я могу ошибаться, но разве вы не используете статический NAT? Попробуйте использовать цель SNAT (она находится в таблице манжетов).