![SynProxy 无法返回具有非对称双桥拓扑的 syn ack 数据包](https://linux22.com/image/658934/SynProxy%20%E6%97%A0%E6%B3%95%E8%BF%94%E5%9B%9E%E5%85%B7%E6%9C%89%E9%9D%9E%E5%AF%B9%E7%A7%B0%E5%8F%8C%E6%A1%A5%E6%8B%93%E6%89%91%E7%9A%84%20syn%20ack%20%E6%95%B0%E6%8D%AE%E5%8C%85.png)
当我使用 ssh 从 172.16.11.5 和 172.16.10.6 连接时,我有一个如下所示的非对称双桥拓扑,但由于 SynProxy,我无法连接。
-------
| |
---o--- 172.16.11.5
|
|
-----o----- 172.16.11.6
| |
| | default gw 1.1.1.1
| |
1.1.1.2/30 --o----o--- 2.2.2.2/30
| |
| |
| | (enp10s0f0)
----o----o-----
| |
| XXX |
| |
| br1 br0 | synproxy
| |
----o----o-----
| |
| |
| |
1.1.1.1/30 --o----o--- 2.2.2.1/30
| |
| | default gw 2.2.2.2
| |
-----o----- 172.16.10.1
|
|
---o--- 172.16.10.6
| |
-------
在 172.16.11.5 和 172.16.10.6 之间的所有机器上,“rp 过滤”已关闭,“ip 转发”已打开。拓扑中间有一台机器,称为“XXX”机器。XXX 有两个网桥和一个 SynProxy。
当 XXX 上的 SynProxy 关闭时,我可以从 172.16.11.5 ping 到 172.16.10.6,icmp 数据包遵循以下路径:br1->172.16.10.1->172.16.10.6->172.16.10.1->br0。此外,我可以使用 ssh 从 172.16.11.5 访问 172.16.10.6。因此,TCP 流量按我预期的方式运行。
但是,当 XXX 上的 SynProxy 处于 ON 状态时,我可以从 172.16.11.5 ping 到 172.16.10.6,icmp 数据包遵循相同的路径。但我无法使用 ssh 从 172.16.11.5 访问 172.16.10.6。这是因为 synproxy 无法通过 br1 iface 发送 syn ack 回复。如果我在 XXX 上添加 synack 数据包的路由,我可以使用 ssh 从 172.16.11.5 连接到 172.16.10.6。
路由添加 172.16.11.5 dev enp10s0f0
XXX 的 SynProxy 规则:
iptables -t raw -A PREROUTING -i br0 -p tcp -m physdev --physdev-in
enp10s0f0 -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j CT --notrack
iptables -t raw -A PREROUTING -i br1 -p tcp -m physdev --physdev-in
enp11s0f0 -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j CT --notrack
iptables -t filter -A FORWARD -i br0 -p tcp -m physdev --physdev-in
enp10s0f0 -m tcp -m state --state INVALID,UNTRACKED -j SYNPROXY
--sack-perm --timestamp --wscale 7 --mss 1460
iptables -t filter -A FORWARD -i br0 -m physdev --physdev-in enp10s0f0
-m state --state INVALID -j DROP
iptables -t filter -A FORWARD -i br1 -p tcp -m physdev --physdev-in
enp11s0f0 -m tcp -m state --state INVALID,UNTRACKED -j SYNPROXY
--sack-perm --timestamp --wscale 7 --mss 1460
iptables -t filter -A FORWARD -i br1 -m physdev --physdev-in enp11s0f0
-m state --state INVALID -j DROP
但这是不能接受的,因为 172.16.11.0 网络是云。因此我无法将所有云网络的路由添加到路由表,也无法将 mac 地址添加到 arp 表。
当 SynProxy 在 XXX 上处于开启状态时,如何使用 ssh 从 172.16.11.5 连接到 172.16.10.6 机器?或者这可能吗?
提前致谢,
答案1
我认为解决此问题的最简单方法是更改网关机器上的默认路由以使用相同的桥接器,这样它就不再不对称。
- 在 172.16.11.6 上将默认值设置为 2.2.2.1(通过 br0)
- 在 172.16.10.1 上将默认值设置为 2.2.2.2(通过 br0)
我很好奇为什么要这样设计...第二座桥的用途是什么?