Ubuntu 使用netplan 设置路由无效

包含网卡/无线网的网络问题和ADSL/校园网/宽带拨号支持及代理/共享等网络使用问题
回复
混世小萌羊
帖子: 12
注册时间: 2018-11-14 18:52
系统: Ubuntu 20.04 LTS

Ubuntu 使用netplan 设置路由无效

#1

帖子 混世小萌羊 » 2022-01-10 17:14

Ubuntu 上有俩个网卡,一个有线,一个WiFi,10.140.20.70 需要通过WIFI访问,其他的访问可以通过有线访问
现在我手动配置, 是可以的,但是重启之后这个配置就没有效果

代码: 全选

ip route add 10.140.20.70 via 192.168.43.1
netplan yaml配置

代码: 全选

network:
  version: 2
  renderer: NetworkManager
  ethernets:
    eno1:
      dhcp4: yes
      gateway4: 172.16.52.254
  wifis:
    wlx34f716bcf940:
      dhcp4: yes
      access-points:
        "hdi-dt-sipg":
            password: "*******"
      routes:
        - to: 10.140.0.0/24
          via: 192.168.43.1
我可以用netplan 的yaml 配置成这个样子嘛,或者其他方式
让这个 10.140.20.70 走wifi重启后可以一直存在
头像
astolia
论坛版主
帖子: 6514
注册时间: 2008-09-18 13:11

Re: Ubuntu 使用netplan 设置路由无效

#2

帖子 astolia » 2022-01-11 11:08

这个配置是没有错的。
但你既然都在用NetworkManager,直接在NetworkManager的图形界面里面添加个路由项不就行了,干吗要用netplan
你用netplan,只是给NetworkManager添加了一个配置项。如果你以前已经设置过了其他的配置,netplan添加的配置项不见得能被NetworkManager选上
混世小萌羊
帖子: 12
注册时间: 2018-11-14 18:52
系统: Ubuntu 20.04 LTS

Re: Ubuntu 使用netplan 设置路由无效

#3

帖子 混世小萌羊 » 2022-01-11 14:44

我这个是Ubuntu 20.04 Service版本,没有图形界面。怎么去查看其他的配置呢
这个会不会是路由表的问题

代码: 全选

default via 172.16.52.254 dev eno1 proto dhcp metric 100 
default via 192.168.83.249 dev wlx34f716bcf940 proto dhcp metric 600 
172.16.52.0/22 dev eno1 proto kernel scope link src 172.16.55.222 metric 100 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 
192.168.83.0/24 dev wlx34f716bcf940 proto kernel scope link src 192.168.83.54 metric 600
在我添加之后才会有这个路由表

代码: 全选

root@zhtserver:~# ip route add 10.140.20.70 via 192.168.83.249
root@zhtserver:~# ip route
default via 172.16.52.254 dev eno1 proto dhcp metric 100 
default via 192.168.83.249 dev wlx34f716bcf940 proto dhcp metric 600 
10.140.20.70 via 192.168.83.249 dev wlx34f716bcf940 
172.16.52.0/22 dev eno1 proto kernel scope link src 172.16.55.222 metric 100 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 
192.168.83.0/24 dev wlx34f716bcf940 proto kernel scope link src 192.168.83.54 metric 600 
funicorn
帖子: 1318
注册时间: 2005-09-13 4:56
系统: Ubuntu Jammy Jellyfi

Re: Ubuntu 使用netplan 设置路由无效

#4

帖子 funicorn » 2022-01-11 15:36

nmcli是n-m的全功能命令行工具。
Example 11. Adding an ethernet connection profile with manual IP configuration

$ nmcli con add con-name my-con-em1 ifname em1 type ethernet \
ip4 192.168.100.100/24 gw4 192.168.100.1 ip4 1.2.3.4 ip6 abbe::cafe
$ nmcli con mod my-con-em1 ipv4.dns "8.8.8.8 8.8.4.4"
$ nmcli con mod my-con-em1 +ipv4.dns 1.2.3.4
$ nmcli con mod my-con-em1 ipv6.dns "2001:4860:4860::8888 2001:4860:4860::8844"
$ nmcli -p con show my-con-em1
$ nmcli -p con up my-con-em1
头像
astolia
论坛版主
帖子: 6514
注册时间: 2008-09-18 13:11

Re: Ubuntu 使用netplan 设置路由无效

#5

帖子 astolia » 2022-01-11 17:20

混世小萌羊 写了: 2022-01-11 14:44 这个会不会是路由表的问题
不是
混世小萌羊 写了: 2022-01-11 14:44 我这个是Ubuntu 20.04 Service版本
服务器版我记得默认是没有安装NetworkManager的,你在netplan中指定用NetworkManager作为网络管理后端自然不起作用。你需要改成networkd
头像
astolia
论坛版主
帖子: 6514
注册时间: 2008-09-18 13:11

