前言
场景是我在开发一款机械臂时,商家已经在树莓派4B的开发板上预装了ubuntu18.04系统。
先前我使用过的树莓派板卡安装的系统都是Raspberry,通过wpa_supplicant或者raspi-config即可配置wifi网络连接。但是在ubuntu系统上的树莓派使用raspi-berry提示命令不存在,并且通过wpa-supplicant也无法连接网络。
于是我使用Ubuntu18.04及其更高版本中发行的netplan工具进行网络管理。
关于netplan
Ubuntu 18.04开始,Ubuntu和Debian移除了以前的ifup/ifdown命令和/etc/network/interfaces配置文件,转而使用ip link set或者/etc/netplan/01-netcfg.yaml模板和sudo netplan apply命令实现网络管理。
Netplan 是抽象网络配置描述器,用于配置Linux网络。 通过netplan命令,你只需用一个 YAML文件描述每个网络接口所需配置。netplan并不关心底层管理工具是NetworkManager还是networkd。
netplan的使用可能导致新版本Ubuntu重启后网络无法连通。
netplan
从/etc/netplan/
文件夹中读取YAML配置文件,配置可以是管理员或者系统安装人员配置,可以参考该目录中的模板文件。 在系统启动阶段早期,netplan
在/run
目录生成好配置文件并将设备控制权交给相关后台程序。
Netplan
目前支持以下两种网络管理工具 :
NetworkManager
Systemd-networkd
Netplan使用ymal来进行配置管理,因此需要注意:
- 配置项之间的缩进关系应当明确,不要使用tab缩进!
- yaml配置项与配置值的冒号之间还要有一个空格
使用Netplan管理网络很简单,只需要修改配置文件即可。
连接网络
我的步骤是:
查看并修改配置文件
netplan的配置文件位于:
/etc/netplan/*
netplan的配置文件名称可能不同,但是其后缀都是yaml。
我的配置文件名称是:50-cloud-init.yaml
因此通过vim编辑:
sudo vim /etc/netplan/50-cloud-init.yaml
原先的内容:
# This file is generated from information provided by the datasource. Changes
# to it will not persist across an instance reboot. To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
ethernets:
eth0:
dhcp4: true
optional: true
version: 2
在随后写入:
wifis:
wlan0:
optional: true
access-points:
"ProkingDu":
password: "88888888"
dhcp4: true
注意wifis字段和verison字段需要对齐,最后的文件内容应该是:
network:
ethernets:
eth0:
dhcp4: true
optional: true
version: 2
wifis:
wlan0:
optional: true
access-points:
"ProkingDu":
password: "88888888"
dhcp4: true
然后执行:
sudo netplan apply
随后即可连接到网络,并且在开机时也会自动连接wifi。
注意事项
同时注意:
由于我的树莓派只有wlan0一张网卡支持AP,因此在我配置了wlan0使用wifi之后,便无法再作为发送点使用,所以需要确保wifi能够连接上才保存,否则板子就寄了!
扩展
netplan操作命令提供常用子命令如下:
netplan generate :生成后端管理工具对应的配置;
netplan apply :应用配置,必要时重启管理工具;
netplan try :在配置得到确认之后才应用,如果配置存在错误,则回滚,类似test;
netplan get:获取当前netplan配置;
netplan set:修改当前netplan配置。
netplan --debug apply 返回错误信息。
网络异常解决
首先解决方案很简单,编辑:
/etc/ppp/options
这个文件,在这个文件中找到:
# 设置 PPPD 发送 LCP Echo 请求的时间间隔(以秒为单位)
lcp-echo-interval 30
# 设置在没有收到 LCP Echo 回复时允许的最大失败次数
lcp-echo-failure 5
将这两个值改大一些即可,我将他们都改为60之后就没有断网的问题了。
当然光解决问题还是不够的,还要知道问题从哪里发生。
这里的配置文件是默认的PPP(点对点连接)配置文件,在PPP的LCP(链路控制协议)中,支持 Echo 请求和回复机制(类似于 ICMP Echo 请求),用于检测 PPP 链路的状态。操作系统会周期性地发送 LCP Echo 请求,以确保 PPP 链路保持活动状态。
这里就是由于ubuntu周期性的向ASDL(非对称数字用户线路)发送LCP Echo请求时,没有及时得到回应,系统认为网络已经断开了,随后尝试重新连接网络,但是没有成功连接上。
这里我思考了一下是否还有另一种方式解决这个问题,例如修改默认的ASDL,改用能够快速响应的ASDL,但是这个东西不像DNS那样有很多公用的,我在网络没有找到对应的资源。
另一个问题是,为什么在采取处理措施的时候无线网络就断开了,而没有重新连接上?
在线蹲大佬!~
Mail : admin@xdu.fyi
Comments NOTHING