.. _systemd_networkd: ===================== Systemd Networkd服务 ===================== systemd-networkd设置MAC地址欺骗 ================================ ``systemd-networkd`` 支持通过 ``systemd.link`` 配置实现MAC地址欺骗。 - 配置 ``/etc/systemd/network/00-wlan0.link`` 或者 ``00-wlan0.network`` : .. literalinclude:: systemd_networkd/00-wlan0.network :language: bash :linenos: :caption: .. _systemd_networkd_static_ip: systemd配置静态IP地址 ======================== ``systemd-networkd`` 配置静态IP地址非常简单,创建一个和网卡接口名相同配置文件,例如 ``eth0`` 创建 ``/etc/systemd/network/10-eth0.network`` 内容如下: .. literalinclude:: systemd_networkd/10-eth0.network :language: bash :caption: /etc/systemd/network/10-eth0.network配置 - 执行以下命令将默认 :ref:`networkmanager` 切换成 ``systemd-networkd`` : .. literalinclude:: systemd_networkd/switch_systemd-networkd :language: bash :caption: NetworkManager切换到systemd-networkd使静态IP生效 我在 :ref:`mobile_cloud_arm_vm` (在 :ref:`asahi_linux` ARM架构平台运行的 :ref:`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创建网桥 ================= .. note:: 在使用 ``systemd-networkd`` 创建网桥前,我们已经有一个 ``/etc/systemd/network/enp0s25.network`` 配置了有线以太网的IP地址 .. literalinclude:: networkd_conf/enp0s25.network :language: bash :linenos: 所以此时 ``ip addr`` 显示 ``enp0s25`` 的地址如下:: 2: enp0s25: 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`` : .. literalinclude:: networkd_conf/mybridge.netdev :language: bash :linenos: - 然后重启 ``systemd-networkd.service`` :: systemctl restart systemd-networkd.service - 然后执行 ``ip addr`` 检查可以看到以下网桥:: 8: br0: 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`` .. note:: ``systemd-networkd`` 是基于接口名字和主机ID为网桥设置MAC地址的,但是在某些场景可能存在问题,例如基于MAC过滤的路由。为了能够精确控制网桥MAC地址,可以在上述 ``NetDev`` 段落添加 ``MACAddress=xx:xx:xx:xx:xx:xx`` 来创建指定MAC地址的网桥。 - 将以太网接口绑定到bridge 接下来需要将物理网络接口( ``enp0s25`` )绑定到网桥( ``br0`` )上,则增加一个配置 ``/etc/systemd/network/bind.network`` : .. literalinclude:: networkd_conf/bind.network :language: bash :linenos: 这里 ``[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地址: .. literalinclude:: networkd_conf/mybridge.network :language: bash :linenos: 这里也可以使用DHCP来配置网桥:: [Match] Name=br0 [Network] DHCP=ipv4 .. note:: 这里有一个疑惑 ``enp0s25.network`` 配置绑定到 ``enp0s25`` 的配置没有生效。在bind到br0之后,IP地址丢失。虽然可以通过 ``ifconfig`` 手工恢复,但是networkd配置文件没有生效。 参考 ====== - `arch linxu wiki: systemd-networkd `_ - `18.04 - does it force netplan or can I still use resolved.conf? `_ 引用了 `systemd.network Examples `_