源地址相同的数据包被丢弃,且有环回

源地址相同的数据包被丢弃,且有环回

有两台服务器具有相同的 VIP,当一台服务器 curl 另一台服务器时,回复数据包(其 src addr 与 lo addr 相同)似乎被请求服务器丢弃。我该如何允许这种情况?

编辑:仅在 ipv4、ipv6 上工作,rp_filter 关闭,转发打开

上下文:我有一个 ipvs LB,它还充当通过第 3 层连接到服务器的路由器。当我使用 LB 中的 VIP less 进行 curl 时,一切正常。但是当 VIP 处于 lo 状态时,来自服务器的回复数据包似乎被丢弃,我在 iptables 中放置了一个跟踪,它只显示 raw:PREROUTING:policy(默认接受)。

5月25日 22:31:02 内核:[170321.010523] TRACE:raw:PREROUTING:policy:4 IN=接口 OUT=MAC=SRC=172.20.222.30 DST=172.20.222.9 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=443 DPT=40487 SEQ=1050428198 ACK=2154353852 WINDOW=62076 RES=0x00 ACK SYN URGP=0 OPT(020422B00402080AF5EE4941A68D3D5A01030307)

答案1

我发现内核参数 accept_local 可以解决这个问题。在较新的内核中,accept_local 不再依赖于 rp_filter 的值

net.ipv4.conf.default.accept_local = 1
net.ipv4.conf.all.accept_local = 1

accept_local - BOOLEAN 接受具有本地源地址的数据包。结合合适的路由,这可用于通过线路在两个本地接口之间引导数据包并正确接受它们。默认为 FALSE

相关内容