iptables изолировать VM Host от vbridge
Я бросил shorewall, потому что он казался излишним для простого, неизменного набора правил, к которому это, кажется, нужно.
У меня есть 2 бастионных брандмауэра в стойке между хостом и каждым провайдером.
Хост содержит виртуальную машину с привязкой к корпусу, которая балансирует нагрузку для двух WAN-соединений и обеспечивает маршрутизацию для нескольких сетей.
Поскольку он также является хостом мостов, у хоста виртуальной машины есть IP-адрес в каждой подсети, которая подключает каждый бастионный бастион к их собственному порту WAN на маршрутизаторе виртуальной машины.
Хосту виртуальной машины не требуется ни одно из этих соединений, кроме как для обеспечения доступа виртуальной машины маршрутизатора к физическим портам - маршрутизатор виртуальной машины предоставляет шлюз хоста и DNS.
Цель состоит в том, чтобы определить правила, которые заставляют весь входящий трафик на eth(n) и vmbr(n) использовать VM-WAN-IP-foo в качестве шлюза, а весь исходящий трафик на eth(n) и vmbr(n) использует bastion- FW-IP-бар в качестве шлюза.
Также для 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. Я бы никогда не подумал, что калечить нужно для чего-то подобного.
Я ошибаюсь, что это должно быть просто и понятно?
У меня есть ощущение, что есть более простой способ сделать это, о котором я просто не знаю, может быть, кто-то может просветить меня.
РЕДАКТИРОВАТЬ:
Другими словами, хост VM размещает эти точки подключения, но не может их использовать.
И все, что может найти путь к этим интерфейсам, должно пройти через маршрутизатор VM, чтобы добраться до хоста VM.
Вот рисунок до и после того, что я имею в виду:
|-------| |-------|
| 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 | ||
|| |-------------------------------------------| ||
|| ^ ^ ^ ^ ^ ||
|| | | | | | ||
|| | | | | | ||
|| | | | | | ||
|| , , , , , ||
|| .*^*, .*^*, .*^*, .*^*, .*^*, ||
|| ( ) ( ) ( ) ( ) ( ) ||
|| (( ) (( ) (( ) (( ) (( ) ||
|| ( .) ( .) ( .) ( .) ( .) ||
|| `~ `~ `~ `~ `~ ||
|| ||
|| ||
||======================================================||
2 ответа
Я не уверен, что вы действительно можете определить шлюз для входящего трафика.
Я могу ошибаться, но разве вы не делаете статический NAT? Попробуйте цель SNAT (она находится в таблице mangle).