我正在尝试使用 systemd 设置主板上 eth1 的 MAC 地址和 IP 地址。
MAC地址
为了设置MAC地址,创建了以下服务:
/lib/systemd/system/eth1mac.service
[Unit]
Description=Setting up MAC address
Before=network.target
[Service]
ExecStart=/bin/sh /etc/eth1mac
[Install]
WantedBy=multi-user.target
该服务指向此处的 shell 脚本:
/etc/eth1mac
#!/bin/sh
ifconfig eth1 down
ifconfig eth1 hw ether 00:11:22:33:44:55
ifconfig eth1 up
这工作正常。
IP地址
要设置IP地址,已创建以下服务:
/lib/systemd/system/eth1ip.service
[Unit]
Description=Setting up eth1 IP address
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/bin/sh /etc/eth1ip
[Install]
WantedBy=multi-user.target
该服务指向此处的 shell 脚本:
/etc/eth1ip
#!/bin/sh
ifconfig eth1 192.168.160.218
问题
该服务正在运行,但每次我们重新启动主板时都不会调用该服务。我是否需要某些依赖项来确保该服务在重新启动时重新运行?
答案1
网络配置通过.network
和.link
使用 systemd 时的文件systemd-networkd。这些文件的默认位置是/etc/systemd/network
.
示例:将使用 MAC 地址74:d1:2c:2c:6e:d8
名称的接口重命名为,phy0
并将 MAC 地址更改11:22:33:44:55:66
为/etc/systemd/network/10-phy0.link
:
[Match]
# Match card's MAC address
PermanentMACAddress=74:d1:2c:2c:6e:d8
[Link]
Description=Ethernet Port 1
# Rename interface to phy0
Name=phy0
# Override MAC address (spoof MAC address)
MACAddress=11:22:33:44:55:66
设置 IP 地址/etc/systemd/network/phy0.network
:
[Match]
# Match interface name
Name=phy0
[Network]
Description=Interface phy0 (network)
DHCP=no
# Static IPv4 or IPv6 address with CIDR
Address=192.168.1.123/24
Gateway=192.168.1.1
# DNS server address
DNS=192.168.1.1
Domains=mynetwork.lan
答案2
您必须为此使用 systemd 吗?我不建议使用自定义 shell 脚本创建自己的 systemd 服务,因为它很难维护并且很快就会变得混乱。
在接口上设置静态 IP 地址和 MAC 地址的更常见方法是在配置文件中设置/etc/network/interfaces
(假设基于 Debian 的 Linux 系统)。
例如,将其附加到配置中:
auto eth1
iface eth1 inet manual
address 192.168.160.218
netmask 255.255.255.0
hwaddress ether 00:11:22:33:44:55
还有一种方法可以使用配置网络接口systemd-networkd守护进程是 systemd 的一部分。您必须编辑.network
要配置的接口的相应文件。然后,systemd-networkd 应该在启动期间为您配置此接口。