![切换默认接口以路由流量](https://linux22.com/image/1445553/%E5%88%87%E6%8D%A2%E9%BB%98%E8%AE%A4%E6%8E%A5%E5%8F%A3%E4%BB%A5%E8%B7%AF%E7%94%B1%E6%B5%81%E9%87%8F.png)
我想切换我的 Ubuntu 机器的主网络接口,我参考了这个:http://www.cyberciti.biz/faq/linux-setup-default-gateway-with-route-command/。
以下是我的实验设置:我使用路由器为 wlan0 和 eth0 提供连接,使用不同的 IP(分别为 192.168.1.115 和 192.168.1.130,网关 192.168.1.1)。通常 eth0 是默认的,所以我这样做:
route delete gw 192.168.1.1 eth0
route add gw 192.168.1.1 wlan0
有趣的是,虽然 192.168.1.115 现在是主要 IP,但我看到在 eth0 中捕获的传入流量以 192.168.1.115 作为目标 IP,并且 wlan0 中的出站数据包符合预期。
为什么会发生这种情况? 正确的界面切换方法是什么?
谢谢。
答案1
默认情况下,Linux 在 IPv4 上使用“弱主机”模型;也就是说,它会回答分配给系统,即使它们是通过不同的界面进来的。
因此,当路由器广播 ARP 请求时.115
,您的主机会通过两个接口接收该请求,并通过两个接口发送答复,然后路由器首先通过以太网接收答复。
有两个 sysctl 可调参数可以改变此行为:
net.ipv4.conf.*.arp_filter
1 - 允许您在同一个子网上拥有多个网络接口,并且根据内核是否将数据包从 ARP 的 IP 路由出该接口来回答每个接口的 ARP(因此您必须使用基于源的路由才能使其工作)。
net.ipv4.conf.*.arp_ignore
1 - 仅当目标 IP 地址是传入接口上配置的本地地址时才回复
例如,您可以在中设置以下内容sysctl.d
:
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.all.arp_ignore = 1
(请注意,我不完全确定在什么情况下哪种设置合适。)