创建虚拟网卡有多种方法,这里简单记录一下。
一,
ifconfig 网络配置工具(开发者建议用ip代替)
-
[root@pingshun net]# ifconfig eth0:0 1.1.1.1 up
-
[root@pingshun net]# ifconfig eth0:0
-
eth0:0 Link encap:Ethernet HWaddr 08:9E:01:E0:8D:CC
-
inet addr:1.1.1.1 Bcast:1.255.255.255 Mask:255.0.0.0
-
UP BROADCAST MULTICAST MTU:1500 Metric:1
说明,eth0表示存在设备的名,如果有无线,也可以是wlan0
同理可以 创建eth0:1 eth0:2 eth0:3 ........
二,
brctl 创建一个桥接设备
-
[root@pingshun net]# brctl addbr virbr0
-
[root@pingshun net]# ifconfig virbr0
-
virbr0 Link encap:Ethernet HWaddr 26:C9:23:F0:8B:61
-
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:0
-
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
说明:现在设备已经创建,只是还没有配置和启动,ifconfig命令不会显示该设备。
可以使用ifconfig配置,并启动:
-
[root@pingshun net]# ifconfig virbr0 192.168.122.1
-
[root@pingshun net]# ifconfig virbr0
-
virbr0 Link encap:Ethernet HWaddr 26:C9:23:F0:8B:61
-
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
-
inet6 addr: fe80::24c9:23ff:fef0:8b61/64 Scope:Link
-
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
-
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
-
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
-
collisions:0 txqueuelen:0
-
RX bytes:0 (0.0 b) TX bytes:468 (468.0 b)
三,/etc/sysconfig/network-script/文件夹下添加ifcfg-*文件
系统在启动时会启动/etc/init.d/network脚本程序,依据ifcfg-*文件中的规则帮你创建,这也是永久创建的一种方式。例如:
-
[root@pingshun network-scripts]# cat ifcfg-br0
-
DEVICE=virbr0
-
TYPE=Bridge
-
BOOTPROTO=none
-
ONBOOT=yes
-
IPADDR=192.168.162.100
-
NETMASK=255.255.255.0
-
[root@pingshun network-scripts]# cat ifcfg-br1
-
DEVICE=virbr1
-
TYPE=Bridge
-
BOOTPROTO=none
-
ONBOOT=yes
-
IPADDR=192.168.162.101
-
NETMASK=255.255.255.0
附加一:
如果你用strace跟踪执行上述前两个命令工具,就会看到用户层的应用程序,如何调用系统接口,完成内核对象配置。
比如:
brctl:
-
socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 4
-
..............
-
ioctl(4, SIOCGIFFLAGS, {ifr_name="eth0:0", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_MULTICAST}) = 0
-
ioctl(4, SIOCSIFFLAGS, {ifr_name="eth0:0", ???}) = -1 EADDRNOTAVAIL (Cannot assign requested address)
ifconfig:
-
socket(PF_FILE, SOCK_DGRAM, 0) = 3
-
.......
-
ioctl(4, SIOCSIFADDR, {ifr_name="eth0:0", ifr_addr={AF_INET, inet_addr("1.1.1.1")}}) = 0
-
ioctl(4, SIOCGIFFLAGS, {ifr_name="eth0:0", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_MULTICAST}) = 0
-
ioctl(4, SIOCSIFFLAGS, {ifr_name="eth0:0", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_RUNNING|IFF_MULTICAST}) = 0
-
ioctl(4, SIOCGIFFLAGS, {ifr_name="eth0:0", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_MULTICAST}) = 0
-
ioctl(4, SIOCSIFFLAGS, {ifr_name="eth0:0", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_RUNNING|IFF_MULTICAST}) = 0
(稍微有点奇怪系统调用!!!!!!!!!!)
附加二:
linux内核在设备注册后,会在虚拟文件系统创建可供展示的文件,可以查看该文件夹查看相关的内核信息。
早期的在/proc文件下,最新的内核启用功能更好的/sys/文件夹下。
对于我们的虚拟网络设备:
在
/sys/class/net/下
[root@pingshun net]#
ls
eth0 lo virbr0 virbr1 wlan0
[root@pingshun net]#
rmmod ath9k
[root@pingshun net]#
ls
eth0 lo virbr0 virbr1
[root@pingshun net]#
ifconfig wlan0
wlan0: error fetching interface information: Device not found
我们把驱动卸载掉,可以看到找不到相关设备,下面我们再加载相关驱动
[root@pingshun net]#
modprobe ath9k
[root@pingshun net]#
ifconfig wlan0
wlan0 Link encap:Ethernet HWaddr 48:D2:24:9E:1E:04
inet addr:10.6.23.144 Bcast:10.6.23.255 Mask:255.255.254.0
inet6 addr: fe80::4ad2:24ff:fe9e:1e04/64 Scope:Link
看到设备又回来了。
对于添加设备的原理,可以用 udevadm monitor命令监听内核创建过程。具体请参考udev的相关知识。
阅读(3678) | 评论(0) | 转发(0) |