Networking

虛擬 NIC:“SIOCSIFFLAGS:無法分配請求的地址”但已創建

  • March 24, 2021

在我的 Linux 系統(自定義發行版,基於 Debian)的物理網卡上創建虛擬網路適配器這一看似簡單的任務時,我遇到了一些麻煩。

如果我跑

ifconfig eth0:1 10.50.55.130 netmask 255.255.255.0

一切都很好:虛擬網卡被靜默添加並正確顯示ifconfig

我希望這個虛擬網卡的定義出現在其中/etc/network/interfaces。我添加了以下節。

# virtual NIC
# auto eth0:1
iface eth0:1 inet static
   address 10.50.55.130
   netmask 255.255.255.0

第一行註釋掉了,因為到目前為止我對讓系統自動啟動網路介面不感興趣。

一切似乎都很好。

但是,如果我跑步ifup eth0:1,我會得到SIOCSIFFLAGS: Cannot assign requested address.

我真正無法理解的是虛擬網卡實際上是創建的。這是來自 的輸出ifconfig

can0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-                        00-00-00  
     UP RUNNING NOARP  MTU:16  Metric:1
     RX packets:1206446 errors:0 dropped:0 overruns:0 frame:0
     TX packets:193280 errors:0 dropped:12 overruns:0 carrier:12
     collisions:0 txqueuelen:10 
     RX bytes:7645126 (7.2 MiB)  TX bytes:1393003 (1.3 MiB)
     Interrupt:68 

can1      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
     UP RUNNING NOARP  MTU:16  Metric:1
     RX packets:299171 errors:0 dropped:0 overruns:0 frame:0
     TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
     collisions:0 txqueuelen:10 
     RX bytes:2393368 (2.2 MiB)  TX bytes:0 (0.0 B)
     Interrupt:71 

eth0      Link encap:Ethernet  HWaddr 98:5d:ad:c2:30:30  
     inet addr:10.90.100.43  Bcast:0.0.0.0  Mask:255.255.248.0
     UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
     RX packets:1560275 errors:0 dropped:1 overruns:0 frame:0
     TX packets:790 errors:0 dropped:0 overruns:0 carrier:0
     collisions:0 txqueuelen:1000 
     RX bytes:96964255 (92.4 MiB)  TX bytes:176882 (172.7 KiB)
     Interrupt:56 

eth0:1    Link encap:Ethernet  HWaddr 98:5d:ad:c2:30:30 
     inet addr:10.50.55.130  Bcast:10.50.55.255  Mask:255.255.255.0
     UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
     Interrupt:56 

eth1      Link encap:Ethernet  HWaddr 98:5d:ad:c2:30:32  
     inet addr:169.254.8.141  Bcast:169.254.255.255  Mask:255.255.0.0
     UP BROADCAST MULTICAST  MTU:1500  Metric:1
     RX packets:0 errors:0 dropped:0 overruns:0 frame:0
     TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
     collisions:0 txqueuelen:1000 
     RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback  
     inet addr:127.0.0.1  Mask:255.0.0.0
     inet6 addr: ::1/128 Scope:Host
     UP LOOPBACK RUNNING  MTU:65536  Metric:1
     RX packets:140932 errors:0 dropped:0 overruns:0 frame:0
     TX packets:140932 errors:0 dropped:0 overruns:0 carrier:0
     collisions:0 txqueuelen:0 
     RX bytes:8522761 (8.1 MiB)  TX bytes:8522761 (8.1 MiB)

為什麼我會收到此錯誤?或者… 為什麼要創建 NIC?

我會補充一點,如果我呼叫ifup -f eth0:1(使用 force 選項)沒有顯示錯誤消息並且虛擬網路適配器啟動得很好。

ifconfig這些天被認為是過時的。嘗試改用ip工具。所有最近的發行版都應該支持它,它是iproute工具集的一部分。

如果您只想在介面上添加額外的 IP 地址,請使用以下命令:

ip addr add 10.50.55.130/24 dev eth0

我同意 Johan Myréen 在您的問題下方的評論。

除了命令行方法,基於 Debian 的系統的首選方法是使用網路配置文件。

別名方法更喜歡使用這樣的順序:eth0, eth:0:0, eth0:1,

因此,系統的第一個別名是 eth0:0,為了在系統重新啟動後實現這種持久性,請創建一個/etc/network/interfaces.d/eth0包含以下內容的文件:

auto eth0:0
allow-hotplug eth0:0
iface eth0:0 inet static
     address 10.50.55.130/24

或者您可以直接編輯文件/etc/network/interfaces,但不建議這樣做,因為它會被自動覆蓋。

關鍵是使用帶斜線子網的地址格式,不再使用netmask關鍵字:address 10.50.55.130/24

當然做

service networking restart

測試配置。之後使用命令檢查:

service networking status

ip address

請注意,就像評論中提到的那樣,介面的實際名稱可以是任何名稱,因此請確保使用ip addr命令檢查介面名稱並使用該名稱並對其進行修改:0等等,例如enp3s0f0:0enp3s0f0:1等等在。

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