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

cev*_*ing 72 networking ip debian

我有一个 Debian 系统作为无线路由器使用eth0wlan0。现在,我就手动添加一个额外的网络eth1ifconfig

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 毫秒

如您所见,一切正常。

现在我想让配置永久化。因此,我将以下部分添加到/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 地址添加 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 做正确的事?

cev*_*ing 98

我知道我必须在启动之前冲洗设备:

# ip addr flush dev eth1
Run Code Online (Sandbox Code Playgroud)

Ubuntu Server Guide 中提到了像这样清除手动设置的接口配置信息。

  • 即使你的答案解决了问题。如果你能说出它的实际作用,那就太好了。存在的这个 RTNETLINK 文件是什么? (13认同)
  • 一个警告是,这会清除所有范围,这并不总是您想要的。(我发现这很难) (3认同)

ale*_*one 10

使用ip addr flush会起作用,但它也会清除在该界面上设置的任何和所有地址 - 如果您登录到远程计算机,可能包括您正在使用的地址。这可能会将您锁定在设备之外。

RNETLINK answers: File exists当您尝试add使用与现有规则冲突的规则时会发生这种情况。我猜想 OP 遇到了这个问题,因为他们已经用ifconfig. 通常可以通过将add命令转换为类似结构的命令changereplace命令来解决此错误。

使用ip addr changeip addr replace代替更安全。