![源地址相同的数据包被丢弃,且有环回](https://linux22.com/image/786262/%E6%BA%90%E5%9C%B0%E5%9D%80%E7%9B%B8%E5%90%8C%E7%9A%84%E6%95%B0%E6%8D%AE%E5%8C%85%E8%A2%AB%E4%B8%A2%E5%BC%83%EF%BC%8C%E4%B8%94%E6%9C%89%E7%8E%AF%E5%9B%9E.png)
有两台服务器具有相同的 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