在单个网络接口上具有多个公共 IP的管理程序上,有两组虚拟机。
- A 组成员通过主机接口(通过设置路由的网桥)直接将其公共 IP 路由给他们。[1]
- B 组成员位于具有 NAT 配置的网桥上,因此他们获得私有 IP,并且他们的连接通过一个特定的公共 IP 进行 NAT。我们称之为共享地址
IPb
。[2]
对于IPb
某些端口上的传入连接,将转发给某些 B 组成员。我遇到的问题是 DNAT(端口转发)规则不仅适用于传入的数据包IPb
,而且来自任何其他公共 IP。
如何将 DNAT 规则限制为特定于仅定向到的数据包IPb
?
我尝试-dst
IPb
了PREROUTING
规则,但这实际上导致规则根本没有被触发(端口转发停止)。[3]
谢谢
[1]
auto eth0
iface eth0 inet static
address <eth0-main-ip>/32
gateway <gateway-ip>
pointopoint <gateway-ip>
#GroupA Bridge:
auto vmbr12
iface vmbr12 inet static
address <eth0-main-ip>/32
bridge-ports none
bridge-stp off
bridge-fd 0
up ip route add <Public-IPa>/32 via <eth0-main-ip> dev vmbr12
down ip route del <Public-IPa>/32 via <eth0-main-ip> dev vmbr12
.
.
.
[2]
#GroupB Bridge:
auto vmbr4
iface vmbr4 inet static
address 10.0.0.1/16
bridge-ports none
bridge-stp off
bridge-fd 0
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '10.0.0.0/16' -o eth0 -j MASQUERADE
post-up iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 22 -j DNAT --to 10.0.101.1:22
post-up iptables -A FORWARD -p tcp -d 10.0.101.1 --dport 22 -j ACCEPT
post-down iptables -t nat -D POSTROUTING -s '10.0.0.0/16' -o eth0 -j MASQUERADE
post-down iptables -D PREROUTING -t nat -i eth0 -p tcp --dport 22 -j DNAT --to 10.0.101.1:22
post-down iptables -D FORWARD -p tcp -d 10.0.101.1 --dport 22 -j ACCEPT
.
.
.
[3]
#Using IPb in PREROUTING rule
<snip>
post-up iptables -t nat -A POSTROUTING -s '10.0.0.0/16' -o eth0 -j MASQUERADE
post-up iptables -A PREROUTING -t nat -i eth0 -p tcp -dst IPb --dport 22 -j DNAT --to 10.0.101.1:22
post-up iptables -A FORWARD -p tcp -d 10.0.101.1 --dport 22 -j ACCEPT
post-down iptables -t nat -D POSTROUTING -s '10.0.0.0/16' -o eth0 -j MASQUERADE
post-down iptables -D PREROUTING -t nat -i eth0 -p tcp -dst IPb --dport 22 -j DNAT --to 10.0.101.1:22
post-down iptables -D FORWARD -p tcp -d 10.0.101.1 --dport 22 -j ACCEPT
</snip>