虛擬 NIC:“SIOCSIFFLAGS:無法分配請求的地址”但已創建
在我的 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:0和enp3s0f0:1等等在。