13 networking ubuntu
目标
插入以太网电缆时,让以太网优先于无线
方法
在做了大量的谷歌搜索和阅读之后,我相信我应该做的是
nmcli connection modify [id-of-ethernet-interface] ipv4.route-metric 200
nmcli connection modify [id-of-ethernet-interface] ipv6.route-metric 200
Run Code Online (Sandbox Code Playgroud)
其中 200 是低于无线指标的值,以使以太网优先于无线。
结果
令我困惑的是route -n
在我执行上述命令并重新启动(为了更好的衡量)后我得到的报告,以及这似乎并没有达到我的目标的事实
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 123.456.89.1 0.0.0.0 UG 600 0 0 wlp1s0
0.0.0.0 123.456.89.1 0.0.0.0 UG 20200 0 0 enp0s31f6
123.456.89.0 0.0.0.0 255.255.255.192 U 200 0 0 enp0s31f6
123.456.89.0 0.0.0.0 255.255.255.192 U 600 0 0 wlp1s0
654.321.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 enp0s31f6
Run Code Online (Sandbox Code Playgroud)
这些数字与我的命令执行有关,但对于那些说
0.0.0.0 123.456.89.1 0.0.0.0 UG 20200 0 0 enp0s31f6
654.321.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 enp0s31f6
Run Code Online (Sandbox Code Playgroud)
第一行在我设置的 200 值之前有 20 前缀。这会根据我的运行情况持续应用;如果我将度量值更改为nmcli
500,route -n
将报告 20500。为什么会发生这种情况?看起来肯定不对,因为我说我想要 200 或 500,而不是 20200 和 20500。
第二行有一个度量值,我不知道它来自哪里,而且我似乎根本无法影响它。如果有人可以阐明这一点,我将不胜感激。
除了影响指标之外,这些命令看起来没有任何实际意义;我不能说以太网优先,所以我认为它不是。
其他发现
我发现好奇,似乎是工作到一定程度上,是利用$ sudo ifmetric enp0s31f6 200
。这有两到三件事;
route -n
报告所有带有 Iface 的行都具有enp0s31f6
值 200)ifmetric
命令中提供的度量值)NETLINK: Error: File exists
向我抛出错误。同一命令的后续执行可能会也可能不会导致此错误一些系统信息
更新 #1
$ nmcli c show
NAME UUID TYPE DEVICE
Wired connection 2 [n/a] ethernet enp0s31f6
WiFi1 [n/a] wifi wlp1s0
$ route -n
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 [n/a] 0.0.0.0 UG 600 0 0 wlp1s0
0.0.0.0 [n/a] 0.0.0.0 UG 20200 0 0 enp0s31f6
[n/a] 0.0.0.0 255.255.255.192 U 200 0 0 enp0s31f6
[n/a] 0.0.0.0 255.255.255.192 U 600 0 0 wlp1s0
[n/a] 0.0.0.0 255.255.0.0 U 1000 0 0 enp0s31f6
Run Code Online (Sandbox Code Playgroud)
小智 3
你这里有一堆问题:
123.456.89.0/24
ip rules
)也许您应该依靠外部脚本在插入以太网时自动停用 wifi,如下所示:
创建脚本/etc/NetworkManager/dispatcher.d/70-wifi-wired-exclusive.sh
。内容:
#!/usr/bin/env bash
name_tag="wifi-wired-exclusive"
syslog_tag="$name_tag"
skip_filename="/etc/NetworkManager/.$name_tag"
if [ -f "$skip_filename" ]; then
exit 0
fi
interface="$1"
iface_mode="$2"
iface_type=$(nmcli dev | grep "$interface" | tr -s ' ' | cut -d' ' -f2)
iface_state=$(nmcli dev | grep "$interface" | tr -s ' ' | cut -d' ' -f3)
logger -i -t "$syslog_tag" "Interface: $interface = $iface_state ($iface_type) is $iface_mode"
enable_wifi() {
logger -i -t "$syslog_tag" "Interface $interface ($iface_type) is down, enabling wifi ..."
nmcli radio wifi on
}
disable_wifi() {
logger -i -t "$syslog_tag" "Disabling wifi, ethernet connection detected."
nmcli radio wifi off
}
if [ "$iface_type" = "ethernet" ] && [ "$iface_mode" = "down" ]; then
enable_wifi
elif [ "$iface_type" = "ethernet" ] && [ "$iface_mode" = "up" ] && [ "$iface_state" = "connected" ]; then
disable_wifi
fi
Run Code Online (Sandbox Code Playgroud)
要禁用该脚本,只需执行touch /etc/NetworkManager/.wifi-wired-exclusive
归档时间: |
|
查看次数: |
2456 次 |
最近记录: |