Centos

如何在 CentOS 7 上添加新的網路設備?

  • June 24, 2021

我的 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顯示一個介面 eth0 和一個 lo 介面。

更新:

在@AB 的答案中使用正確的配置並使用ip a,它可以工作!這兩個 ip 顯示在介面 eth0 下。

您可以在同一個介面上配置兩個 IP 地址。

這已記錄在RHEL 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=plusIPADDR1=並對上面列表中的其他類似設置執行相同操作(例如:如果您使用的是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),但是如果沒有主機提供商的文件就無法知道這點,並且可能無關緊要。

引用自:https://unix.stackexchange.com/questions/655505