Linux

如何在啟動時為預設網關設置靜態 MAC 地址?

  • November 11, 2022

我需要靜態設置預設網關的 MAC 地址。我使用了命令:

arp -s <ip> <mac>

那行得通,但是在重新啟動時,條目又恢復了動態。

我努力了:

  1. 在目錄arp -s <ip> <mac>中的腳本中編寫相同的命令/etc/network/if-up.d

這看起來很簡單,但沒有奏效。重新啟動時,arp 條目恢復為動態狀態。

  1. 看裡面的配置/etc/systemd/network/eth0.network

它包含:

[Match]
Name = eth0

[Network]
Description = Interface eth0 autoconfigured by PVE
Address = <ip>
Gateway = <ip>
DHCP = no
IPv6AcceptRA = false

我真的不知道如何更改此配置。

您必須將其添加到您的/etc/systemd/network/eth0.network文件中:

[Neighbor]
Address=<gateway IP>
LinkLayerAddress=<gateway MAC>

Description = Interface eth0 autoconfigured by PVE建議該文件可能由其他一些軟體管理,因此可能會覆蓋對它的任何更改。這是Proxmox虛擬環境下的虛擬機嗎?

/etc/network/if-up.d如果您使用經典的 Debianifupdown軟體包來管理您的網路介面,那麼其中的腳本將適用。但似乎您(或 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.

引用自:https://unix.stackexchange.com/questions/724451