Debian

使用 ip addr 而不是 ifconfig 在 Debian 上報告“RTNETLINK 答案:文件存在”

  • February 7, 2021

我有一個 Debian 系統,它用作無線路由器,使用eth0wlan0. 現在我手動添加了一個額外的eth1網路ifconfig

alix:~# ifconfig eth1 192.168.0.2 網路遮罩 255.255.255.0
alix:~# netstat -rn
核心IP路由表
目標網關 Genmask 標誌 MSS 視窗 irtt Iface
0.0.0.0 192.168.2.1 0.0.0.0 UG 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.3.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
alix: ~ # ping 192.168.0.254
PING 192.168.0.254 (192.168.0.254) 56(84) 個字節的數據。
來自 192.168.0.254 的 64 個字節:icmp_req=1 ttl=64 time=0.537 ms
來自 192.168.0.254 的 64 個字節:icmp_req=2 ttl=64 time=0.199 ms
來自 192.168.0.254 的 64 個字節:icmp_req=3 ttl=64 time=0.188 ms
^C
--- 192.168.0.254 ping 統計 ---
3個包發送,3個接收,0%丟包,時間2005ms
rtt min/avg/max/mdev = 0.188/0.308/0.537/0.161 ms

如您所見,一切正常。

現在我想讓配置永久化。因此,我將以下部分添加到/etc/network/interfaces

alix:~# sed -n '/iface eth1/,/^$/p' /etc/network/interfaces
iface eth1 inet 靜態
地址 192.168.0.2
網路遮罩 255.255.255.0

但是當我嘗試啟動網路時,出現以下錯誤:

alix:~# ifconfig eth1 down
alix:~# ifup -v eth1
配置介面 eth1=eth1 (inet)
執行元件 --verbose /etc/network/if-pre-up.d
執行部分:執行 /etc/network/if-pre-up.d/hostapd
ip addr add 192.168.0.2/255.255.255.0 廣播 192.168.0.255 dev eth1 標籤 eth1
RTNETLINK 回答:文件存在
啟動 eth1 失敗。

當我ip手動執行命令時,我得到同樣的錯誤:

alix:~# ip addr add 192.168.0.2/255.255.255.0 broadcast 192.168.0.255 dev eth1 label eth1
RTNETLINK 回答:文件存在

命令有什麼問題?我怎樣才能告訴 Debian 做正確的事?

我知道我必須在啟動設備之前沖洗設備:

# ip addr flush dev eth1

像這樣清除手動設置的介面配置資訊在Ubuntu Server Guide中有提到

Usingip addr flush將起作用,但它也會清除在該界面上設置的所有地址 - 如果您登錄到遠端電腦,可能包括您正在使用的地址。這可能會將您鎖定在設備之外。

RNETLINK answers: File exists當您嘗試add使用與現有規則衝突的規則時會發生。我猜 OP 遇到了這個問題,因為他們已經用ifconfig. 通常可以通過將add命令轉換為類似結構changereplace命令來解決此錯誤。

使用ip addr changeorip addr replace代替它更安全。

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