我需要静态设置默认网关的 MAC 地址。我使用了命令:
arp -s <ip> <mac>
这可行,但重新启动后该条目又恢复为动态状态。
我努力了:
- 在目录中的脚本
arp -s <ip> <mac>
中编写相同的命令/etc/network/if-up.d
这看起来很简单,但行不通。重新启动后,arp 条目将恢复为动态状态。
- 看看里面的配置
/etc/systemd/network/eth0.network
,
它包含了:
[Match]
Name = eth0
[Network]
Description = Interface eth0 autoconfigured by PVE
Address = <ip>
Gateway = <ip>
DHCP = no
IPv6AcceptRA = false
我真的不知道如何更改此配置。
答案1
您必须将其添加到您的/etc/systemd/network/eth0.network
文件中:
[Neighbor]
Address=<gateway IP>
LinkLayerAddress=<gateway MAC>
但Description = Interface eth0 autoconfigured by PVE
建议该文件可能由其他一些软件管理,因此对其进行的任何更改都可能被覆盖。这是Proxmox虚拟环境下的虚拟机吗?
如果您使用经典的 Debian软件包来管理网络接口,/etc/network/if-up.d
则适用中的脚本。ifupdown
但看来你(或 Proxmox )正在使用 plainsystemd-networkd
代替。
我不知道Proxmox;如果您有更好的 Proxmox 兼容方式来为相邻主机持久配置静态 MAC 地址,请阅读本文的任何人随意发表评论或撰写您自己的答案。
如果没有更好的方法,您当然可以定义一个自定义服务在常规网络设置后运行,该服务将执行所需的arp -s
命令。
这样的服务定义可能如下所示:
[Unit]
Description = Set gateway MAC address statically
After = network.target network-online.target
Wants = network-online.target
[Service]
Type = oneshot
RemainAfterExit = yes
ExecStart = /usr/sbin/arp -s <gateway IP> <gateway MAC>
# Alternative command to set gateway MAC without the legacy arp command:
# ExecStart = /sbin/ip neigh add <gateway IP> lladdr <gateway MAC> nud permanent router
[Install]
WantedBy = multi-user.target
您可以将其放置到例如/etc/systemd/system/gatewayMAC.service
。