Systemd Networkd服务¶
systemd-networkd设置MAC地址欺骗¶
systemd-networkd
支持通过 systemd.link
配置实现MAC地址欺骗。
配置
/etc/systemd/network/00-wlan0.link
或者00-wlan0.network
:
1[Match]
2MACAddress=original MAC
3
4[Link]
5MACAddress=spoofed MAC
6NamePolicy=kernel database onboard slot path
systemd配置静态IP地址¶
systemd-networkd
配置静态IP地址非常简单,创建一个和网卡接口名相同配置文件,例如 eth0
创建 /etc/systemd/network/10-eth0.network
内容如下:
[Match]
MACAddress=00:00:00:00:00:01
[Network]
Address=192.168.6.10/24
Gateway=192.168.6.200
DNS=192.168.6.1
DNS=192.168.6.2
执行以下命令将默认NetworkManager切换成
systemd-networkd
:
systemctl stop NetworkManager.service
systemctl start systemd-networkd.service
systemctl restart systemd-resolved.service
systemctl disable NetworkManager.service
systemctl enable systemd-networkd.service
我在 ARM移动云的虚拟机部署 (在 Asahi Linux ARM架构平台运行的 Fedora Server ARM)遇到一个报错:
systemd-gpt-auto-generator: Failed to dissect: Permission denied
但似乎可以忽略 ( systemd-gpt-auto-generator
是基于GPT分区类型GUID自动发现和挂载root、/home/、/srv/、/var/ 和 /var/tmp/ 分区,以及发现和启用交换分区的生成器 )
systemd创建网桥¶
备注
在使用 systemd-networkd
创建网桥前,我们已经有一个 /etc/systemd/network/enp0s25.network
配置了有线以太网的IP地址
1[Match]
2Name=enp0s25
3
4[Network]
5Address=192.168.6.9/24
所以此时 ip addr
显示 enp0s25
的地址如下:
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether f0:de:f1:9b:0c:7b brd ff:ff:ff:ff:ff:ff
inet 192.168.6.9/24 brd 192.168.6.255 scope global enp0s25
valid_lft forever preferred_lft forever
inet6 fe80::f2de:f1ff:fe9b:c7b/64 scope link
valid_lft forever preferred_lft forever
我们配置bridge网络,将bridge绑定到 enp0s25
上,绑定过程中 enp0s25
接口的IP地址 192.168.6.9
会丢失
systemd创建名为
br0
的网桥使用配置文件/etc/systemd/network/mybridge.netdev
:
1[NetDev]
2Name=br0
3Kind=bridge
然后重启
systemd-networkd.service
systemctl restart systemd-networkd.service
然后执行
ip addr
检查可以看到以下网桥:8: br0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 7e:33:f1:ea:9e:e3 brd ff:ff:ff:ff:ff:ff
注意,此时接口 br0
状态还是 DOWN
备注
systemd-networkd
是基于接口名字和主机ID为网桥设置MAC地址的,但是在某些场景可能存在问题,例如基于MAC过滤的路由。为了能够精确控制网桥MAC地址,可以在上述 NetDev
段落添加 MACAddress=xx:xx:xx:xx:xx:xx
来创建指定MAC地址的网桥。
将以太网接口绑定到bridge
接下来需要将物理网络接口( enp0s25
)绑定到网桥( br0
)上,则增加一个配置 /etc/systemd/network/bind.network
:
1[Match]
2Name=enp0s25
3
4[Network]
5Bridge=br0
这里 [Match]
段落也配置通配符,也能起到相似作用,例如:
[Match]
Name=en*
现在重启一次
systemd-networkd
,此时使用brctl show
检查,就看到br0
网桥已经启动,并且绑定在enp0s25
接口上:bridge name bridge id STP enabled interfaces br0 8000.7e33f1ea9ee3 no enp0s25
配置网桥IP
网桥 br0
已经绑定到以太网物理接口 enp0s25
上,需要为网桥配置一个指定IP地址。这个配置也是通过 .network
文件定义,和配置普通网卡相同, /etc/systemd/network/mybridge.network
配置一个静态IP地址:
1[Match]
2Name=br0
3
4[Network]
5Address=192.168.6.200/24
这里也可以使用DHCP来配置网桥:
[Match]
Name=br0
[Network]
DHCP=ipv4
备注
这里有一个疑惑 enp0s25.network
配置绑定到 enp0s25
的配置没有生效。在bind到br0之后,IP地址丢失。虽然可以通过 ifconfig
手工恢复,但是networkd配置文件没有生效。