Ubuntu 中配置网络优先级——修改跃点 metric
1 什么是跃点 metric
同一台ubuntu主机可能有不同的网络,比如多个有线网络、wlan、4G等等。当这些网络同时连接时,需要规定一个优先级,一般是有线>wifi>4G。优先级就是通过路由的跃点进行配置的。
输入命令查看路由
route -n
输出如下:
root@user:~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 100 0 0 eth0
0.0.0.0 192.168.0.1 0.0.0.0 UG 102 0 0 eth1
0.0.0.0 192.168.0.1 0.0.0.0 UG 600 0 0 wlan0
0.0.0.0 192.168.225.1 0.0.0.0 UG 1000 0 0 usb0
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 102 0 0 eth1
192.168.0.0 0.0.0.0 255.255.255.0 U 600 0 0 wlan0
192.168.225.0 0.0.0.0 255.255.255.0 U 1000 0 0 usb0
前四个便为路由,Gateway表示下一跳的节点,当访问不为内网的网段时,便会通过这些路由跳转出去,而每个条目都有一个Metric,也称之为跃点,跃点表示了下一跳的开销。在选择路由时,系统肯定是优先选择开销比较小的路径。所以我们可以通过修改metric,来配置网络的优先级。metric越小,网络的优先级越高。
2 配置方式
在桌面版本的Ubuntu中,我们一般是通过NetworkManager进行网络管理的,所以使用它进行设置,下面以设置usb0节点为例。
2.1 列出 NetworkManager 管理的连接
运行以下命令:
nmcli connection show
你会看到类似以下的输出:
NAME UUID TYPE DEVICE
Wired connection 1 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ethernet eth0
Wired connection 2 yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy ethernet eth1
MyWifi zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz wifi wlan0
usb-tethering aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa ethernet usb0
找到对应 usb0 的连接名称(例如可能叫 usb-tethering 或其他)。
2.2 设置 route-metric(跃点数)
假设你找到的连接名是 usb-tethering,执行:
sudo nmcli connection modify "usb-tethering" ipv4.route-metric 500
2.3 重启连接使设置生效
sudo nmcli connection down "usb-tethering" && sudo nmcli connection up "usb-tethering"
2.4 验证路由优先级
使用以下命令确认默认路由的优先级:
ip route
你应该看到默认网关(default via ...)的 metric 值反映了你设定的优先顺序。
3 如果 usb0 不被 NetworkManager 管理
你可以用以下命令确认:
nmcli device status
如果 usb0 状态是 unmanaged,你需要让 NetworkManager 管理它。
3.1 设置 NetworkManager 管理 usb0
编辑配置文件:
sudo nano /etc/NetworkManager/NetworkManager.conf
确保在 [keyfile] 段中添加或修改:
[keyfile]
unmanaged-devices=
然后重启 NetworkManager:
sudo systemctl restart NetworkManager
4 验证
ip route get 8.8.8.8
输出示例:
8.8.8.8 via 192.168.0.1 dev eth0 src 192.168.0.166 uid 0
cache
说明:
- 流量会通过
eth0接口发出 src是使用的源 IP(你的本地地址)via是网关地址
留下评论