我的 VPS 分配了两个 IP,但“ip a”仅显示一个真实网络接口 eth0 和一个环回接口 lo。我复制/etc/sysconfig/network-scripts/ifcfg-eth0
并 /etc/sysconfig/network-scripts/ifcfg-eth1
编辑它以反映新的 IP。但systemctl restart network
失败并出现错误:Bringing up interface eth1: Error: Connection activation failed: No suitable device found for this connection.
那么如何添加新设备来设置 eth1 呢?或者,如果不添加另一个真实的网络适配器,我就无法添加新设备?那么,我可以将这两个IP分配到同一个接口eth0吗?如何?
更新:
我遵循@AB的方法,但仍然无法使其工作:
TYPE=Ethernet
BOOTPROTO0=none
NAME0=eth0
DEVICE0=eth0
ONBOOT0=yes
PREFIX0=24
IPADDR0=x.x.x.x
NETMASK0=255.255.255.0
GATEWAY0=x.x.x.1
TYPE=Ethernet
BOOTPROTO1=none
NAME1=eth1
DEVICE1=eth1
ONBOOT1=yes
PREFIX1=24
IPADDR1=y.y.y.y
NETMASK1=255.255.255.0
GATEWAY1=y.y.y.1
以下配置也不起作用:
TYPE=Ethernet
BOOTPROTO0=none
NAME0=eth0
DEVICE0=eth0
ONBOOT0=yes
PREFIX0=24
IPADDR0=x.x.x.x
NETMASK0=255.255.255.0
GATEWAY0=x.x.x.1
TYPE=Ethernet
BOOTPROTO1=none
NAME1=eth0:1
DEVICE1=eth0
ONBOOT1=yes
PREFIX1=24
IPADDR1=y.y.y.y
NETMASK1=255.255.255.0
GATEWAY1=y.y.y.1
该systemctl restart network
命令成功,但ifconfig
仅显示 1 个接口 eth0 和 1 个 lo 接口。
更新:
使用@AB的答案中正确的配置并使用ip a
,它有效!这两个 ip 显示在接口 eth0 下。
答案1
可以在上面配置这两个IP地址相同的界面。
这被记录在红帽6但不再出现在 RHEL 7 的文档中。据推测,此配置正在逐步淘汰(例如:使用 NetworkManager 和nmtui
),因此这种不太频繁的设置不再被正式记录。与往常一样,它与 CentOS 6/CentOS 7 完全相同。
IPADDRn=地址
其中,address 是 IPv4 地址,n 应该是从 0 开始的连续正整数(例如,IPADDR0)。它用于配置多个 IP 地址一个 界面。如果只配置一个地址,则可以省略。
脚本的内容/etc/sysconfig/network-scripts/network-functions
显示它仍然有效的语法:
expand_config () { local i=0 val for idx in '' {0..255} ; do ipaddr[$i]=$(eval echo '$'IPADDR$idx) if [ -z "${ipaddr[$i]}" ]; then [ "$idx" ] && [ $idx -ge 2 ] && break continue fi prefix[$i]=$(eval echo '$'PREFIX$idx) netmask[$i]=$(eval echo '$'NETMASK$idx) broadcast[$i]=$(eval echo '$'BROADCAST$idx) arpcheck[$i]=$(eval echo '$'ARPCHECK$idx) arpupdate[$i]=$(eval echo '$'ARPUPDATE$idx)
因此,/etc/sysconfig/network-scripts/ifcfg-eth0
只需更改IPADDR=
为IPADDR0=
plus IPADDR1=
,并对上面列表中的其他类似设置执行相同的操作(例如:如果您使用的是NETMASK=
,请将其更改为NETMASK0=
plusNETMASK1=
等)。
更新(在OP提供配置内容之后):唯一相关的条目在上面的列表中这些是(仅当最初使用时):
PREFIX
NETMASK
BROADCAST
ARPCHECK
ARPUPDATE
不是任何其他的,特别是不是:
NAME
只有一界面。此外,
eth0:1
绝对应该避免使用别名地址作为接口(例如: ),这是一个过时的概念,在配置其他设置时变得毫无用处并且容易出错。这个答案中从未提出过这一点。GATEWAY
只有一默认路由(即使实际上有多个接口,但这里的情况并非如此)。可以有两条不同的独立互联网路由的多宿主是一个不同的野兽,无法在同一问题中得到回答。
那么最终ifconfig
不应该使用该命令(它是过时 API 的一部分,无法正确显示没有兼容性标签的多个 IPv4 地址(在单个接口上))。而是使用:
ip address
或ip -br address
显示主机接口上配置的地址。同样,在 Linux 上显示路由的命令最好是:
ip route
代替route
。
最后的配置ifcfg-eth0
应该(仅)是:
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
PREFIX0=24
IPADDR0=x.x.x.x
NETMASK0=255.255.255.0
PREFIX1=24
IPADDR1=y.y.y.y
NETMASK1=255.255.255.0
GATEWAY=x.x.x.1
相同的网关 xxx1 最终将用于路由 yyyy 地址,除非主机提供商提供了详细的路由文档,否则(在这种情况下,无论如何,这将需要一个单独的问题,因为配置不再只是ifcfg-eth0
关于并且很难掌握)。甚至有可能第二个地址的前缀/网络掩码 PREFIX1 应为 32,而不是 24(以及冗余的 NETMASK1,然后为 255.255.255.255),但如果没有主机提供商的文档,这一点是无法得知的,并且可能并不重要。