Linux网络管理
关于网卡
目前的主流网卡为使用以太网络协定所开发出来的以太网卡(Ethernet),因此 Linux 就称呼这种网络接口为 ethN(N 为数字)。 举例来说,主机上面有一张以太网卡,那么主机的网络接口命名就是 eth0(从第一张为 0 号开始)。
然而,从 systemd v197 开始,对于网卡的编号有另一套规则(Predictable Network Interface Names,可预测网络接口命名规则),网卡的界面代号与网卡的来源有关,网卡名称是这样分类的:
- 第一部分-位置:
en:表示以太网Ethernet。wl:表示无线局域网WLAN。ww:表示无线广域网WWAN。
- 第二部分-类型:
p:独立网卡,PCI网卡。o:主板板载网卡,集成设备的设备索引号。s:热插拔网卡,USB之类的扩展槽索引号。nnn(数字):MAC地址+主板信息计算得出的唯一序列。
因此:
eno1:代表由主板内置的网卡。ens1:代表由主板内置的 PCI-E 接口的网卡。enp2s0:代表 PCI-E 接口的独立网卡,可能有多个插槽,因此会有 s0, s1… 的编号。eth0:如果上述的名称都不适用,就回到原本的默认网卡编号。wlp3s0:PCI无线网卡。wlp0s2f1u4u1:连接在USB Hub上的无线网卡。wwp0s2f7u2i2:4G网络接收器。
命名流程实际上是Udev进行的:
- 如果从BIOS中能够获取到可用的板载网卡的索引号,则使用这个索引号命名。例如:
eno1。然后进行下一步。 - 如果从BIOS中能够获取到可以用的,网卡所在的PCI-E热插拔插槽(PCI槽位号)的索引号,则使用这个索引号命名。例如:
ens1。然后进行下一步。 - 如果能拿到设备所连接的物理位置(PCI总线号+槽位号)信息,则使用这个信息命名。例如:
enp2s0。然后进行下一步。 - 前面三个都获取不到,回退到传统的Kernel命名方法,例如:
eth0。 - 使用网卡的MAC地址来命名,一般不会这么做。
与以下Udev规则有关:
/lib/udev/rules.d/75-net-description.rules:检查网卡信息,并填写环境变量。/usr/lib/udev/rules.d/80-net-setup-link.rules:进行网卡重命名。
可见网卡命名受net.ifnames这个内核命令行参数影响。这个参数都可以在GRUB配置中提供,net.ifnames=1是systemd默认值。
修改命名方式
- 修改
/etc/default/grub,在GRUB_CMDLINE_LINUX=后添加net.ifnames=0[或1] - 执行
grub2-mkconfig -o /路径/grub.cfg或update-grub,两者等效
- 内核参数组合使用的时候,其结果如下:
net.ifnames=1:网卡名enp5s2。net.ifnames=0:网卡名eth0(最传统的方式,eth0,eth1)。
通用网络配置文件
/etc/netconfig:网络配置数据库,定义了系统支持的各种网络类型,格式为类型名 协议类型 -|v IP簇 协议名 - -。/etc/networks:域定义文件,格式为域名 IP [别名],IP的末尾必须为0以表示范围。/etc/service:服务定义文件,格式为服务名 端口/协议 [别名]。/etc/hosts:静态域名解析文件,格式为IP 权威域名 [别名]。/etc/host.conf:域名解析方式配置文件,可选项如下:1
2
3
4
5
6
7
8
9
10
11
12# 主机查询方式,用逗号分隔多个
order bind|hosts|nis
# 后面加上.域名,表示截去指定的域名
trim .local
# 允许hosts中给同个域名配置多个IP,默认off
multi on|off
# 进行两次查询以防止被欺骗,默认off
nosprof on|off
# 发现欺骗情况时记录日志,默认off
spoofalert on|off
# 对hosts文件条目进行重排,默认off
reorder on|off/etc/resolv.conf:DNS服务器配置文件,它可能受不同管理工具的控制,见下文。/etc/hosts.deny:tcp_wrapper的阻止IP文件,每行一个IP。/etc/hosts.allow:tcp_wrapper的放行IP文件,每行一个IP,这个文件一般用不到,因为默认就是放行的。
不同网络管理工具的比较
目前的主流网络管理工具有以下几种:
- Debian系
- ifupdown(Debian标准镜像预装)
- systemd-networkd(Cloud镜像预装)
- ifupdown2(Proxmox等Debian分支发行版预装)
- ifupdown-ng(ifupdown迭代计划的目标,尚未决定全面替代)
- NetworkManager(桌面环境依赖)
- SUSE系
- netconfig(SUSE 12及以前预装)
- wicked(SUSE 15及以后预装)
- NetworkManager(桌面环境依赖)
- Fedora/RHEL系
- network-scripts(旧版本RHEL、Fedora预装)
- systemd-networkd(仅Fedora提供,需要用户自己配置)
- NetworkManager(新版本RHEL预装)
- Ubuntu
- Netplan(Ubuntu预装,systemd-networkd/NetworkManager的配置生成器)
- NetworkManager(桌面环境依赖)
- Arch系
- Netctl(Arch预装)
- NetworkManager(桌面环境依赖)
- 通用:
- systemd-networkd(任何一个systemd发行版都有预装,但是大部分默认禁用)
- ConnMan(轻量级网络管理套件)
ifupdown
安装
1 | # Debian,默认预装 |
介绍
ifupdown是由Debian开发的简化网络配置的高级工具,最早可追溯到早期的netscript配置工具,它由ifup,ifdown,ifquery命令,/etc/network/interfaces(/etc/network/interfaces.d/*)配置文件和network.service(或networking.service)服务,搭配isc-dhcp-client或dhcpcd(在interfaces中配置DHCP时自动调用),bridge-utils(配置网桥时调用),ppp(配置PPPoE时调用),ifenslave(配置网卡聚合时调用)和wpasupplicant/wirless-tools(配置无线网络时自动调用)进行自动化网络配置。
interfaces文件有一套独特但不难理解的语法。这是一种很传统的方法,但是对有线连接和服务器来说很有效。
ifup命令用于启动网络接口,ifdown命令用于关闭网络接口,它们的选项如下:
1 | -a 自动配置启动所有为auto的网络接口 |
ifquery命令用于查询网络接口状况,它的选项如下:
1 | 空 查询是否存在指定的网络接口 |
ifupdown2
安装
1 | # Debian |
介绍
ifupdown2是古老的ifupdown的完全升级,它由Cumulus Networks使用Python语言开发。
ifupdown2仍然由ifup,ifdown,ifquery命令,/etc/network/interfaces(/etc/network/interfaces.d/*)配置文件和network.service(或networking.service)服务组成,需要搭配独立的DHCP客户端(目前仅支持isc-dhcp-client),无线网络后端等等使用。
ifup命令用于启动网络接口,ifdown命令用于关闭网络接口,它们的选项如下:
1 | -a 自动配置启动所有为auto的网络接口,隐含-w |
ifquery命令用于查询网络接口状况,它的选项如下:
1 | -a 显示所有配置内容 |
附注
ifupdown2默认会触发内核加载bonding模块,bonding模块在被加载时默认会创建一个实例,也就是bond0,要禁用这一行为,创建/etc/modporbe.d/bonding.conf,写入以下内容:
1 | options bonding max_bonds=0 |
ifupdown-ng
安装
1 | # Debian |
简介
由网络服务协会(Network Service Association)开发的完全兼容ifupdown和ifupdown2的整合版本。
ifupdown-ng仍然由ifup,ifdown,ifquery命令,/etc/network/interfaces(/etc/network/interfaces.d/*)配置文件和network.service(或networking.service)服务组成,需要搭配独立的DHCP客户端,无线网络后端等等使用。
配置
ifupdown-ng的主配置文件位于/etc/network/ifupdown-ng.conf,内容如下:
1 | # 启用钩子脚本 |
服务配置文件位于/etc/default/networking:
1 | # 是否详细输出 |
ifup命令用于启动网络接口,ifdown命令用于关闭网络接口,它们的选项如下:
1 | -a 自动配置启动所有为auto的网络接口,隐含-w |
ifquery命令用于查询网络接口状况,它的选项如下:
1 | -a 显示所有配置内容 |
Init脚本
1 | #!/bin/sh -e |
netconfig
安装
1 | # SUSE |
介绍
一个模块化的管理网络配置的工具,它被旧版本的SUSE采用。它由netconfig命令,存储在/etc/sysconfig/network/中的网络脚本,和network.service服务组成。网络接口可以配置的参数都在脚本中有明显显示,只需要按需要修改后重启服务即可完成网络配置。
命令
netconfig命令有以下操作:netconfig update 更新网络配置netconfig modify -i 接口 动态修改接口配置netconfig remove -i 接口 动态删除接口配置
选项如下:
1 | --bootproto=dhcp|bootp|none 使用的协议 |
配置
网络接口的配置文件位于/etc/sysconfig/network/ifcfg-*,它的一些选项如下:
1 | # 整体选项 |
wicked
安装
1 | # SUSE |
介绍
wicked是SUSE开发的全新集中式网络管理工具,它不仅完全兼容netconfig配置,而且还内置DHCP客户端,热插拔守护进程nanny,支持多种插件。它由/etc/wicked/中的服务配置文件,/etc/sysconfig/network中的网络配置文件,wickedd.service服务(也是network.service的别名)和wicked命令组成。
配置
/etc/wicked/common.xml:wicked所有程序的通用配置。用户不应该修改。/etc/wicked/local.xml:用户自行修改的wicked所有程序的通用配置。/etc/wicked/server.xml:wickedd守护进程的配置文件。用户不应该修改。/etc/wicked/server-local.xml:用户自行修改的wickedd守护进程的配置文件。/etc/wicked/nanny.xml:热插拔守护进程Nanny的配置文件。用户不应该修改。/etc/wicked/nanny-local.xml:用户自行修改的热插拔守护进程Nanny的配置文件。/etc/sysconfig/network/config:网络接口的默认配置文件。/etc/sysconfig/network/dhcp:网络接口的DHCP客户端的配置文件。/etc/sysconfig/network/wireless:无线网络的配置文件。/etc/sysconfig/network/ifcfg-*:各个网络接口的配置文件。/etc/sysconfig/network/routes和/etc/sysconfig/network/ifroute-*:静态路由的配置文件。/var/run/netconfig/resolv.conf:netconfig生成的DNS配置文件,/etc/resolv.conf是指向它的软链接。
命令
/usr/lib/wicked/bin/wickedd-dhcp4 --test 网络接口名 测试DHCP4连通性/usr/lib/wicked/bin/wickedd-dhcp6 --test 网络接口名 测试DHCP6连通性wicked ifcheck all|网络接口名 测试接口连通性wicked ifup|ifdown all|网络接口名 启动|禁用网络接口wicked ifreload all|网络接口名 重载网络配置wicked ifstatus|show all|网络接口名 查看接口状态wicked show-config 显示网络配置wicked show-xml 以XML格式显示网络配置
network-scripts
安装
1 | # RHEL 8- |
介绍
network-scripts是一个纯Shell脚本式的一次性网络配置工具,它被旧版本的RHEL和CentOS采用。它由存储在/etc/sysconfig/network和/etc/sysconfig/network-scripts/ifcfg-网络接口名中的网络脚本和network.service服务组成。
注意,network-scripts已经过时,在RHEL 8中,RHEL使用NetworkManager的ifcfg-rh插件作为兼容策略让NetworkManager读取这里的配置。在RHEL 9中这些配置被彻底删除,替代品为位于/etc/NetworkManager/system-connections/的keyfile插件。
/etc/sysconfig/network内容如下:
1 | NETWORKING=yes/no # 网络是否被配置 |
/etc/sysconfig/network-scripts/ifcfg-网络接口名内容如下:
1 | # 匹配方式 |
修改后重启服务即可应用网络配置。
从NetworkManager迁移到network-scripts
如果在RHEL中不想使用NetworkManager,希望只使用network-scripts的话,先安装network-scripts包,然后执行update-alternatives --config ifup,设为network-scripts的ifup,然后启用network.service服务,最后移除NetworkManager即可。
NetworkManager
安装
1 | # Debian |
介绍
Networkmanager由红帽开发,是一个为系统提供检测和配置功能以便自动连接到网络的程序,它对无线和有线网络都很好用,尤其适应高度动态化的网络环境——因此,很多发行版的桌面版会高度依赖它进行网络管理。
Networkmanager提供了NetworkManager.service服务,nmcli管理工具和基于curses的nmtui终端图形化管理工具,服务配置文件在/var/lib/NetworkManager/NetworkManager.state,网络配置文件在/etc/NetworkManger/NetworkManager.conf、/etc/NetworkManger/conf.d/、/usr/lib/NetworkManager/conf.d/和/var/lib/NetworkManager/NetworkManager-intern.conf,而且还内置了DHCP客户端和resolv.conf管理功能。
NetworkManager守护进程启动后,会自动连接到已配置且可用的“系统连接”和“用户连接”,未配置的连接则需要通过nmcli进行配置才能连接。
NetworkManager支持热插拔,对于新加载的网卡(凡是用户没有手动编写配置的都算),NetworkManager会自动生成一个临时配置使其联网,当然,如果网卡已经存在用户手动编写的配置,那么就不会再生成。
插拔网卡也可以手动重启Networkmanager服务,或者应用网卡配置。
NetworkManager-dispatcher.service是NetworkManager的调度器服务,它会根据网络的状态,在到达指定的状态时执行/etc/NetworkManager/dispatcher.d中的对应网络状态目录中的脚本,一般包括pre-up.d和pre-down.d。
NetworkManager-wait-online.service是可选服务,表示等待网络配置完成。“完成”意味着至少有一个网络接口具有IP。
NetworkManager还有network-manager-gnome和network-manager-kde的GUI前端,以及cockpit-networkmanager的WebUI前端。
在服务配置文件/var/lib/NetworkManager/NetworkManager.state配置文件中有以下内容:
1 | [main] |
在/etc/NetworkManger/NetworkManager.conf配置文件中可用的配置项有:
1 | [main] |
plugins=:配置NetworkManager的插件,其中:keyfile表示启用/etc/NetworkManager/system-connections中的配置文件和unmanaged-devices支持。ifupdown表示启用从/etc/network/interfaces中读取网络配置的支持。ifcfg-rh表示启用从/etc/sysconfig/network-scripts/ifcfg-网络接口名中读取网络配置的支持。
auth-polkit=:设置是否使用Polkit认证,其中:true:非Root用户使用Polkit认证。root-only:仅Root用户允许使用NetworkManager,非Root用户直接阻止。false:非Root用户不使用Polkit认证,可以自由使用NetworkManager。
no-auto-default=:不允许NetworkManager自动配置的网络接口。设为*表示所有。hostname-mode=:临时主机名的配置模式,其中:default:通过DHCP服务器获取主机名进行配置。dhcp:跟default差不多,但是不会进行DNS反向查询以确保主机名唯一性。none:NM完全不管理临时主机名。
dhcp=:选择NetworkManager使用的DHCP客户端,其中:internal:使用内置的DHCP客户端。dhcpcd:使用dhcpcd。dhclient:使用isc-dhcp-client。这是RHEL9的默认设置。
dns=:选择NetworkManager使用的resolv.conf管理方式,其中:- 如果
/etc/resolv.conf是指向/run/systemd/resolve/stub-resolv.conf,或/run/systemd/resolve/resolv.conf,或/usr/lib/systemd/resolv.conf的软链接,那么该配置项的默认值是systemd-resolved,否则,该配置项的默认值总是default。 default:直接使用rc-manager中具体定义的方式修改/etc/resolv.conf,将当前接口的DNS配置写入其中。systemd-resolved:把DNS配置请求转发给systemd-resolved。dnsmasq:使用Dnsmasq进行配置。none:从不修改/etc/resolv.conf,这会导致rc-manager被自动设为unmanaged。
- 如果
rc-manager=:设置NM写入/etc/resolv.conf的方式,其中:auto:自动判断不修改、直接写入、resolvconf或netconfig的情况。symlink:仅在/etc/resolv.conf是一个文件时才写入,如果是软链接则不修改。file:无论/etc/resolv.conf是什么,都会写入。resolvconf:调用resolvconf修改/etc/resolv.conf。netconfig:调用netconfig修改/etc/resolv.conf。unmanaged:从不修改/etc/resolv.conf。
systemd-resolved=:将DNS配置转发给systemd-resolved,默认值为true。当dns=systemd-resolved时,该配置实际上没什么意义。autoconnect-retries-default=:自动连接的重试次数。firewall-backend=:在配置Masquerading时使用的防火墙后端,如果设置为none,则用户必须手动进行配置。
NetworkManager可以配置网络管理工具兼容,方法很多样。默认情况下,可以使用keyfile插件内置的unmanaged-devices配置项配置排除:
1 | [keyfile] |
请注意,这里的排除是硬性的,也就是说,排除的设备不受nmcli device set 接口名 managed yes|no命令控制。事实上,Ubuntu就使用了这一配置(/lib/NetworkManager/conf.d/10-globally-managed-devices.conf)阻止NetworkManager接管任何网络接口(以推广自己的Netplan)。
如果启用了ifupdown,还可以直接让ifupdown接管网络:
1 | [ifupdown] |
如果managed设置为true,NetworkManager将不会配置在interfaces文件中列出的有线/无线网卡,在interfaces文件中列出的网卡配置将会生效;如果managed设置为false,NetworkManager将会接管所有的有线/无线网卡,interfaces文件中的配置无效。
桌面端的Linux发行版基本都使用NetworkManager(也可能是ConnMan),因为它有着对无线网络的良好支持和优秀的图形界面管理工具,不建议更换,否则会导致各种不可预料的问题,轻则有网络但图形界面下始终显示断网,重则损坏图形界面组件,无法进入图形界面。
在和RHEL的network-scripts一起安装时,通过选择NetworkManager和network-scripts的ifup程序决定工作的一方;在和Debian的ifupdown一起安装时,通过配置文件中的managed=选项决定工作的一方。
nmcli命令
nmcli是NetworkManager的CLI管理命令。当然,用户也可以使用TUI工具nmtui。
服务管理nmcli network 查看网络接管状态nmcli network on|off 接管|不接管系统网络,这实际影响/var/lib/NetworkManager/NetworkManager.statenmcli radio all|wifi|wwan on|off 启用|禁用无线|移动网络,这实际影响/var/lib/NetworkManager/NetworkManager.state
网卡管理nmcli device status 查看网卡信息,包括:connected已配置,disconnected已接管但是未配置,unmanaged未接管,unavailable不可用(物理或手动关闭)nmcli device set 接口名 managed yes|no 接管|不接管网卡配置nmcli device set 接口名 autoconnect yes|no 启用|禁用网卡自动连接nmcli device connect 接口名 自动启用网卡的一个连接配置,如果没有配置,那么自动生成一个并启用nmcli device disconnect 接口名 断开网卡的连接配置nmcli device reapply 配置名 重载连接配置
连接配置管理nmcli connection show [--active] 查看连接配置列表nmcli connection show 配置名 查看连接配置详细信息nmcli connection add con-name 配置名 type 接口类型[ethernet|wifi] ifname 接口名 其他配置项 添加连接配置,常用配置项如下:
1 | connection.autoconnect yes|no # 是否自动连接 |
注:Require IPv4 addressing for this connection意味着必须在能够取得IP的情况下才认为连接应用成功。
nmcli connection edit 配置名 交互式修改配置内容,命令如下:
1 | goto 配置项 # 跳转到配置项 |
nmcli connection modify 配置名 配置内容 修改配置内容nmcli connection reload 重载配置nmcli connection delete 配置名 删除连接配置nmcli connection up 配置名 [password 网络密码] 启用连接配置nmcli connection down 配置名 关闭连接配置
WIFI网络nmcli device wifi list 检测可用的WIFI网络nmcli device wifi connect 网络名称 password 密码 连接到指定的网络
Keyfile
keyfile是对传统的键值对网络配置方式的兼容解决方案。它通过保存在/etc/NetworkManager/system-connections/接口名.nmconnection的INI风格配置文件配置网络。请注意,文件所有者必须是root,权限必须是600。
以太网络接口配置文件示例:
1 | [connection] |
无线网络配置:
1 | [connection] |
网桥配置文件示例:
1 | [connection] |
1 | [connection] |
VLan配置文件示例:
1 | [connection] |
使用iwd作为无线网络后端
默认情况下,NetworkManager使用wpa_supplicant作为无线网络后端(注:在Fedora等红帽系列发行版上需要NetworkManager-wifi插件才能使用无线网络,Debian打包中内置了该模块)。
如果要切换到iwd后端,首先安装iwd软件包,然后编辑/etc/NetworkManager/NetworkManager.conf,添加以下内容:
1 | [device] |
然后重启NetworkManager.service服务,卸载或禁用wpa_supplicant即可。
- 执行
systemctl disable --now wpa_supplicant和systemctl mask wpa_supplicant禁用服务。
创建无线热点
执行以下命令:
1 | nmcli dev wifi hotspot ifname wlp?s? ssid "网络名" password "密码" |
执行nmcli dev wifi show-password查看热点密码
也可以使用linux-wifi-hotspot进行简化配置。
从ifupdown迁移到NetworkManager
虽然NetworkManager可以和ifupdown兼容并自动配置,但NetworkManager本身的功能就已经足够强大了,没有保留ifupdown的必要。
- 安装NetworkManager
apt install network-managerapt install network-manager-gnomeGUI管理界面 - 卸载ifupdown
apt purge ifupdown
建议一并移除其他的DHCP客户端(并非必要)apt purge isc-dhcp-client isc-dhcp-common dhcpcd - 删除配置文件
rm -rf /etc/networkrm -rf /etc/dhcp - 修改NetworkManager配置
编辑/etc/NetworkManager/NetworkManager.conf,删除ifupdown相关内容,添加dhcp=internal。
Netplan
安装
1 | # Debian |
介绍
Netplan实际上是一个网络配置生成器,它需要搭配NetworkManager或systemd-networkd工作(在Ubuntu服务器版为systemd-networkd,桌面版则为NetworkManager),通过Netplan可以让一个配置文件适用于多种管理工具,只需要写一个yaml文件,而且语法相对简单。如图所示:

systemd-networkd
安装
1 | # Debian内置,不需要安装 |
介绍
systemd-networkd是systemd套件的一部分,一个管理网络的系统守护进程。它会在网络设备出现时自动检测和配置;还可以创建虚拟网络设备。它由networkctl命令,systemd-networkd服务和按优先级从低到高排列的 /usr/lib/systemd/network 目录、 /run/systemd/network 目录、 /etc/systemd/network 目录中的网络配置文件构成。
它的配置文件在/etc/systemd/networkd.conf,/etc/systemd/networkd.conf.d/*.conf和/usr/lib/systemd/networkd.conf.d/*.conf。
这个服务适用于简单的网络配置,对于配置被 systemd-nspawn 管理的容器或者虚拟机的复杂网络尤其有用。它有内置的DHCP客户端支持,而对无线网络的支持则可以通过搭配无线请求者客户端,比如wpa_supplicant或iwd,对配置好的无线适配器进行WiFi请求。
注意,systemd-networkd没有对PPPoE的原生支持。
networkd-dispatcher是模仿NetworkManager-dispatcher实现的networkd调度器服务,和NetworkManager-dispatcher一样,它会根据网络的状态,在到达指定的状态时执行/etc/networkd-dispatcher中的对应网络状态目录中的脚本,一般包括configuring.d,configured.d,degraded.d,off.d。
它的网络配置文件名一般为*.network,内容格式基本如下:
1 | [Match] |
无线连接
对于无线网络,配置wpa_supplicant或iwd的过程相当于接入网线的过程,因此需要先修改wpa_supplicant的配置文件wpa_supplicant-wlp?s?.conf添加WiFi网络,然后执行systemctl start wpa_supplicant@wlp?s?.service,配置好后,无线网卡就进入了等待配置网络信息的状态,此时重启systemd-networkd.service即可。
也可以直接启用wpa_supplicant.service或iwd.service的主服务,在终端上配置SSID接入后,再启动systemd-networkd.service。
从NetworkManager(或ifupdown)切换到systemd-networkd
首先请确定系统中有systemd-networkd.service服务,否则请安装systemd-networkd包。
禁用或移除NetworkManager(ifupdown)
systemctl disable NetworkManagerapt|yum remove|purge NetworkManagerapt purge ifupdown
删除配置文件
rm -rf /etc/NetworkManagerrm -rf /etc/network
如果安装了其他的DHCP客户端(ifupdown情况下常见),也要一并移除,否则会冲突导致无法获取IP,包括:
isc-dhcp-client isc-dhcp-commonDebiandhcp-client dhcp-commonRHELdhclient dhcpcdArch
删除配置文件rm -rf /etc/dhcp
使用.network文件配置网络
/etc/systemd/network 目录存放自定义配置文件,如果不存在的话请自行创建。创建/usr/lib/systemd/network/30-dhcp.network并写入以下通用配置内容:
1 | [Match] |
启用networkd和resolved服务
systemctl enable --now systemd-networkd.servicesystemctl enable --now systemd-resolved.service
systemctl enable --now systemd-networkd-wait-online.service
可选服务:等待网络配置完成,类似于ifupdown-wait-online.service或NetworkManager-wait-online.service。
- “配置完成”意味着至少有一个systemd-networkd配置的网络接口,而且至少有一个这样的接口进入
degraded(failed)或以上状态。 - 如果安装了NetworkManager并且所有网络接口都受NM管理,那么这个服务在执行时会超时,因此强烈建议不要启用。
systemctl enable --now systemd-network-generator.service
可选服务:将内核中的网络配置转换为.network文件并存储在/run/systemd/network/。
重写resolv.conf,使用systemd-resolved的方案一,这一步并非必要,但强烈推荐这么做
rm /etc/resolv.confln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.confsystemctl restart systemd-resolved.service
示例
配置静态IP
或许你想给某个接口配置静态IP,以enp3s0为例,在/etc/systemd/network创建10-enp3s0.network文件,输入以下内容1
2
3
4
5
6
7[Match]
Name=enp3s0
[Network]
Address=192.168.10.50/24 # 注意CIDR格式
Gateway=192.168.10.1
DNS=8.8.8.8配置完后别忘了重启服务。
网桥
如果要创建网桥,那么需要创建相对应的netdev设备并把网络接口接入。
首先在/etc/systemd/network创建25-br0.netdev,写入以下内容:1
2
3[NetDev]
Name=br0
Kind=bridge然后将enp3s0的
.network文件的[Network]部分修改为以下内容:1
2[Network]
Bridge=br0 # 不需要Address接着,创建网桥的网络配置
/etc/systemd/network/25-br0.network:1
2
3
4
5[Match]
Name=br0
[Network]
DHCP=yes最后重启服务,可以用
brctl工具 来验证是否创建好了网桥 br0。网卡聚合的流程也类似。无线网络
systemd-networkd的无线网络请求需要搭配一个无限请求者实现,在systemd-networkd处配置完无线网卡后,对wpa_supplicant或iwd进行配置(启动D-Bus服务或由模板创建的独立服务),systemd-networkd会自动转交给它进行认证连接。
ConnMan
安装
1 | # Debian |
介绍
ConnMan 是一个命令行网络管理器,内置DNS管理,DHCP与 NTP 支持,可以通过wpa_supplicant、bluez与openvpn分别实现Wi-Fi、蓝牙与VPN功能,专门为嵌入式设备和轻量级系统设计。它由connmanctl管理工具,cmstGUI管理工具,connman.service服务构成,/etc/connman/main.conf是它的配置文件,网络接口自动生成的配置文件保存在/var/lib/connman/下的对应子目录中。
ConnMan与其他网络管理工具冲突,启用ConnMan服务前应禁用其他网络管理服务。
对有线连接,ConnMan有内置的DHCP客户端,采取自动处理的方式。
对于无线连接,ConnMan会通过dbus总线与wpa_supplicant通讯,如果没有开启wpa_supplicant.service服务,连接无线网络时会报错Input/Output Error。
connmanctl可以直接在后面调用子命令,也可以进入交互模式后使用子命令。connmanctl technologies可以查看设备支持的网络类型。connmanctl enable|disable wifi|ethernet可以启用|禁用相关网络类型。connmanctl scan wifi可以扫描附近的WiFi。connmanctl services可以列出可用网络及其对应的Hash网络名。- 然后便可以通过
connmanctl connect 网络名连接网络,可能会要求密码。 - 通过
connmanctl config ethernet_xxxxx --ipv4 manual IP 子网掩码 网关IP设置静态IP。
其他子命令一览如下
通用:help:帮助菜单。state:系统属性,在线、离线、对话。technologies:显示系统支持的技术类型及属性。enable 技术类型:启动特定的技术类型,以太网、Wifi、3G等。disable 技术类型:关闭特定技术类型。enable offline:使用脱机模式。disable offline:禁用脱机模式。tether technology on|off:启用或禁用无线网络共享、设置SSID和密码。services:显示所有可用服务的列表。这包括附近的无线网络,有线以太网连接,蓝牙设备等。services service:显示该服务的所有属性列表。例如services wifi_6834534139723_managed_none。scan [wifi]:开始扫描指定的新服务,比如扫描当前WiFi网络。connect 服务名:连接到指定的服务,wifi连接需要一个配置文件才可以。disconnect:断开连接到指定的服务。config:配置文件选项。monitor:侦听并显示Connman发送的dbus信号。如果当前监视的属性发生更改,则将显示更改。vpnconnections:显示所有可用VPN连接的列表。vpnconnections connect:显示连接的当前属性。
仅在交互模式下有效:agent on|off:启用或禁用无线代理,用于输入无线网络密码。vpnagent on|off:启用或禁用用于输入VPN凭据的VPN代理。
配置选项:autoconnect on|off:设置服务的autoconnect属性。ipv4 off|dhcp|manual [address] [netmask] [gateway]:配置服务的IPv4设置。参数off表示不使用IPv4,dhcp表示dhcp将用于获取设置,手动表示给定参数将用作IPv4设置。ipv6 off|auto|manual [address] [netmask] [gateway]:配置服务的IPv6设置。参数off表示不使用IPv6,auto表示将从网络询问设置,manual表示给定参数将用作IPv6设置。nameservers dns [...]:设置名称服务器列表,以空格分隔。timeservers server [...]:设置时间服务器列表,以空格分隔。domains domain [...]:设置搜索域列表,以空格分隔。proxy direct|auto URL|manual server[...] [--excludes server[...]]:配置服务的代理设置。direct表示不使用代理。如果使用不带参数的auto,将要求网络进行代理设置。否则,请使用URL作为代理自动配置URL。设置为手动时,第一个服务器列表用作代理服务器,第二个服务器列表的流量将从代理中排除。
监控选项:services [off]:侦听服务更改,例如获取IP地址的服务。tech [off]:监听技术变更,例如启用技术。manager [off]:侦听全局属性,可用技术,服务和对等方的更改。vpnmanager [off]:侦听添加或删除的vpn连接。vpnconnection [off]:侦听对vpn连接的更改,例如连接到VPN。
/etc/connman/main.conf中有一些配置项:
1 | [General] |
如果手动创建网络配置文件,应当保存在/var/lib/connman/文件名.config内容如下
1 | # 使用DHCP的有线网络 |
1 | # 使用静态IP的无线网络 |
Netctl
安装
1 | # Arch |
介绍
Netctl是由Arch开发组开发的网络管理工具,它使用wpa_supplicant连接WiFi,使用dhcpclient或dhcpcd作为DHCP客户端,使用wifu-menu作为前端,使用ppp作为PPPoE拨号客户端,使用resolvconf作为DNS管理工具。它由/etc/netctl/中的配置文件,netctl-*.service服务和netctl管理工具组成。
配置文件
一个最基本的DHCP配置文件/etc/netctl/dhcp:
1 | Description='描述' |
一个静态IP配置文件/etc/netctl/static-ip:
1 | Description='描述' |
一个无线网络配置文件/etc/netctl/wlan:
1 | Description='描述' |
你也可以使用wpa_supplicant管理WiFi密码。
一个Bond配置文件/etc/netctl/bond:
1 | Description='描述' |
修改/etc/netctl/hooks/dhcp以修改使用的DHCP客户端:
1 | #!/bin/sh |
命令
启动netctl-auto.service开始自动配置过程netctl start 配置文件启用一个配置文件netctl enable 配置文件开机时自动启用配置文件netctl disable 配置文件禁用配置文件netctl reenable 配置文件重载配置文件
其他
ifupdown(networking.service)与NetworkManager是可以共存的,当在/etc/network/interfaces中配置了网络接口时,NetworkManager自动停止管理对应的网络接口,由配置文件interfaces内的参数对其进行管理,并且会自动将managed参数改为true。
当ifupdown与ConnMan并用时,ifupdown的配置优先级在前。
systemd-networkd可以与NetworkManager并存,NetworkManager会自动解析关系。
systemd-networkd和ConnMan并用时,ConnMan会覆盖网络配置。
更早期的网络管理工具还有linuxconf 、redhat-config-network、 system-config-network-tui、system-config-network等,在这里不谈。
FreeBSD
和Linux使用套件管理的方式不同,FreeBSD使用一组纯粹的Shell脚本实现网络配置。这些脚本包括:
/etc/network.subr:提供网络配置相关的各种函数的辅助脚本。/etc/rc.d/netif:网络接口配置脚本,它实际上会链式执行以下脚本:/etc/rc.d/dhclient:使用DHCP配置网络接口。/etc/rc.d/rtadvd:进行IPv6 RA自动配置。/etc/rc.d/rtsold:接受DHCPv6自动配置。/etc/rc.d/wpa_supplicant:为无线网络提供请求者信息。/etc/rc.d/ppp:配置PPP服务。/etc/rc.d/routing:配置默认网关和静态路由。/etc/rc.d/defaultroute:等待默认网关配置完成。/etc/rc.d/static_arp:配置静态ARP。/etc/rc.d/static_ndp:配置静态NDP。/etc/rc.d/routed:配置Routed服务。/etc/rc.d/route6d:配置Route6d服务。/etc/rc.d/stf:配置6to4隧道接口。/etc/rc.d/hostname:配置主机名。/etc/rc.d/bridge:配置网桥。/etc/rc.d/netoptions:加载额外的网络内核参数。/etc/rc.d/resolv:配置/etc/resolv.conf。
/etc/rc.d/ipfw:BSD内核防火墙。/etc/rc.d/ipfilter:ipfilter防火墙。/etc/rc.d/pf:PF防火墙。
配置
所有网络相关的配置都位于/etc/rc.conf,包括:
defaultrouter='IP':默认网关。ipv6_defaultrouter='IP':IPv6默认网关。ifconfig_接口名称='配置内容':对网络接口进行配置,可用配置包括:DHCP:通过/etc/rc.d/dhclient脚本,使用DHCP客户端进行配置。background_dhclient='YES':异步启动DHCP客户端,不等待配置完成。
WPA:通过/etc/rc.d/wpa_supplicant脚本进行无线网络认证。inet IP netmask 掩码:调用ifconfig进行静态配置。up:仅仅拉起接口,用于虚拟网络设备的从设备。
ifconfig_接口名称_ipv6='配置内容':对网络接口进行IPv6配置,可用配置包括:inet6 IP prefixlen 前缀长度:调用ifconfig进行静态配置。inet6 accept_rtadv:调用/etc/rc.d/rtsold进行自动配置,需要rtsold_enable='YES'。
rtadvd_interfaces='接口名称':为接口进行IPv6 RA自动配置,需要rtadvd_enable='YES'。ipv6_ipv4mapping='YES':启用IPv4的IPv6封装。hostname='主机名':调用/etc/rc.d/hostname配置主机名。local_unbound_enable='YES':本地DNS解析缓存服务,用于主机非DNS服务器的情况。static_routes='路由名称':调用/etc/rc.d/routing配置静态路由。route_路由名称='-net CIDR 路由器':静态路由内容。
cloned_interfaces='虚拟接口名称':创建虚拟接口。- 对于网桥设备,需要附带:
addm 物理接口。 - 对于链路聚合设备,需要附带:
laggproto failover|loadbalance|lacp|roundrobin|broadcast laggport 物理接口名 laggport 物理接口名 IP/CIDR。
- 对于网桥设备,需要附带:
总结与技巧
RHEL系配置静态IP直接使用nmtui
Debian系配置静态IP在/etc/network/interfaces中配置相应网络接口
systemd-networkd配置静态IP在/etc/systemd/network中编写自定义.network文件
Netplan配置静态IP
修改/etc/netplan/00-installer-config.yaml,在使用的网卡下添加以下内容
1 | network: |
然后执行netplan apply使其生效。
DHCP客户端
DHCP客户端用于在使用DHCP配置IP的情况下发送DHCP请求并获取主机IP。
isc-dhcp-client
安装
1 | # Debian |
介绍
有时候包名也会叫做dhclient,是ISC的标准DHCP客户端,它可以搭配脚本型网络管理程序(如ifupdown,netconfig)实现初始化DHCP注册。
dhcpcd
安装
1 | # Debian |
介绍
较新的DHCP客户端实现。它支持更多功能,而且支持使用守护进程的方式自动化进行网络配置。
执行systemctl enable --now dhcpcd启用服务。
配置
dhcpcd不是一个完整的网络管理器,虽然它支持简单的网络配置,但是无法实现复杂的网络配置。
配置文件位于/etc/dhcpcd.conf,内容如下:
1 | backgrounp # 后台运行 |
例如,默认DHCP:
1 | hostname |
静态IP:
1 | #background |
dhcpcanon
一个注重匿名的DHCP客户端实现。它使用Python编写,也具有守护进程。
执行systemctl enable --now dhcpcanon启用服务。
网络管理工具内置的DHCP客户端
NetworkManager,systemd-networkd,ConnMan等大多数现代网络管理工具都有内置的DHCP客户端,但是如果检测到系统中安装了其它的DHCP客户端(例如以上两种),它们会被自动禁用。
无线网络
RF
RF是Radio Frequency,无线射频的意思,是否启用RF,决定了无线网卡是否能正常接收信号,也就是是否工作。
rfkill
rfkill是Linux的无线网卡RF管理命令,它的语法如下:rfkill list 列出所有的射频设备rfkill block|unblock ID 锁定|解锁指定ID的射频设备rfkill block|unblock wifi 锁定|解锁指定类型设备,此处是Wifi
systemd-rfkill
systemd-rfkill.service是systemd的无线网卡状态保存服务,它会在关机时保存无线网卡的最后状态(开启还是关闭),然后在开机时启动服务执行/usr/lib/systemd/systemd-rfkill,根据内核命令行参数,恢复或不恢复无线网卡状态。
无线网卡状态保存在/var/lib/systemd/rfkill目录下。
systemd.restore_state=内核命令行参数的值决定了systemd-rfkill.service是否恢复无线网卡状态,如果值为1(默认),那么开机时会恢复无线网卡的最后状态;如果值为0,那么开机时会恢复无线网卡的默认状态。
无线网络请求者
大部分网络管理工具要接入无线网络,都需要引入一个无线网络请求者程序,主要有iw,wpa_supplicant和iwd这三种。
它们的功能包括:
- 在用户空间初始化无线设备,Udev仅完成硬件注册(如加载驱动,使其在
lspci命令的输出中可见),但是并不会自动创建wl*接口,请求者程序会协助执行该操作。 - 扫描可用的无线网络。
- 配置认证参数。
- 发起认证请求并完成认证。
- 建立连接(可能还包含DHCP客户端等功能)。
这就相当于以太网中“插入网线”(链路层建立连接)的过程。
iw
安装
1 | # Debian |
介绍
是iwconfig(wireless-tools)的继位者,可用于Open,WEP两种认证模式的使用。由iw主干命令和其子命令组成。
修改网卡模式
1 | iw dev 网卡设备名 set type ibss |
一般为ibss,设置前可能需要关闭网卡,使用ip命令设为down即可。
搜索接入点
1 | iw dev 网卡设备名 scan |
接入接入点
1 | iw dev 网卡设备名 connect "网络ID" # 无认证 |
1 | iw dev 网卡设备名 connect "网络ID" key 0:密码 # WEP认证 |
iw只支持WEP认证。
wpa_supplicant
安装
1 | # Debian |
介绍
wpa_supplicant的功能比iw更为强大,支持的网卡功能更多,支持 WEP、WPA 和 WPA2认证,可以在桌面、笔记本甚至嵌入式系统中使用。由主程序wpa_supplicant,密码工具 wpa_passphrase和文字界面前端 wpa_cli三个命令,/etc/wpa_supplicant/中的脚本和配置文件wpa_supplicant[-wlxxx].conf,wpa_supplicant.servicesystemd服务和fi.w1.wpa_supplicant1.serviceDBus服务组成。可以进行手动接入和服务化配置。
wpa_supplicant有一个用Qt写的GUI界面,包名为wpagui。
配置文件
主配置文件为wpa_supplicant.conf,设备配置文件为wpa_supplicant[-wlxxx].conf,但如果要使用5G频段,还需要创建/etc/default/crda文件并写入REGDOMAIN=CN|US|...地区,因为不同地区的5G频段是不同的。
手动接入
在主配置文件wpa_supplicant.conf中写入:
1 | ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev |
使用wpa_supplicant命令:wpa_supplicant -B -i 网卡名 -c /etc/wpa_supplicant/wpa_supplicant.conf,选项如下:
1 | -B 在后台运行 |
然后就可以启动wpa_cli,如果服务启动成功,你会看到网络扫描的命令行:
- 执行
scan进行扫描。 - 执行
scan_results查看扫描结果。 - 然后根据网络的SSID,执行
add_network 编号 ssid "SSID"添加网络。 - 执行
set_network 编号 key_mgmt 验证模式,没有为NONE,不设定为PSK设置网络验证方式。 - 执行
set_network 编号 psk "密码"提供密码。 - 执行
enable_network 编号接入网络。 - 执行
status查看状态。 - 执行
save_config保存配置。
快速生成配置
1 | wpa_passphrase 网络名 密码 >> /etc/wpa_supplicant/wpa_supplicant.conf |
按设备自动配置
在网络管理工具处配置好无线网卡后,创建/etc/wpa_supplicant/wpa_supplicant-网卡设备名.conf,写入或导入以下内容:
1 | ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev # 控制接口和服务用户组 |
与systemd-networkd一起使用
首先创建systemd-networkd配置文件/etc/systemd/networkd/20-dhcp.network,内容如下:
1 | [Match] |
然后创建/etc/wpa_supplicant/wpa_supplicant-网卡设备名.conf,内容如下:
1 | ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev |
然后使用systemd先启动wpa_supplicant@网卡设备名.service,再重启systemd-networkd.service即可。
也可以启动wpa_supplicant.service服务,然后手动连接。
与NetworkManager一起使用
与NetworkManager一起使用时,wpa_supplicant.service不必启用,因为NetworkManager会通过DBus激活启动fi.w1.wpa_supplicant1.service服务,也就是对应的wpa_supplicant.service服务。
另外,wpa_supplicant@.service不能进行任何实例化,如果wpa_supplicant接管了任何接口,那么NetworkManager就不能再管理这个接口了。
BUG
wpa_supplicant 2.10版本存在BUG,不能连接或创建热点,建议切换为iwd,或降级到2.9。
iwd
安装
1 | # Debian |
介绍
iwd是Intel开发的无线网络守护程序。该项目的核心目标是不依赖任何外部库,而是最大程度地利用Linux内核提供的功能来优化资源利用。
它由/etc/iwd/中的配置文件,/var/lib/iwd中的密码文件,systemd服务单元iwd.service,DBus服务net.connman.iwd.service,管理工具iwctl,监控工具iwmon和GUI管理工具iwgtk组成。可以独立工作,也可以和ConnMan、systemd-networkd和NetworkManager这样更完善的网络管理器结合使用。
启动iwd.service服务,然后就可以使用iwctl工具进行管理,注意,用户必须在netdev组中,或者有管理员权限。
配置文件
配置文件/etc/iwd/main.conf内容如下,有需要时只需要将想要调整的选项写入即可:
1 | [General] # 总配置 |
手动接入
iwctl:进入交互式控制台device list:列出无线设备station 设备名 scan:扫描网络station 设备名 get-networks:获取可用网络station 设备名 connect SSID:连接网络,如果要求输入网络密码,将会提示用户输入iwctl --passphrase 密码 station 设备名 connect SSID:连接时给出密码station 设备名 show:查看连接状态wsc list:查看支持WPS/WSC的设备wsc 设备名 push-button:开始进行WSC连接station 设备名 disconnect:断开连接device|station 设备名 show:查看设备信息known-networks list:查看记住的网络known-networks SSID forget:忘记网络
使用密码文件
密码文件保存在/var/lib/iwd中,文件名格式为SSID.加密协议,内容格式如下:
WPA-PSK:/var/lib/iwd/SSID.psk
1 | [Security] |
PWD:/var/lib/iwd/SSID.8021x
1 | [Security] |
TLS:/var/lib/iwd/SSID.8021x
1 | [Security] |
TTLS-PAP两阶段:/var/lib/iwd/SSID.8021x
1 | [Security] |
PEAP-MSCHAPV2两阶段:/var/lib/iwd/SSID.8021x
1 | [Security] |
与NetworkManager一起使用
与NetworkManager一起使用时,iwd.service不必启用,因为NetworkManager会通过DBus激活启动net.connman.iwd.service服务,也就是对应的iwd.service服务。
另外,/etc/iwd/main.conf中不能设置EnableNetworkConfiguration=true,如果iwd接管了任何接口,那么NetworkManager就不能再管理这个接口了。
与systemd-networkd一起使用
首先创建/etc/iwd/main.conf,写入以下内容:
1 | [General] |
然后启动iwd.service。
(该过程可以使用Impala取代)创建密码文件/var/lib/iwd/网络名.psk,内容如下:
1 | [Security] |
如果服务启动正常,执行iwctl station 设备名 connect SSID可以接入无线网络。
创建systemd-networkd配置文件/etc/systemd/networkd/20-dhcp.network,内容如下:
1 | [Match] |
然后重启systemd-networkd.service即可。
TUI前端
Impala是Iwd的TUI前端,可以简化无线网络的配置,尤其是在不使用NetworkManager的情况下也可以提供优秀的TUI体验。
DNS
静态resolv.conf
/etc/resolv.conf是Linux系统原生的DNS客户端配置文件,其功能较少,只能进行静态DNS服务器配置,配置项主要有以下两种:
search 域名一 域名二 ...:指定搜索域,即按照指定的顺序从域名中解析请求的非FQDN的主机名。它的在过去是domain 域名,不过这种用法已经过时。nameserver 服务器IP:指定DNS服务器的IP,最多只能有三个。
网络管理工具自动生成的resolv.conf
NetworkManager,ConnMan等网络管理工具会自动配置DNS并生成/etc/resolv.conf文件,不需要进行额外的设置。
resolvconf
安装
1 | # Debian |
介绍
resolvconf是一个resolv.conf管理框架,它由resolvconf命令,resolvconf.service服务和一系列脚本组成,可以搭配ifupdown,NetworkManager,dhclient,pppd等网络工具,实现更加自定义的DNS服务器配置。
例如,使用dhclient时,会触发/etc/dhcp/dhclient-enter-hooks.d/resolvconf脚本,自动更新系统的DNS服务器。使用ifupdown时,若设置了dns-nameserver或dns-search项,也会自动更新系统的DNS服务器。
resolvconf主要提供了根据接口优先级选择使用的DNS服务器的方法。接口优先级文件位于/etc/resolvconf/interface-order,这个文件的每一行都是一个网络接口名,允许使用通配符与正则表达式。
命令选项如下:
1 | --enable-updates # 启用resolvconf的自动更新 |
openresolv
安装
1 | # Debian |
介绍
一个resolv.conf管理框架,同时也是resolvconf的完善版本。它由resolvconf命令,/etc/resolvconf.conf配置文件,resolvconf.service服务和一系列脚本组成,可以搭配dhcpcd,iwd,Netctl,NetworkManager,ifupdown等网络工具使用,而且还支持把DNS服务器IP传递给DNS服务端程序如BIND,dnsmasq,pdnsd,Unbound等等。
/etc/resolvconf.conf主要配置项有以下几个:
1 | resolvconf=YES|NO # 是否启用resolvconf管理 |
systemd-resolved
安装
1 | # Debian 12+ |
介绍
systemd-resolved是systemd的DNS自动化管理组件,他的功能比传统DNS管理工具更加强大,尤其适合与systemd-networkd配合使用。它由resolvectl,systemd-resolved.service和多个配置文件组成。
systemd-resolved的灵活性极强,有四种工作模式,取决于/etc/resolv.conf是否为软连接, 以及该软连接指向的目标。一般来说,标准的做法是将/etc/resolv.conf设置为指向/run/systemd/resolve/stub-resolv.conf的软链接,systemd-resolved会实时更新这个文件;而兼容的做法是保持/etc/resolv.conf为静态文件,systemd-resolved会从中读取DNS服务器信息。
systemd-resolved的控制命令为resolvectl,当它作为resolvconf被调用时(创建软链接/usr/bin/resolvconf,指向/usr/bin/resolvectl,Arch Linux的systemd-resolvconf包就是这么做的),将以兼容模式运行,用法与resolvconf类似。注意,即使是兼容模式,它也仍然需要systemd-resolved.service后端。
部分命令选项如下:
1 | query 域名|IP # 解析域名或IP |
蓝牙
安装
1 | # Debian |
介绍
bluez是Linux蓝牙管理套件,由/etc/bluetooth和/etc/default/bluetooth配置文件,bluetooth.service服务和bluetoothctl管理命令组成。
如果蓝牙服务状态未激活,则必须先启用它,才能使用蓝牙控制命令。
修改/etc/default/bluetooth,设置BLUETOOTH_ENABLED=1启用蓝牙。
/etc/bluetooth/main.conf为主配置文件,一些内容如下:
1 | DiscoverableTimeout = 180 # 可被发现的持续时间,默认为180秒 |
启动蓝牙bluetoothctl power on
启用代理(生成配对码)bluetoothctl agent on
检查默认代理bluetooth default-agent
扫描蓝牙设备bluetoothctl scan on
停止扫描bluetoothctl scan off
扫描时会显示类似以下内容的输出信息
1 | Discovery started |
所有蓝牙设备都标记为Device,后跟它们各自的MAC地址。bluetoothctl还会在输出中尝试显示设备的名称,例如ruwido BLE。
配对蓝牙设备bluetoothctl pair FC:69:47:7C:9D:A3
这会与指定MAC地址的设备尝试进行蓝牙配对。
列出已配对设备bluetoothctl paired-devices
列出配对过的所有设备bluetoothctl devices
连接蓝牙设备bluetoothctl connect FC:69:47:7C:9D:A3
对于已经配对过的设备,可以使用connect命令简单地连接到它们
信任|取消信任蓝牙设备bluetoothctl trust|untrust FC:69:47:7C:9D:A3
信任的蓝牙设备在可用时会自动连接
断开蓝牙设备的连接bluetoothctl disconnect FC:69:47:7C:9D:A3
取消蓝牙设备的配对bluetoothctl remove FC:69:47:7C:9D:A3
开启可被发现bluetoothctl discoverable on
开启可被配对bluetoothctl pairable on
阻止蓝牙设备(禁止对方申请配对)bluetoothctl block FC:69:47:7C:9D:A3
进入交互式命令行bluetoothctl
进入后可以省去bluetoothctl父命令直接进行操作
也可以使用 darkhz/bluetuith 进行TUI配置
自动连接
蓝牙设备的自动连接可以通过 jrouleau/bluetooth-autoconnect 实现。
克隆仓库,将bluetooth-autoconnect修改为755权限,所有者为root,然后移动到/usr/local/bin,然后创建服务bluetooth-autoconnect.service,保存在/etc/systemd/system,内容如下:
1 | [Unit] |
之后,执行systemctl enable --now bluetooth-autoconnect.service启动服务。