我正在尝试在接口 enp0s25 上设置 2 个 IP 地址。我现在使用 3 个只是为了进行故障排除。
这是我的设置,这是 /etc/network/interfaces.d/enp0s25 的内容
auto enp0s25
auto enp0s25:0
auto enp0s25:1
iface enp0s25 inet static
address 192.168.1.95
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4
iface enp0s25:0 inet static
address 192.168.1.96
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4
# This is the actual second ipaddress that I want
iface enp0s25:1 inet static
address 172.16.28.250
netmask 255.255.255.0
gateway 172.16.28.1
dns-nameservers 8.8.8.8 8.8.4.4
这是 /etc/interfaces 的内容
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug enp0s25
# iface enp0s25 inet dhcp
当我做一个时sudo service network restart
它失败了所以我做了sudo service network status
然后我得到了
● networking.service - Raise network interfaces
Loaded: loaded (/lib/systemd/system/networking.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Mon 2019-02-25 15:15:37 EST; 3min 8s ago
Docs: man:interfaces(5)
Process: 481 ExecStart=/sbin/ifup -a --read-environment (code=exited, status=1/FAILURE)
Process: 477 ExecStartPre=/bin/sh -c [ "$CONFIGURE_INTERFACES" != "no" ] && [ -n "$(ifquery --read-environment --lis
Main PID: 481 (code=exited, status=1/FAILURE)
Feb 25 15:15:37 trmi-ral-server systemd[1]: Starting Raise network interfaces...
Feb 25 15:15:37 trmi-ral-server ifup[481]: RTNETLINK answers: File exists
Feb 25 15:15:37 trmi-ral-server ifup[481]: ifup: failed to bring up enp0s25:0
Feb 25 15:15:37 trmi-ral-server ifup[481]: RTNETLINK answers: File exists
Feb 25 15:15:37 trmi-ral-server ifup[481]: ifup: failed to bring up enp0s25:1
Feb 25 15:15:37 trmi-ral-server systemd[1]: networking.service: Main process exited, code=exited, status=1/FAILURE
Feb 25 15:15:37 trmi-ral-server systemd[1]: Failed to start Raise network interfaces.
Feb 25 15:15:37 trmi-ral-server systemd[1]: networking.service: Unit entered failed state.
Feb 25 15:15:37 trmi-ral-server systemd[1]: networking.service: Failed with result 'exit-code'.
但如果我重新启动,那么他们工作。
ip address
显示所有已分配。
我可以从两个网络上的另一台计算机 ping 它们(在它们之间交换以太网电缆)
但,service networking status
还是显示失败。
我怎么能说networking
没有运行但实际上有网络连接呢?
答案1
服务联网状态仍然显示失败。
程序不会告诉你,但失败信息与你的地址;它实际上失败了,因为你告诉它两次配置相同的路由。
是的,只要通过不同的接口,就可以为同一网络设置两条路由。但实际上并没有不同的接口;您只有 3 个针对同一“enp0s25”接口的条目。没有“别名接口”之类的东西。
因此您的配置文件将转换为以下命令:
ip addr add 192.168.1.95/24 dev enp0s25
ip route add 0.0.0.0/0 via 192.168.1.1 dev enp0s25
ip addr add 192.168.1.96/24 dev enp0s25
ip route add 0.0.0.0/0 via 192.168.1.1 dev enp0s25
ip addr add 172.16.28.250/24 dev enp0s25
ip route add 0.0.0.0/0 via 172.16.28.1 dev enp0s25
请注意,配置要求0.0.0.0/0 ... dev enp0s25
添加两次路由。第一次尝试成功并为您提供连接,第二次尝试失败并导致 ifupdown (networking.service) 崩溃,第三次尝试也会发生同样的情况。
为了避免这种情况,请删除gateway...
除一行之外的所有行。
(注意:Linux 默认不支持每个子网的 IPv4 网关——如果你添加多个默认路由,它只会选择一个并使用它一切,即使它是“错误的”子网。因此,如果192.168.1.1
和172.16.28.1
属于同一路由器,则实际上不需要同时添加两者。)
针对 Debian 9 语法更新的文件如下所示:
auto enp0s25
iface enp0s25 inet static
address 192.168.1.95/24
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4
iface enp0s25 inet static
address 192.168.1.96/24
iface enp0s25 inet static
address 172.16.28.250/24
我如何才能使网络不运行但实际上有网络连接?
它从来就没有“运行”过。它只是一个配置 IP 地址并退出的脚本,仅此而已。网络完全由 Linux 内核本身处理。