proxy_arp=1与默认路由之争

默认路由使得proxy_arp代理所有ip

本文探索proxy_arp=1的含义,并验证。
proxy_arp=1意味着该接口的arp报文dip是本机路由可达时,则响应。
但同时配置了默认路由时,这意味着所有的ip都是路由可达,任意ip的arp请求都会有arp响应。

测试验证

测试脚本如下,测试结果为arping通。

# arp proxy 测试
ns=nsarp-$(date "+%H%M")
echo ${ns}
sudo ip netns add ${ns}
sudo ip link add dev veth1 type veth peer name veth1n
sudo ip addr add 10.10.20.2/24 dev veth1
sudo ip link set dev veth1 up
sudo ip link set veth1n netns ${ns}
sudo ip netns exec ${ns} ip addr add 10.10.20.3/24 dev veth1n
sudo ip netns exec ${ns} ip link set dev veth1n up
sudo ip netns exec ${ns} sysctl -w net.ipv4.conf.veth1n.proxy_arp=1
sudo ip netns exec ${ns} ip tuntap add tapm1 mode tap
sudo ip netns exec ${ns} ip link set dev tapm1 up
sudo ip netns exec ${ns} ip addr add 10.10.10.2/24 dev tapm1
sudo ip netns exec ${ns} ip route add default via 10.10.10.1 dev tapm1 # 添加默认路由,删除后则arping不通
sudo arping -I veth1 8.8.8.8 -c2  # arping通
sudo ip netns exec ${ns} ip route
sudo ip netns del ${ns}

推荐用法 - 如何约束arp_proxy的代理范围

问:在有默认路由的情况下,如何约束arp_proxy的代理范围?
答:使用arp_filter=1,只响应同源同路的arp请求。

你可能感兴趣的:(网络)