Systemd-networkd

跳转到:导航搜索

Tumbleweed 通过 yast2 lan 提供网络配置。Wicked 和 NetworkManager 都是强大且灵活的。 systemd-networkd 是第三种选择

  1. 在没有 GUI 的情况下配置比配置 NetworkManager 更简单。
  2. 作为 systemd 的一个模块,其内存和 CPU 使用率极低。
  3. systemd-networkd 完全在后台运行;内部没有用户可维护的部件。

配置示例

最小家庭网络

参见: 如何设置家庭网络 - 初学者指南

以下配置在 Tumbleweed 上进行了测试,链接到由 M-net 提供的自定义 Fritz!Box 7360。它在一个盒子中集成了无线接入点、以太网交换机、DSL 调制解调器和路由器。

默认名称和地址为 fritz.box / 192.168.178.1。其他路由器将使用不同的值。但是,在进行适当更改的情况下,示例配置应该适用于它们。

配置文件

通过在 /etc/hosts 中添加一行来定义机器的地址和主机名

erlangen:~ # cat /etc/hosts
#
# hosts         This file describes a number of hostname-to-address
#               mappings for the TCP/IP subsystem.  It is mostly
#               used at boot time, when no name servers are running.
#               On small systems, this file can be used instead of a
#               "named" name server.
# Syntax:
#    
# IP-Address  Full-Qualified-Hostname  Short-Hostname
#

127.0.0.1       localhost

# special IPv6 addresses
::1             localhost ipv6-localhost ipv6-loopback

fe00::0         ipv6-localnet

ff00::0         ipv6-mcastprefix
ff02::1         ipv6-allnodes
ff02::2         ipv6-allrouters
ff02::3         ipv6-allhosts

192.168.178.3   erlangen.fritz.box erlangen
erlangen:~ # 

确保 systemd-resolved.service 已禁用

