我在 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:0和enp3s0f0:1等等。