pod 地址 10.151.163.151 外网网段 172.31.0.0/20
修改的方式为:
iptables -I PREROUTING -t mangle -s 10.151.163.151 -d 172.31.0.0/20 -j MARK --set-mark 100
ip r add table 3 172.31.0.0/20 dev eth4 proto kernel scope link src 172.31.0.72
ip rule add fwmark 100 table 3
这么修改之后,发现在 pod 里面 ping 不通
pod 网卡抓包是
listening on cali2b6e696b9f2, link-type EN10MB (Ethernet), capture size 262144 bytes
10:58:08.593372 IP 10.151.163.151 > 172.31.0.86: ICMP echo request, id 45, seq 0, length 64
10:58:09.594439 IP 10.151.163.151 > 172.31.0.86: ICMP echo request, id 45, seq 1, length 64
eth4 网卡抓包是
listening on eth4, link-type EN10MB (Ethernet), capture size 262144 bytes
10:57:48.484657 IP 172.31.0.72 > 172.31.0.86: ICMP echo request, id 0, seq 10, length 64
10:57:48.486355 IP 172.31.0.86 > 172.31.0.72: ICMP echo reply, id 0, seq 10, length 64
10:57:50.487039 IP 172.31.0.72 > 172.31.0.86: ICMP echo request, id 0, seq 12, length 64
10:57:50.487943 IP 172.31.0.86 > 172.31.0.72: ICMP echo reply, id 0, seq 12, length 64
看起来 eth4 上的网卡是正常的,有发出去的和接受的包,但是 pod 网卡上只有发出去的包,没有接收的,感觉缺了一步,不知道是哪个地方少了?请大家帮忙看下
1
julyclyde 2020-06-02 11:52:09 +08:00 1
rp_filter
|
2
zydrsnuo 2020-06-02 12:29:39 +08:00 via Android 1
多半是 rp_filter
rp_filter 有三个值:0/1/2, 具体含意如下: 0: 关闭反向路由校验. 1: 开启严格的反向路由校验. 对每个进来的数据包, 校验其反向路由是否是最佳路由. 如果反向路由不是最佳路由, 则直接丢弃该数据包. 2: 开启松散的反向路由校验. 对每个进来的数据包, 校验其源地址是否可达, 即反向路由是否能通(通过任意网卡), 如果反向路径不通, 则直接丢弃该数据包. 当 rp_filter 的值为 1 时, 要求反向路由的出口必须与数据包的入口网卡是同一块, 否则就会丢弃数据包. 当 rp_filter 的值为 2 时, 要求反向路由必须是可达的, 如果反路由不可达, 则会丢弃数据包. 把 rp_filter 值设为 0, 关闭反向路由校验: for x in /proc/sys/net/ipv4/conf/*/rp_filter do echo 0 > "${x}" done 查看效果: cat /proc/sys/net/ipv4/conf/*/rp_filter |
3
sniperking1234 OP @zydrsnuo 果然修改了就好了,多谢指点
|
4
julyclyde 2020-06-02 15:16:25 +08:00
|