Re: Ubuntu 使用netplan 设置路由无效

#6

帖子 astolia » 2022-01-11 17:21

funicorn 写了: 2022-01-11 15:36 nmcli是n-m的全功能命令行工具。
一般人会去用nmtui。脚本里才用nmcli
混世小萌羊
帖子: 12
注册时间: 2018-11-14 18:52
系统: Ubuntu 20.04 LTS

Re: Ubuntu 使用netplan 设置路由无效

#7

帖子 混世小萌羊 » 2022-01-12 13:58

我现在这个Ubuntu 20.04 系统应该是有NetworkManager

代码: 全选

root@zhtserver:~# systemctl status network-manager
● NetworkManager.service - Network Manager
     Loaded: loaded (/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2022-01-12 05:52:19 UTC; 2min 5s ago
       Docs: man:NetworkManager(8)
   Main PID: 938 (NetworkManager)
      Tasks: 3 (limit: 18934)
     Memory: 17.1M
     CGroup: /system.slice/NetworkManager.service
             └─938 /usr/sbin/NetworkManager --no-daemon

Jan 12 05:52:27 zhtserver NetworkManager[938]: <info>  [1641966747.7368] device (docker0): state change: prepare -> config (reason 'none', sys-iface-state: 'external')
Jan 12 05:52:27 zhtserver NetworkManager[938]: <info>  [1641966747.7369] device (docker0): state change: config -> ip-config (reason 'none', sys-iface-state: 'external')
Jan 12 05:52:27 zhtserver NetworkManager[938]: <info>  [1641966747.7370] device (docker0): state change: ip-config -> ip-check (reason 'none', sys-iface-state: 'external')
Jan 12 05:52:27 zhtserver NetworkManager[938]: <info>  [1641966747.7376] device (docker0): state change: ip-check -> secondaries (reason 'none', sys-iface-state: 'external')
Jan 12 05:52:27 zhtserver NetworkManager[938]: <info>  [1641966747.7377] device (docker0): state change: secondaries -> activated (reason 'none', sys-iface-state: 'external')
Jan 12 05:52:27 zhtserver NetworkManager[938]: <info>  [1641966747.7382] device (docker0): Activation: successful, device activated.
Jan 12 05:52:27 zhtserver NetworkManager[938]: <info>  [1641966747.7913] manager: (veth9f0837f): new Veth device (/org/freedesktop/NetworkManager/Devices/6)
Jan 12 05:52:27 zhtserver NetworkManager[938]: <info>  [1641966747.7917] manager: (vethb6c0110): new Veth device (/org/freedesktop/NetworkManager/Devices/7)
Jan 12 05:52:28 zhtserver NetworkManager[938]: <info>  [1641966748.1387] device (vethb6c0110): carrier: link connected
Jan 12 05:52:28 zhtserver NetworkManager[938]: <info>  [1641966748.1394] device (docker0): carrier: link connected
设置networkd 启动初始化网络会卡住很久,而且ip route 中没有我配置的路由。现在应该只能每次重启自己手动配置吧
头像
astolia
论坛版主
帖子: 6514
注册时间: 2008-09-18 13:11

Re: Ubuntu 使用netplan 设置路由无效

#8

帖子 astolia » 2022-01-12 17:28

混世小萌羊 写了: 2022-01-12 13:58 我现在这个Ubuntu 20.04 系统应该是有NetworkManager
设置networkd 启动初始化网络会卡住很久,而且ip route 中没有我配置的路由。现在应该只能每次重启自己手动配置吧
我是看出来了,你对这些网络管理工具的工作原理毫无了解,我上面讲的东西也根本没听懂。我今天心情还算不错,就给你普及一下基础知识。

现在ubuntu上有两大主流的网络管理框架:systemd-networkd和NetworkManager。在桌面版本上NetworkManager是默认的管理框架,systemd-networkd是服务器版上的默认框架。由于两者的配置方法各不相同,给记忆增加负担,就诞生了netplan这么一个项目。它用一种统一的配置文件,在系统启动早期,动态转换翻译成systemd-networkd或NetworkManager的配置文件供它们使用。

首先是一点,netplan配置文件中的renderer到底该用NetworkManager还是networkd?这取决于网络链路是被谁管。用nmcli d和networkctl两个命令,可以分别看NetworkManager和systemd-networkd对网络链路的管理情况。如果输出unmanaged就表明不归它管,这种情况下就不要在netplan的配置文件里设置对应的renderer,否则可能会引起两大框架之间的竞争冲突,也就是你看到的卡很久的情况。

然后是用NetworkManager的情况。NetworkManager允许对同一个链路设备设置多套配置,启动时会按一定的优先级进行选择。netplan动态生成的配置,优先级是默认的最低值0。如果你之前就创建过wifi配置,它优先级肯定不会比netplan生成的低,而在同优先级的情况,NetworkManager会优先选择最近连上过的wifi。所以只要你以前用NetworkManager的配置连上过wifi,那份配置的实际优先级肯定比用netplan生成的高。所以我上面才说,就算你的netplan配置文件是对的,但NetworkManager也不一定会选择应用它。

我上面提过了,你可以直接运行nmtui,编辑连接设置,在ipv4设置里增加一条路由设置即可。这样NetworkManager就会在激活链路时更改路由表。根本用不着netplan
aaa.png
混世小萌羊
帖子: 12
注册时间: 2018-11-14 18:52
系统: Ubuntu 20.04 LTS

Re: Ubuntu 使用netplan 设置路由无效

#9

帖子 混世小萌羊 » 2022-01-13 9:20

按照您说的,配置好了。

代码: 全选

root@zhtserver:~# nmcli device show wlx34f716bcf940
GENERAL.DEVICE:                         wlx34f716bcf940
GENERAL.TYPE:                           wifi
GENERAL.HWADDR:                         34:F7:16:BC:F9:40
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     hdi-dt-sipg
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/1
IP4.ADDRESS[1]:                         192.168.43.62/24
IP4.GATEWAY:                            192.168.43.1
IP4.ROUTE[1]:                           dst = 0.0.0.0/0, nh = 192.168.43.1, mt = 600
IP4.ROUTE[2]:                           dst = 192.168.43.0/24, nh = 0.0.0.0, mt = 600
IP4.ROUTE[3]:                           dst = 10.140.0.0/16, nh = 192.168.43.1, mt = 600
IP4.DNS[1]:                             192.168.43.1
IP6.ADDRESS[1]:                         fe80::607a:ac77:f96a:9c1c/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 600

root@zhtserver:~# ping 10.140.20.70
PING 10.140.20.70 (10.140.20.70) 56(84) bytes of data.
64 bytes from 10.140.20.70: icmp_seq=1 ttl=60 time=191 ms
64 bytes from 10.140.20.70: icmp_seq=2 ttl=60 time=60.4 ms
64 bytes from 10.140.20.70: icmp_seq=3 ttl=60 time=8685 ms
64 bytes from 10.140.20.70: icmp_seq=4 ttl=60 time=7716 ms
64 bytes from 10.140.20.70: icmp_seq=5 ttl=60 time=6712 ms
64 bytes from 10.140.20.70: icmp_seq=6 ttl=60 time=5690 ms
64 bytes from 10.140.20.70: icmp_seq=7 ttl=60 time=4669 ms
64 bytes from 10.140.20.70: icmp_seq=8 ttl=60 time=3647 ms
64 bytes from 10.140.20.70: icmp_seq=9 ttl=60 time=2641 ms
64 bytes from 10.140.20.70: icmp_seq=10 ttl=60 time=1634 ms
64 bytes from 10.140.20.70: icmp_seq=11 ttl=60 time=621 ms
64 bytes from 10.140.20.70: icmp_seq=12 ttl=60 time=86.1 ms
64 bytes from 10.140.20.70: icmp_seq=13 ttl=60 time=75.0 ms
64 bytes from 10.140.20.70: icmp_seq=14 ttl=60 time=75.6 ms
64 bytes from 10.140.20.70: icmp_seq=15 ttl=60 time=65.5 ms
64 bytes from 10.140.20.70: icmp_seq=16 ttl=60 time=98.3 ms
64 bytes from 10.140.20.70: icmp_seq=17 ttl=60 time=126 ms
64 bytes from 10.140.20.70: icmp_seq=18 ttl=60 time=78.3 ms
64 bytes from 10.140.20.70: icmp_seq=19 ttl=60 time=83.5 ms
64 bytes from 10.140.20.70: icmp_seq=22 ttl=60 time=60.0 ms
64 bytes from 10.140.20.70: icmp_seq=23 ttl=60 time=71.4 ms
64 bytes from 10.140.20.70: icmp_seq=24 ttl=60 time=58.5 ms
64 bytes from 10.140.20.70: icmp_seq=25 ttl=60 time=66.0 ms
64 bytes from 10.140.20.70: icmp_seq=26 ttl=60 time=75.8 ms
64 bytes from 10.140.20.70: icmp_seq=27 ttl=60 time=92.0 ms
^C
--- 10.140.20.70 ping statistics ---
27 packets transmitted, 25 received, 7.40741% packet loss, time 26236ms
rtt min/avg/max/mdev = 58.545/1735.134/8685.062/2700.969 ms, pipe 9
按照我的理解就是,之前我已经连接nmcli WIFI,这个配置就会比netplan优先级要高,所以我无论对netplan做什么修改都会无效,应修改NetworkManager已经连过WIFI的配置对吧
回复