切换默认接口以路由流量

切换默认接口以路由流量

我想切换我的 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

    描述于文档/网络/ip-sysctl.txt:1032

    1 - 允许您在同一个子网上拥有多个网络接口,并且根据内核是否将数据包从 ARP 的 IP 路由出该接口来回答每个接口的 ARP(因此您必须使用基于源的路由才能使其工作)。

  • net.ipv4.conf.*.arp_ignore

    描述于文档/网络/ip-sysctl.txt:1082

    1 - 仅当目标 IP 地址是传入接口上配置的本地地址时才回复

例如,您可以在中设置以下内容sysctl.d

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

(请注意,我不完全确定在什么情况下哪种设置合适。)

相关内容