具有多个路由表和网关的 iptables,网关 MAC 地址相同

具有多个路由表和网关的 iptables,网关 MAC 地址相同

Centos 8,KVM。有人问过类似的问题,我尝试了他们的答案,但没有成功。

我有两个公共 IP 地址 IP1 aaa.bbb.ccc.11 和 IP2 aaa.bbb.ddd.22 以及两个网络适配器 eno1 和 eno2。还有许多客户虚拟机。aaa.bbb.ccc.1 是默认网关,aaa.bbb.ddd.2 是 IP2 的第二个网关。两者均由提供商/数据中心提供(当前位于同一 VLAN 中,但可以根据要求更改)。aaa.bbb.ddd.2 仅在使用另一个路由表 rt2 时有效(详情如下)。

端口转发(iptables qemu hooks)对于公共 IP aaa.bbb.ccc.11 的所有客户虚拟机都运行良好,但我无法让它在 aaa.bbb.ddd.22 上运行。让我们使用简单案例将端口 6000 UDP 转发到 IP 为 192.168.123.2 的客户机(VM2)

网站说明:我成功地将 eno2 和客户虚拟机添加到网桥,实现了连接,但 UDP 数据包丢失率高得离谱。使用网桥的方法是不是该主题(其他人将会研究该主题)。

eno1 和 eno2 使用默认的和类似的 network-scripts/ifcfg-eno1 和 network-scripts/ifcfg-eno2。主机 192.168.123.2 与 virbr2 和网关 192.168.123.1 位于虚拟网络 default1 中。它们都是标准配置 - 如果它们有帮助,我也可以在这里添加它们。如果我从/向我的公共 IP1 添加端口转发,它就会起作用:

/sbin/iptables -I FORWARD -o virbr2 -p udp -d 192.168.123.2 --dport 6000 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -t nat -I PREROUTING -p udp -d aaa.bbb.ccc.11 --dport 6000 -j DNAT --to 192.168.123.2:6000

# -> nc -u aaa.bbb.ccc.11 6000 works

要为 aaa.bbb.ddd.22 添加另一个默认网关,我需要添加第二个路由表和这些规则:

ip route add aaa.bbb.ddd.0/24 dev eno2 src aaa.bbb.ddd.22 table rt2
ip route add default via aaa.bbb.ddd.1 dev eno2 table rt2
ip rule add from aaa.bbb.ddd.22/24 table rt2
ip rule add to aaa.bbb.ddd.22/24 table rt2

现在,我可以从互联网 ping aaa.bbb.ddd.22,并且我也可以将此 IP2 用于 SSH(仍然)。

但是,修改后的端口转发没有效果:

/sbin/iptables -I FORWARD -o virbr2 -p udp -d 192.168.123.2 --dport 6000 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -t nat -I PREROUTING -p udp -d aaa.bbb.ddd.22 --dport 6000 -j DNAT --to 192.168.123.2:6000

# -> nc -u aaa.bbb.ddd.22 6000   does not work

列出我已经做过的无效尝试的数量会毁掉这个问题。但是,一旦我知道了如何解决这个问题的正确方向,我就可以添加更多信息。我找到了一个无法尝试的解决方案,一个带有 MARK 的版本,涉及“iptables -t mangle -A INPUT -m mac --mac-source $GW2_MAC -j MARK --set-mark 2”。数据中心的两个网关 aaa.bbb.ddd.1 和 aaa.bbb.ddd.2 具有相同的 MAC。数据中心提出的唯一更改是将 aaa.bbb.ccc.0/24 和 aaa.bbb.ddd.0/24 移动到不同的 VLAN,并保留 VLAN 标记,以便我可以取消标记(我还不知道如何执行此操作,新主题)。因此,我的问题延伸到是否以及如何让上面的端口转发与我的第二个外部 IP 和网关一起工作。

任何帮助都值得感激!

相关内容