问题描述
在工控机上使用ubuntu18.04进行控制,将激光雷达等其它硬件通过网线连接到工控机的网口,并且工控机使用无线网卡进行连接因特网(浏览网页)。
在这种情况下,我们经常遇到以下的问题:工控机同时连接了多个有线网口以及用无线网卡连接了因特网,但是打开浏览器时无法连接到因特网或者是使用apt工具下载安装功能包时无法连接到因特网。
这是因为工控机默认为网口连接的网络优先级大于无线网络的优先级(只有无线网络才能连接因特网)
解决方法
- 通过修改网络的metric值提高无线网卡的使用优先级。
- metric是为路由指定的跃点数(范围是 1 ~ 9999),它用来在路由表里的多个路由中选择与转发包中目标地址最为匹配的路由。跃点数能够反映跃点的数量、路径的速度、路径可靠性、路径吞吐量以及管理属性等。metric的值越小,优先级越高。如果两块网卡的metric值相同,就会因为抢占优先级出现网卡冲突,将会有一块网卡无法连接。
具体方法
1.方法一:使用终端命令临时提升无线网卡的优先级
方法一:适用于临时调试时,提升所连临时网络的优先级,断网后重连失效,工控机重启后还需要重新设置
查询路由表:
route -n
结果如下:
英文界面:
中文界面:
图中Gateway一列显示的是网关IP,Iface一列显示的是网卡名称(eno1、enp6s0是有线网口名称,wlp1s0是无线网卡名称)。
1.2 终端输入命令,指定metric值
1.2 终端输入命令,指定metric的值
可以通过网卡名称指定或者通过网关IP指定(任选其一即可)
第一种:
- 通过网卡名称指定metric值,首次操作安装ifmetric,然后进行更改metric值
- sudo apt install ifmetric:安装ifmetric;
sudo ifmetric wlp1s0 90:命令中wlp1s0是无线网卡的名称,更改无线网卡wlp1s0的跃点数(metric值)为90(数值越小,优先级越高)
sudo apt install ifmetric
sudo ifmetric wlp1s0 90
终端执行命令route -n重新查询路由表,检查对应的metric值是否设置成功,结果如下图。
英文界面:
中文界面:
图中显示wlp1s0无线网卡的metric值设置为90,低于其他网络的metric值,所以会优先使用。此时浏览器将会使用无线网卡上网。
第二种:
- 通过网关IP指定metric值
-
ip route add default via 192.168.43.1 metric 80
命令中192.168.43.1是无线网卡所连的网关IP。
终端执行命令route -n重新查询路由表,检查对应的metric值是否设置成功,结果如下图。英文界面:
-
图中显示网关192.168.43.1的metric值设置为80,低于其他网络的metric值,所以会优先使用。此时浏览器将会使用192.168.43.1网关上网。
2.方法二:使用netplan配置网络
方法一:方法二适用于长期调试时,提升所连网络的优先级,不用每次在终端输入命令
- 查看配置文件
ls /etc/netplan
可以看到配置文件名称。
- 打开配置文件
sudo gedit /etc/netplan/*.yaml
命令中ls /etc/netplan
中看到的文件名,比如我的是50-cloud-init.yaml。
- 编辑配置文件
network: version: 2 ethernets: eno1: #网卡1名称,使用ifconfig -a可以查看 dhcp4: false #false-dhcp4关闭,true-dhcp4开启 addresses: [192.168.1.81/24] #设置本机IP及掩码 routes: - to: 0.0.0.0/0 via: 192.168.1.1 #设置路由网关 metric: 150 #设置metric值 optional: true eno4: #网卡2名称 dhcp4: true dhcp4-overrides: route-metric: 200 wifis: wlp2s0b1: #无线网卡名称 dhcp4: true dhcp4-overrides: route-metric: 90
以上代码中展示了两种设置metric值的语法,读者可自行选择,注意要将代码中的网卡名称改为自己电脑的对应网卡名称。
详细的配置文件说明可以参考链接Ubuntu 18.04 LTS以上版本 使用 Netplan 配置网络。 - 测试配置文件
-
sudo netplan try
- 应用配置文件
-
sudo netplan apply
终端执行命令route -n
查询路由表,检查对应的metric值是否设置成功。
文章二:
无线网卡访问外网,有线网卡访问内网
比如:
有线网卡的ip地址为172.1.2.3,子网掩码为255.255.255.0
无线网卡的ip地址为192.168.1.111,子网掩码为255.255.255.0
如果只是想通过无线网卡访问外网,那么只需要提高无线网卡的优先级即可。
那我们使用命令:
ip route show
查看路由表如下:
default via 192.168.1.1 dev enx2 proto dhcp metric 600
default via 172.1.2.1 dev enp4 proto dhcp metric 100
172.1.2.0/24 dev enp4 proto kernel scope link src 172.1.2.3 metric 100
192.168.1.0/24 dev enx2 proto kernel scope link src 192.168.1.111 metric 600
其中enx2是我的无线网卡设备名,enp4是我的有线网卡设备名
可以看到,有线网卡是通过网关172.1.2.1默认访问网络的,它的跃点(metric)为100
而无线网卡是通过网关192.168.1.1默认访问网络的,它的跃点(metric)为600
由于系统会优先选择跃点较低的网卡进行连接,所谓网络请求都走了有线网卡
那么我们只需要把有线网卡的跃点设置更高,就会降低其优先级。
可执行命令:
sudo ip route del default via 172.1.2.1 dev enp4 proto dhcp metric 100
sudo ip route add default via 172.1.2.1 dev enp4 proto dhcp metric 1000
或者直接删除有线网卡的默认路由设置:
sudo ip route del default via 172.1.2.1 dev enp4 proto dhcp metric 100
既可改为使用无线网卡访问网络。
这样一来,除了172.1.2.0/24以外的网络连接都会走无线网卡
但我还想让其他内部的子网172.1.3.0也走有线网卡
那么我可以添加子网路由信息:
sudo ip route add 172.1.3.0/24 dev enp4 proto kernel scope link src 172.1.2.3 metric 100
或者直接添加ip路由信息:
sudo ip route add 172.1.4.1 dev enp4 proto kernel scope link src 172.1.2.3 metric 100
最终的我路由配置为:
default via 192.168.1.1 dev enx2 proto dhcp metric 600
172.1.2.0/24 dev enp4 proto kernel scope link src 172.1.2.3 metric 100
172.1.3.0/24 dev enp4 proto kernel scope link src 172.1.2.3 metric 100
172.1.4.1 dev enp4 proto kernel scope link src 172.1.2.3 metric 100
192.168.1.0/24 dev enx2 proto kernel scope link src 192.168.1.111 metric 600
那么我的电脑就会:
通过有线网卡访问172.1.2.0/24和172.1.3.0/24两个子网内的设备
通过有线网卡访问172.1.4.1这一单独的设备
其他连接均通过无线网卡进行访问。