erlangen:~ # systemctl status systemd-resolved.service 
● systemd-resolved.service - Network Name Resolution
   Loaded: loaded (/usr/lib/systemd/system/systemd-resolved.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:systemd-resolved.service(8)
           https://www.freedesktop.org/wiki/Software/systemd/resolved
           https://www.freedesktop.org/wiki/Software/systemd/writing-network-configuration-managers
           https://www.freedesktop.org/wiki/Software/systemd/writing-resolver-clients
erlangen:~ # 


如果存在,请删除任何链接 /etc/resolv.conf 并提供文件 /etc/resolv.conf

erlangen:~ # cat /etc/resolv.conf
nameserver 192.168.178.1
erlangen:~ # 

通过添加 .network 文件(iwconfig 将告诉您链接的名称)来配置无线链路 wlp3s0 的管理

erlangen:~ # cat /etc/systemd/network/30-wireless.network
[Match]
Name=wlp3s0

[Network]
Address=192.168.178.3/24
Gateway=192.168.178.1

erlangen:~ #

通过修改现有的文件 wpa_supplicant.conf 来配置 wpa_supplicant

erlangen:~ # cat /etc/wpa_supplicant/wpa_supplicant.conf
network={
    ssid="FRITZ!Box Karl Mistelberger"
    psk="......................."
}
erlangen:~ # 

Systemd 单位

确保 wickedNetworkManager 都已禁用

erlangen:~ # systemctl list-unit-files 'wick*'
UNIT FILE             STATE   
wicked.service        disabled
wickedd-auto4.service disabled
wickedd-dhcp4.service disabled
wickedd-dhcp6.service disabled
wickedd-nanny.service disabled
wickedd-pppd@.service static  
wickedd.service       indirect

7 unit files listed.
erlangen:~ # systemctl list-unit-files 'Network*'
UNIT FILE                          STATE   
NetworkManager-dispatcher.service  disabled
NetworkManager-wait-online.service disabled
NetworkManager.service             disabled

3 unit files listed.
erlangen:~ # 

启用 systemd-networkdwpa_supplicant;检查设置如下

erlangen:~ # systemctl list-unit-files 'systemd-networkd*' 'wpa*'
UNIT FILE                            STATE   
systemd-networkd-wait-online.service enabled 
systemd-networkd.service             enabled 
wpa_supplicant.service               disabled
wpa_supplicant@.service              indirect
systemd-networkd.socket              enabled 

5 unit files listed.
erlangen:~ # 

注意接口 wlp3s0 的服务

erlangen:~ # systemctl status wpa_supplicant@wlp3s0.service 
● wpa_supplicant@wlp3s0.service - WPA Supplicant daemon (interface wlp3s0)
   Loaded: loaded (/usr/lib/systemd/system/wpa_supplicant@.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2019-03-29 19:28:49 CET; 16h ago
 Main PID: 1081 (wpa_supplicant)
    Tasks: 1 (limit: 4915)
   Memory: 3.7M
   CGroup: /system.slice/system-wpa_supplicant.slice/wpa_supplicant@wlp3s0.service
           └─1081 /usr/sbin/wpa_supplicant -iwlp3s0 -c /etc/wpa_supplicant/wpa_supplicant.conf -u -t -f /var/log/wpa_supplicant.log

Mar 29 19:28:49 erlangen systemd[1]: Starting WPA Supplicant daemon (interface wlp3s0)...
Mar 29 19:28:49 erlangen systemd[1]: Started WPA Supplicant daemon (interface wlp3s0).
erlangen:~ # 

验证

重新启动后,systemd-networkd 将会运行

erlangen:~ # journalctl -b -u systemd-networkd -o short-monotonic 
-- Logs begin at Mon 2019-03-18 17:54:36 CET, end at Wed 2019-03-27 12:53:16 CET. --
[    3.524507] erlangen systemd[1]: Starting Network Service...
[    3.567653] erlangen systemd-networkd[519]: Enumeration completed
[    3.569489] erlangen systemd[1]: Started Network Service.
[    3.971240] erlangen systemd-networkd[519]: wlan0: Interface name change detected, wlan0 has been renamed to wlp3s0.
[    4.115384] erlangen systemd-networkd[519]: wlp3s0: Could not bring up interface: Invalid argument
[    4.115650] erlangen systemd-networkd[519]: eth0: Interface name change detected, eth0 has been renamed to enp0s31f6.
[    6.161137] erlangen systemd-networkd[519]: wlp3s0: Gained carrier
[    8.175286] erlangen systemd-networkd[519]: wlp3s0: Gained IPv6LL
[    9.999213] erlangen systemd-networkd[519]: wlp3s0: Configured
erlangen:~ # 
erlangen:~ # networkctl 
IDX LINK             TYPE               OPERATIONAL SETUP     
  1 lo               loopback           carrier     unmanaged 
  2 wlp3s0           wlan               routable    configured
  3 enp0s31f6        ether              off         unmanaged 

3 links listed.
erlangen:~ # 

禁用 IPv6

较旧的路由器,例如 THOMSON TG585 v7 不支持 IPv6。Systemd-networkd 将尝试连接直到超时。基于链接禁用 IPv6

linx-paks:~ # cat /etc/systemd/network/ethernet.network 
[Match]
Name=eth0

[Network]

LinkLocalAddressing=no
IPv6AcceptRA=no

Address=10.0.0.1/24
Gateway=10.0.0.138
linus-paks:~ # 

配置 DHCP

启用解析器

3400G:~ # systemctl enable --now systemd-resolved.service 
Created symlink /etc/systemd/system/dbus-org.freedesktop.resolve1.service → /usr/lib/systemd/system/systemd-resolved.service.
Created symlink /etc/systemd/system/multi-user.target.wants/systemd-resolved.service → /usr/lib/systemd/system/systemd-resolved.service.
3400G:~ # 


配置文件

将 /etc/resolv.conf 替换为以下链接

3400G:~ # ll /etc/resolv.conf
lrwxrwxrwx 1 root root 32 Oct 27 21:06 /etc/resolv.conf -> /run/systemd/resolve/resolv.conf
3400G:~ # 

链接配置

3400G:~ # cat /etc/systemd/network/ethernet.network
[Match]
Name=eno1

[Network]
DHCP=yes
3400G:~ #  

验证

重新启动后,systemd-networkdsystemd-resolved 将会运行

3400G:~ # journalctl -b -u systemd-resolved.service -o short-monotonic --no-pager 
-- Logs begin at Wed 2020-10-21 16:58:25 CEST, end at Tue 2020-10-27 21:44:16 CET. --
[    4.244461] 3400G systemd[1]: Starting Network Name Resolution...
[    4.328780] 3400G systemd-resolved[592]: Positive Trust Anchors:
[    4.342493] 3400G systemd-resolved[592]: . IN DS 20326 8 2 e06d44b80b8f1d39a95c0b0d7c65d08458e880409bbc683457104237c7f8ec8d
[    4.342540] 3400G systemd-resolved[592]: Negative trust anchors: 10.in-addr.arpa 16.172.in-addr.arpa 17.172.in-addr.arpa 18.172.in-addr.arpa 19.172.in-addr.arpa 20.172.in-addr.arpa 21.172.in-addr.arpa 22.172.in-addr.arpa 23.172.in-addr.arpa 24.172.in-addr.arpa 25.172.in-addr.arpa 26.172.in-addr.arpa 27.172.in-addr.arpa 28.172.in-addr.arpa 29.172.in-addr.arpa 30.172.in-addr.arpa 31.172.in-addr.arpa 168.192.in-addr.arpa d.f.ip6.arpa corp home internal intranet lan local private test
[    4.445891] 3400G systemd-resolved[592]: Using system hostname '3400G'.
[    4.447195] 3400G systemd[1]: Started Network Name Resolution.
3400G:~ # 
3400G:~ # journalctl -b -u systemd-networkd.service -o short-monotonic 
-- Logs begin at Wed 2020-10-21 16:58:25 CEST, end at Tue 2020-10-27 21:44:16 CET. --
[    4.181538] 3400G systemd[1]: Starting Network Service...
[    4.233226] 3400G systemd-networkd[535]: Enumeration completed
[    4.244321] 3400G systemd[1]: Started Network Service.
[    4.544194] 3400G systemd-networkd[535]: eth0: Interface name change detected, eth0 has been renamed to eno1.
[    4.589840] 3400G systemd-networkd[535]: eno1: IPv6 successfully enabled
[    4.840393] 3400G systemd-networkd[535]: eno1: Link UP
[    7.784685] 3400G systemd-networkd[535]: eno1: Gained carrier
[    9.216315] 3400G systemd-networkd[535]: eno1: Gained IPv6LL
[   10.753418] 3400G systemd-networkd[535]: eno1: DHCPv4 address 192.168.178.32/24 via 192.168.178.1
3400G:~ #