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

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

我有一个 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 时间=0.537 ms
来自 192.168.0.254 的 64 个字节:icmp_req=2 ttl=64 时间=0.199 ms
来自 192.168.0.254 的 64 字节:icmp_req=3 ttl=64 时间=0.188 ms
^C
--- 192.168.0.254 ping 统计 ---
发送 3 个数据包,接收 3 个数据包,0% 数据包丢失,时间 2005ms
rtt 最小值/平均值/最大值/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 关闭
alix:~# ifup -v eth1
配置接口 eth1=eth1 (inet)
运行部分 --verbose /etc/network/if-pre-up.d
run-parts:执行 /etc/network/if-pre-up.d/hostapd
ip addr 添加 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 广播 192.168.0.255 dev eth1 标签 eth1
RTNETLINK 回答: 文件存在

命令有什么问题?我怎样才能告诉 Debian 做正确的事情呢?

答案1

我发现在启动设备之前我必须先冲洗设备:

# ip addr flush dev eth1

像这样清除手动设置的接口配置信息是中提到的Ubuntu 服务器指南

答案2

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

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

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

答案3

我也遇到了类似的问题,当我玩 10,000 块钱的场景时正是这样,我一直在尝试将缺少的内容添加到 /e/n/id/etho

但研究接口的手册页时,我注意到所有示例集都只有 2 行实际数据,即 ipv4 地址/24 和指定路由器地址的网关行。所以我将 eth0 文件删除到该文件,然后重新启动,并且工作正常。

相关内容