我放弃了 Shorewall,因为它似乎对于这似乎要求的简单、不变的规则集来说有些过度了。
我在主机和每个 ISP 之间的机架中安装了 2 个堡垒防火墙。
主机包含一个受外壳限制的虚拟机,该虚拟机对 2 个 WAN 连接进行负载平衡并为多个网络提供路由。
由于它还托管网桥,因此 VM 主机在每个子网上都有一个 IP,将每个堡垒防火墙连接到 VM 路由器上各自的 WAN 端口。
除了能够为路由器 VM 提供对物理端口的访问之外,VM 主机不需要这些连接中的任何一个 - VM 路由器提供主机的网关和 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)
但这并没有发生,所以我一定没有正确理解我在手册页中看到的内容。
当我在 #netfilter IRC 房间询问时,有人提到“ROUTE”已弃用,并改用 -mangle。我从未想到过,像这样的事情需要 mangling。
我是不是误以为这应该简单而直接?
我觉得有一种更简单的方法可以解决这个问题,只是我还不知道,也许有人可以启发我。
编辑:
换句话说,VM Host 托管这些连接点,但不允许使用它们。
它以及可能进入这些接口的任何其他东西都必须通过 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 | ||
|| |-------------------------------------------| ||
|| ^ ^ ^ ^ ^ ||
|| | | | | | ||
|| | | | | | ||
|| | | | | | ||
|| , , , , , ||
|| .*^*, .*^*, .*^*, .*^*, .*^*, ||
|| ( ) ( ) ( ) ( ) ( ) ||
|| (( ) (( ) (( ) (( ) (( ) ||
|| ( .) ( .) ( .) ( .) ( .) ||
|| `~ `~ `~ `~ `~ ||
|| ||
|| ||
||======================================================||
答案1
我可能错了,但你不是基本上在做静态 NAT 吗?尝试 SNAT 目标(它在 mangle 表中)。
答案2
我不确定您是否真的可以为入站流量定义网关。