我正在尝试添加 1 个主 IP、2 个额外 IP 和 1 个 IP6。这是我的接口文件,位于/etc/network/interfaces
:
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
allow-hotplug ens192
iface ens192 inet static
address 23.227.198.250/26
gateway 23.227.198.194
dns-nameservers 8.8.8.8
dns-search deb12.domain.com
auto ens192:0
iface ens192:0 inet static
address 23.227.198.253
gateway 23.227.198.194
auto ens192:1
iface ens192:1 inet static
address 23.227.198.254
gateway 23.227.198.194
iface ens192 inet6 static
address 2a02:748:4000:6::0199/64
gateway 2a02:748:4000:6::1
然后我使用以下命令重新启动网络:命令的输出systemctl restart networking
:
Job for networking.service failed because the control process exited with error code.
See "systemctl status networking.service" and "journalctl -xeu networking.service" for details.
然后journalctl -x
说:
Subject: A start job for unit networking.service has begun execution
Defined-By: systemd
Support: https://www.debian.org/support
A start job for unit networking.service has begun execution.
The job identifier is 412.
ifup[2057]: RTNETLINK answers: File exists
ifup[2048]: ifup: failed to bring up ens192:1
systemd[1]: networking.service: Main process exited, code=exited, status=1/FAILURE
Subject: Unit process exited
Defined-By: systemd
Support: https://www.debian.org/support
An ExecStart= process belonging to unit networking.service has exited.
The process' exit code is 'exited' and its exit status is 1.
systemd[1]: networking.service: Failed with result 'exit-code'.
Subject: Unit failed
Defined-By: systemd
Support: https://www.debian.org/support
The unit networking.service has entered the 'failed' state with result 'exit-code'.
systemd[1]: Failed to start networking.service - Raise network interfaces.
Subject: A start job for unit networking.service has failed
Defined-By: systemd
A start job for unit networking.service has finished with a failure.
The job identifier is 412 and the job result is failed.
的输出systemctl status networking
:
networking.service - Raise network interfaces
Loaded: loaded (/lib/systemd/system/networking.service; enabled; preset: enabled)
Active: failed (Result: exit-code) since Mon 2023-11-20 04:53:15 EST; 3min 15s ago
Docs: man:interfaces(5)
Process: 2048 ExecStart=/sbin/ifup -a --read-environment (code=exited, status=1/FAILURE)
Process: 2074 ExecStopPost=/usr/bin/touch /run/network/restart-hotplug (code=exited, status=0/SUCCESS)
Main PID: 2048 (code=exited, status=1/FAILURE)
CPU: 18ms
systemd[1]: Starting networking.service - Raise network interfaces...
fup[2057]: RTNETLINK answers: File exists
ifup[2048]: ifup: failed to bring up ens192:1
systemd[1]: networking.service: Main process exited, code=exited, status=1/FAILURE
systemd[1]: networking.service: Failed with result 'exit-code'.
ystemd[1]: Failed to start networking.service - Raise network interfaces.
我在网络上找不到此问题的任何解决方案。如果您能帮助我解决这个问题,这对我来说意义重大。
我尝试重写网络文件并检查其中是否有任何拼写错误。另外,vim 不会突出显示文件中的注释(我在此处发布时删除了注释),所以我想操作系统可能无法识别该文件。我还检查了该文件的chmod
和chown
,一切都很好。
发生了一些奇怪的事情,即使我收到错误(上面提到的),我也可以从本地网络 ping 所有 IP(V4 和 V6)。另外,我可以从该服务器 ping google IPv4 和 IPv6。
答案1
只有一个默认网关:这默认网关用于这默认路由,这是gateway
控制的。网络配置工具第二次尝试添加具有相同度量等的默认路由时,这会触发错误RTNETLINK answers: File exists
。
只需保留第一个实例:
gateway 23.227.198.194
并删除两个重复项。
ifdown ens192
注意:在更改配置之前最好关闭接口(使用),以避免接口之间不同步。如果向上向下工具的状态和实际的网络状态。当然,如果是远程访问(或者重新启动),则应该保留一种访问系统的方法。
下面的信息并不是解决问题所必需的,它只是一个说明,可以ens192:0
而且ens192:1
应该完全避免,但可以忽略这个说明。
没有理由使用所谓的别名接口(它们不是接口,它们是附加到附加地址的标签)。今天如果向上向下用途ip路由2:ip link
,ip addr
在内部而不是内部ifconfig
,这些假接口的唯一已知的剩余“客户”是通过旧的 API 处理的(netdevice(7)
):ifconfig
在 Linux 上已过时,工具或人类不应再使用。它应该被替换为 和ip link
,ip addr
它使用更新的内核 API (rtnetlink(7)
)。例如要显示一个IPv4地址具有这样的兼容性标签(而不是同一接口上的其他地址),可以使用例如:
ip -details addr show dev ens192 label ens192:0
但当然,只是做:
ip addr show dev ens192
将在界面上显示所有 3 个地址。
您可以删除配置中各处的:0
和,只保留.:1
ens192
如果向上向下只会像往常一样添加地址(并且没有标签,因此不再显示它们ifconfig
)。此外,这将是 IPv6 的唯一方法(尽管额外的:x
将被忽略),因为 Linux 上所谓的别名接口是 IPv4 的解决方法,而不是 IPv6 的解决方法,因为 IPv6 从来不需要它们(ifconfig
对于 IPv6 使用不同的语法与add
和del
代替) 。