赞
踩
rk3588 linux
版本运行的是ubuntu20.04
,自17.0以后的以Debian为基本的发行版(ubuntu即其中之一)中都集成了一种更加强大的网络管理工具NetworkManager
,因此,至20.04版本,一般的文件系统中至少存在了三种网络配置工具:ifconfig/ip、ifupdown/netplan、NetworkManager/Systemd-Networkd
。
ifconfig
来自于net-tools
工具集,官方已经不再推荐使用,但是在很多教程和学校里面还在使用这个工具,ip
来自于iproute2
,是官方推荐的用来平替ifconfig
的工具,相比ifconfig
更加强大。
ifupdown
是更为古老的ip配置工具,同ifconfig
差不多,他是通过/etc/network/interfaces
文件来管理ip的,ubuntu18.04
以后的版本都将不再使用ifupdown来配置网络,即/etc/network/interfaces
文件中设置固定ip将不再起作用,取而代之的是netplan
,通过读取/etc/netplan/*.yaml
文件来配置网络。示例如下:
# Let NetworkManager manage all devices on this system
network:
ethernets:
eth0:
addresses: [192.168.111.204/24]
nameservers:
addresses: [192.168.8.200,61.177.7.1]
version: 2
renderer: NetworkManager
不可以用tab缩进,yaml文件对文件格式要求很严格。
其他的字段都很好理解,其中的renderer: NetworkManager
是指定渲染器,简单来说就是将除了配置文件指定的内容以外的内容,交给指定的渲染器来管理,甚至可以是如下配置文件:
network:
version: 2
renderer: NetworkManager
即将网络管理全部交给NetworkManager
。注意如果renderer
的值被修改了,需要运行
netplan generate
重新配置,另外命令:
netplan get
可以查看当前的netplan
配置。
那么,neplan
是怎么进行配置的呢?我尝试查找相关的资料,但是并没有找到详细的资料,
netplan
只是作为一个生成配置文件的工具,他通读取/etc/netplan/*.yaml
文件,在系统启动早期的时候,生成位于/run/systemd/network
的配置文件,例如/etc/netplan/01-netcfg.yaml
将会生成了run/systemd/network/10-netplan-eno1.network
文件,然后将控制权交给特定的渲染器,所以真正对网络进行管理的并不是netplan,
而是renderer:
渲染器,目前可以选择的是NetworkManager
和Systemd-networkd
,这两种网络管理工具都会去读取位于/run/systemd/network
的配置文件。例如networkd
的官方文件写到:
CONFIGURATION FILES T
he configuration files are read from the files
located in the system network directory /lib/systemd/network, the
volatile runtime network directory /run/systemd/network and the local
administration network directory /etc/systemd/network. Networks are
configured in .network files, see systemd.network(5), and virtual
network devices are configured in .netdev files, see
systemd.netdev(5).
NetworkManager
的没有找到,应该也是类似的方式。
这个两个是可以相互替换的东西。都是用于网络配置的。
一般用于桌面GUI环境的网络配置,rk3588的官方文件系统中,无论是桌面版还是非桌面版使用的都是该系统来管理网络,并且,不知道什么原因,使用ifconfig
的命令,例如设置IP:
ifconfig eth1 192.168.1.4 netmask 255.255.255.0 up
或者:ifconfig eth0 192.168.1.4/24
然后使用命令ifconfig
查看ip,发现ip确实也被改动过来,但是实际上似乎并没有连通。所以在**rk3588上配置ip的时候,尽量不要使用ifconfig或者ip的指令。**而是使用nmtui
。
使用命令:
systemctl --type=service
可以看到NetworkManager.service
是启动状态,这个就是NetworkManager
的守护进程。并且Systemd-Networkd
的服务并没有启用,一般情况下,我们只会使用一直网络管理工具,因为二者并不能很好的处理他们之间的冲突。
如果需要安装和启用NetworkManager
可以使用以下的命令:
sudo apt install networkmanager
sudo systemctl enable NetworkManager
sudo systemctl disbale systemd-networkd
另外NetworkManager
还提供了两个非常好用的工具,nmcli(Network Manager Command line)
和nmtui( Network Manager Text User Interface)
,从英文全称也可以看出来,前者是基于命令行,后者是基于光标的文本用户界面。
对于rk3588,也是使用的这两个工具来进行网络配置的。
连接wifi
,命令:
sudo nmcli device wifi connect myRouter password 12345678
myRouter
为ssid
,12345678
是密码
设置wifi的AP模式:
nmcli device wifi hotspot ifname wlan0 con-name MyHostspot ssid firefly password 12345678
wlan0
是无线网卡名,firefly
是ssid,12345678
是密码。
另外,启用AP模式还可以通过以下的方式来启动:
1)安装工具集
sudo apt-get install hostapd
sudo apt-get install isc-dhcp-server
2) 编辑文件
sudo vi /etc/hostapd/hostapd.conf
内容:
interface=wlan0
driver=nl80211
ssid=eavision
channel=10
3)启动hostapd
sudo service NetworkManager stop # 关闭NetworkManager ,防止管理权限冲突
sudo nmcli radio wifi off # sudo nmcli nm wifi off
sudo rfkill unblock wlan
sudo ifconfig wlan0 192.168.1.1/24 up
sudo hostapd /etc/hostapd/hostapd.conf -B
4)开启dhcp
sudo vi /etc/dhcp/dhcpd.conf
内容:
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.120; # ip 起始地址
option broadcast-address 192.168.1.255; # 广播地址
option routers 192.168.1.1; # 网关 要写成这台机器的 wlan0 的ip
}
5)启动:
sudo dhcpd
即可创建ssdi
为eavison
的无密码ap
。
直接输入nmtui,就会打开一个文件界面,通过方向键即可配置网络。rk3588调试双网口的时候就是使用的该工具。
关于用法就不再赘述,网上的资料很多。
在rk3588的firefly开发板上面,该服务并没有被启用! 如果仅是为了配置ip,这一节可以忽略。
systemd
是用来替换init.d
的,例如我们经常用到的开机自启动的功能,在ubuntu18.04
版本以后,以前常用的在rc.local
中添加启动脚本的方式已经被弃用了,转而代之的是注册一个系统服务。这个系统服务就是systemd
管理的常见的以systemctl
开头的指令就是受此支持。
systemd
的其中一部分是 systemd-networkd
,它负责 systemd
生态中的网络配置。使用 systemd-networkd
,你可以为网络设备配置基础的 DHCP/静态 IP 网络。它还可以配置虚拟网络功能,例如网桥、隧道和 VLAN。systemd-networkd
目前还不能直接支持无线网络,但你可以使用 wpa_supplicant
服务配置无线适配器,然后把它和systemd-networkd
联系起来。
他的守护进程是systemd-networkd
。
我们可以使用:
start/enable systemd-networkd.service.
来启动该服务。
用 systemd-networkd
配置网络连接
要用 systemd-networkd
配置网络服务,你必须指定带.network
扩展名的配置信息文本文件。这些网络配置文件保存到 /etc/systemd/network
并从这里加载。当有多个文件时,systemd-networkd
会按照字母顺序一个个加载并处理。
举例说明:
设置网口eth0
编辑:/etc/systemd/network/10-eth0.network
[Match]
Name=eth0
[Network]
Address=10.10.10.9/24
Gateway=10.10.10.1
DNS=9.9.9.9
设置无线wlan0
:
编辑/etc/systemd/network/20-wlan0.network
:
[Match]
Name=wlan0
SSID=Wifi-SSID
[Network]
DHCP=ipv4
如果不使用netplan
,运行以下命令:
apt purge netplan.io
rm -rf /etc/netplan
启动服务:
systemctl unmask systemd-networkd
systemctl enable systemd-networkd
设置wifi密码:
wpa_passphrase Wifi-SSID Sweet-Password >> /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
systemctl enable wpa_supplicant@wlan0.service
前提要安装wpa套件。
如果遇到启动过程很慢的情况,可以看下systemd-networkd-wait-online
是否被启用了。当启用systemd-networkd.service
的时候,默认的systemd-networkd-wait-online.service
也会被启动,官网的描述如下:
可以按照官网的方式禁用该服务,或者使用以下指令:
systemctl disable systemd-networkd-wait-online.service
即可加快启动速度。
与之相关的还有一个systemd服务systemd-resolved
,该服务器是提供DNS域名解析的。之前曾经遇到过域名解析问题:域名解析问题 发现更改/etc/systemd/resolved.conf
文件并不能正确设置dns
,这是因为除了这里的resolved.config
文件,该服务还会读取其他地方的配置文件例如:/etc/systemd/resolved.conf.d/*.conf
,如果名字一样,还有优先级的区别,所以可能导致设置失败的情况发生。官网的说明如下:
systemd-resolved
作为一个域名解析服务,和NetworkManager/Systemd-Networkd
相比,是更加底层的存在,可以为上述两者相关联并提供服务。
例如,如果使用NetworkManager
来管理网络(大多数发行版),那么需要编辑/etc/NetworkManager/NetworkManager.conf
文件,添加如下内容:
[main]
dns = systemd-resolved
官方描述如下;
之后还需要重启服务:
sudo systemctl start systemd-resolved
sudo systemctl enable systemd-resolved
sudo systemctl restart NetworkManager
如果不想使用systemd-resolved
提供域名解析,则需要编辑/etc/systemd/resolved.conf
文件:
[Resolve]
[Resolve]
DNS=127.0.0.1
FallbackDNS=1.0.0.1
MulticastDNS=no
DNSStubListener=no
另外如果发现即使已经使用命令sudo systemctl disable systemd-resolved.service
来失能systemd-resolved
,还是不生效,还需要确保systemd-resolved
没有监听127.0.0.1
,DNSStubListener=no
或者 mDNS with MulticastDNS=no
。
这是因为,该服务会因为应用程序的请求而自启动。
另外还需要确保NetworkManager
没有启用他。即/etc/NetworkManager/NetworkManager.conf
[main]
dns=none
systemd-resolved=false
一般情况下,该配置文件下还有一个参数:
[main]
plugins=ifupdown,keyfile
[ifupdown]
managed=false
[device]
wifi.scan-rand-mac-address=no
即[ifupdown]
,managed=false
代表NetworkManager
不负责管理ifupdown
的接口,即/etc/network/interfaces
中声明的网络接口。
对于独立的双网卡配置问题,分为几种情况:
两个网口的时候,电脑A和电脑B都能ping通连两个linux网口。
将两个网卡设置为同一个网段的时候,默认到该网段的路由,通常会被设置为后启动的网卡,因此同时只能一个网口工作。如果必须设置同网段(不合理),那么我们需要为每个网口设置单独的路由表:
ifconfig eth0 192.168.1.100 netmask 255.255.255.0 up
ifconfig eth1 192.168.1.140 netmask 255.255.255.0 up
route del -net 192.168.1.0/24 dev eth1
route add -host 192.168.1.141 dev eth1
route del -net 192.168.1.0/24 dev eth0
route add -host 192.168.1.4 dev eth0
请注意,上面的ifconfig设置ip的方式在3588上面很可能无效!
不需要额外的设置,即可ping通。
两个ARM板子有两个网口,eth0
和eth1
,分别连了A电脑和B电脑,可以直接从A电脑 ping B电脑 互通。
需要使用brctl搭建网桥(未验证,来自其他博客):
brctl addbr br0 #建立逻辑网段名称为br0
brctl addif br0 eth0 #让eth0成为br0的一个端口
brctl addif br0 eth1 #让eth1成为br0的一个端口
ifconfig eth0 0.0.0.0 #eth0和eth1作为一个端口,就不需要ip了
ifconfig eth1 0.0.0.0
brctl show # 查看现有的网桥设备,及该网桥上连接的设备(虚拟机网卡等)
ifconfig br0 192.168.1.1 netmask 255.255.255.0 #给br0的虚拟网卡配置IP:192.168.1.1(就相当于虚接口的ip地址)
brctl setageing br0 0
brctl setfd br0 0
echo "0" > /sys/devices/virtual/net/br0/bridge/multicast_snooping
测试工具iperf
,测试平台:linux
开发板和windows
电脑网线直连,如果测试wifi的话,需要一个做AP一个做device;
linux下工具安装:
apt update
apt install iperf3
windows下直接官网下载:
iperf3 for windwos
服务器端(linux)运行以下指令:
指定端口8888,显示间隔1s,可能需要防火墙放行端口。
iperf3 -s -i 1 -p 8888
windows下,解压的iperf3目录下,运行cmd。
\iperf-3.1.3-win64> ./iperf3 -c 10.42.0.1 -p 8888 -i 1 -t 20
其中-c的参数10.42.0.1
是指linux端的ip地址;-t 的参数是测试的时间;
测试结果:
可以看到服务端和客户端显示的带宽都是72m。
netpaln学习
systemd-networkd官方文档
stackExchanged
netplan官方文档
netplan官网
systemd-networkd官方文档
networkmanage/systemd-networkd/netplan简介
NetworkManager WiKI
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。