Linux 由 OVS 数据包重定向的丢弃
Linux drops redirected by OVS packets
同事们,
我无法通过 Linux 主机转发重定向的(外部)数据包。有我正在试验的网络模型:
+----+(enp2) +----+ +----+
| H2 +---------+ o- +---+ H3 | (192.0.2.153)
+--+-+ | br | +----+
|(enp1) +-+--+
| |
| |
| |
+-------+--------+ +-+--+
| ovs i-br +--+ R1 |
+-------+--------+ +----+
|
|
+--+-+
| H1 | (10.9.8.100)
+----+
对于从 H1 到 H3 的流量,存在常规路由(通过 R1),但出于某些原因,我需要通过 H2 转移某些类型的流量,为此使用 OVS 规则。添加规则后:
ovs-ofctl add-flow i-br dl_type=0x0800,in_port=1,nw_proto=6,tp_dst=80,actions=output:4
我在 enp1@H2 上看到传入的数据包:
15:21:51.596752 IP (tos 0x0, ttl 64, id 48926, offset 0, flags [DF], proto TCP (6), length 60)
10.9.8.100.44444 > 192.0.2.153.http: Flags [S], cksum 0x5f93 (correct), seq 774826047, win 64860, options [mss 1410,sackOK,TS val 3466298181 ecr 0,nop,wscale 7], length 0
虽然允许在 H2 上转发 (net.ipv4.ip_forward=1),但 rpf 已关闭 (net.ipv4.conf.(default|all).rp_filter=0),从 H2 到双方的 ping 工作正常,iptables FORWARD 接受所有内容并配置路由:
10.9.8.0/24 dev enp1s0 proto kernel scope link src 10.9.8.135
192.0.2.0/24 dev enp2s0 proto kernel scope link src 192.0.2.135
我在 enp2@H2 的出口上没有看到这些数据包。
知道为什么会发生这种情况以及如何解决问题才能找到原因吗?
谢谢。
已解决。 OVS 上也需要重写 dst MAC 地址,所以规则必须是:
ovs-ofctl add-flow i-br dl_type=0x0800,in_port=1,nw_proto=6,tp_dst=80,actions=mod_dl_dst:xx:xx:xx:xx:xx:xx,output:4
其中 xx:xx:xx:xx:xx:xx 是 H2 的 mac 地址。这是因为H1在形成输出数据包的以太网头时,设置了R1的dstmac(根据H1的路由table)。在 OVS 上重定向后,此数据包到达 H2,后者将忽略它,因为它的目的地是另一台主机。
同事们,
我无法通过 Linux 主机转发重定向的(外部)数据包。有我正在试验的网络模型:
+----+(enp2) +----+ +----+
| H2 +---------+ o- +---+ H3 | (192.0.2.153)
+--+-+ | br | +----+
|(enp1) +-+--+
| |
| |
| |
+-------+--------+ +-+--+
| ovs i-br +--+ R1 |
+-------+--------+ +----+
|
|
+--+-+
| H1 | (10.9.8.100)
+----+
对于从 H1 到 H3 的流量,存在常规路由(通过 R1),但出于某些原因,我需要通过 H2 转移某些类型的流量,为此使用 OVS 规则。添加规则后:
ovs-ofctl add-flow i-br dl_type=0x0800,in_port=1,nw_proto=6,tp_dst=80,actions=output:4
我在 enp1@H2 上看到传入的数据包:
15:21:51.596752 IP (tos 0x0, ttl 64, id 48926, offset 0, flags [DF], proto TCP (6), length 60)
10.9.8.100.44444 > 192.0.2.153.http: Flags [S], cksum 0x5f93 (correct), seq 774826047, win 64860, options [mss 1410,sackOK,TS val 3466298181 ecr 0,nop,wscale 7], length 0
虽然允许在 H2 上转发 (net.ipv4.ip_forward=1),但 rpf 已关闭 (net.ipv4.conf.(default|all).rp_filter=0),从 H2 到双方的 ping 工作正常,iptables FORWARD 接受所有内容并配置路由:
10.9.8.0/24 dev enp1s0 proto kernel scope link src 10.9.8.135
192.0.2.0/24 dev enp2s0 proto kernel scope link src 192.0.2.135
我在 enp2@H2 的出口上没有看到这些数据包。
知道为什么会发生这种情况以及如何解决问题才能找到原因吗?
谢谢。
已解决。 OVS 上也需要重写 dst MAC 地址,所以规则必须是:
ovs-ofctl add-flow i-br dl_type=0x0800,in_port=1,nw_proto=6,tp_dst=80,actions=mod_dl_dst:xx:xx:xx:xx:xx:xx,output:4
其中 xx:xx:xx:xx:xx:xx 是 H2 的 mac 地址。这是因为H1在形成输出数据包的以太网头时,设置了R1的dstmac(根据H1的路由table)。在 OVS 上重定向后,此数据包到达 H2,后者将忽略它,因为它的目的地是另一台主机。