虚拟网卡:“SIOCSIFFLAGS:无法分配请求的地址”但已创建

虚拟网卡:“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(使用强制选项),则不会显示任何错误消息,并且虚拟网络适配器也会正常启动。

答案1

ifconfig如今被认为已经过时了。尝试使用ip工具代替。所有最近的发行版都应该支持它,它是iproute工具集的一部分。

如果您只想在接口上添加额外的 IP 地址,请使用以下命令:

ip addr add 10.50.55.130/24 dev eth0

我同意 Johan Myréen 在你的问题下的评论。

答案2

除了命令行方法之外,基于 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等等。

相关内容