我有两个networking接口eth1和wlan0 。 我更喜欢所有出站stream量在wlan0之前通过eth1 ,但是如果eth1不在,那么wlan0应该处理stream量。
两个接口都通过dhclient获得分配的IP。
我已经尝试在dhclient.conf supersede routers interface "wlan0" supersede routers ,但是它没有达到预期的效果(如果wlan0首先启动,并设置为默认网关,那么eth1出现,它不会覆盖网关)。
有一个更好的方法吗?
您正在寻找的关键字是“公制”。 它基本上指定了一个特定的路线是多么“优先”。 本文最后的评论解释了如何在基于Debian的系统上进行设置:
文章有一些关于如何定制dhclient的信息,但是注释有一个更简单的select:
另一种方法是编辑/ etc / networking / interfaces,并在您不希望强制stream量的NIC部分下,添加'metric 150'(不含引号)行。
这将给另一个NIC一个更低的指标,给它优先权。
没有内置的方法来做到这一点,但有了一点shell脚本,这是很容易做到的。 由于这两个接口都是由dhclient提供的,所以他们有一个钩子,允许你按照手册执行一个脚本:
紧接在dhclient带着一个新的IP地址,子网掩码和路由的接口之后,在REBOOT / BOUND状态下,它将检查是否存在一个可执行文件/ etc / dhcp / dhclient-up-hooks脚本,如果find。 该脚本可以处理环境中默认不处理的DHCP选项。 每个接口。 / etc / dhcp / dhclient – $ {IF} -up-hooks脚本将覆盖通用脚本,并且在接口$ IF已经启动时被提供。
因此,在您的情况下,如果已经存在默认路由,则需要从WAN接口丢弃默认路由。 所以你可以用下面的shell脚本创build文件/ etc / dhcp / dhclient-wlan0-up-hooks:
RESULT=$(netstat -rn | grep ^0.0.0.0 | grep eth0\$ | wc -l) if [[ $RESULT == "1" ]]; then printf "eth0 already has a default route\n" printf "removing wlan0 default route since eth0 default route found\n" ...enter ip route del command to delete this route ... else printf "do nothing since eth0 default route NOT found" fi