虚拟机的网络
首先虚拟机的网络,虚拟机创建出来后,希望和主机通信,和其他外网中的主机通信,也希望和其他的虚拟机通信,该用什么方式呢?
大多数人都会想到NAT,桥接,Host-Only。
桥接:
特点:虚拟机可以和外界通信,虚拟机之间可以通信,虚拟机可以跟真机通信。
虚拟机需要虚拟一个网卡设备。我们知道,物理机上都有一个物理网卡,而这个物理网卡就连接到交换机上。而这个物理网卡一定是被真机试用的。那怎么实现虚拟机去和外界通信的。桥接的意思就是:
将真机的网卡桥接。将这个真机网卡当做交换机,这个交换机工作在混杂模式下。什么帧数据都接收。现在真机网卡成了交换机了。现在外界的主机要与我的真机通信。我真机网卡当做了交换机,并虚拟了一个网卡接收给真机的数据。当然,如果目标MAC是虚拟机的网卡的MAC。那么数据就发往这个虚拟机。如果,虚拟机上线了,虚拟机将自己的MAC通告,信息传给真机网卡的交换机,交换机转发信息。局域网内的其他主机接到信息,就好像虚拟机和自己处在同一个局域网内一样。
仅主机:(vmnet1)
特点:虚拟机之间可以通信,虚拟机可以和真机通信,但是虚拟机不能与外界通信。
真机先虚拟一块网卡,VMware再虚拟一个交换机。虚拟机的各个虚拟网卡连接到这个虚拟交换机上,然后再将真机虚拟出的网卡接到这个虚拟交换机上,就可以实现虚拟机之间加上真机的通信了。ps:如果真机的网卡可以与真机的虚拟网卡通信并转发数据包,那么就可以实现虚拟机与外部局域网通信,这叫路由模型。这时,虚拟机把网关指向真机的虚拟网卡上的地址就OK了。(但路由这不常用,除非静态路由)
NAT:(vmnet8)
特点:虚拟机之间可以通信,虚拟机之间可以通信,虚拟机与真机可以通信。
虚拟一个网卡VMnat8,虚拟机的网关应该都指向VMnet8.当虚拟机与外部局域网通信时,源地址被真机修改成了真机的IP地址,局域网的其他主机也以为是我的真机与他们在通信。所以回复数据包的时候,目标IP是我真机的IP。真机收到请求再地址转换,以达到通信的目的。
在Linux上创建桥设备
首先最开始的网络信息如下:
[root@localhost network-scripts]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:02:2B:7E
inet addr:192.168.217.131 Bcast:192.168.217.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe02:2b7e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:301 errors:0 dropped:0 overruns:0 frame:0
TX packets:64 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:48584 (47.4 KiB) TX bytes:4344 (4.2 KiB)
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:16436 Metric:1
RX packets:453 errors:0 dropped:0 overruns:0 frame:0
TX packets:453 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:87716 (85.6 KiB) TX bytes:87716 (85.6 KiB)
第一,要注意。桥接的话,不支持NetworkManager去管理桥设备,所以创建桥设备,必须关掉NetworkManager。
[root@localhost network-scripts]# chkconfig --list|grep NetworkManager
NetworkManager 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@localhost network-scripts]# service NetworkManager status
NetworkManager is stopped
[root@localhost network-scripts]#
所以之前必须记住关掉NetworkManager。
第二,想要管理桥设备必须安装必须的桥管理工具。(真正的实现实是由内核tap模块)
[root@localhost network-scripts]# yum -y install bridge-utils
Loaded plugins: product-id, refresh-packagekit, security, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
rhel6 | 3.9 kB 00:00 ...
Setting up Install Process
Package bridge-utils-1.2-10.el6.x86_64 already installed and latest version
Nothing to do
通过修改配置文件的方式修改桥接。
配置文件ifcfg-br0
DEVICE="br0"
NM_CONTROLLED="no"
BOOTPROTO="none"
IPADDR=192.168.217.131
NETMASK=255.255.255.0
GATEWAY=192.168.217.2
IPV6INIT="no"
ONBOOT="yes"
TYPE="Bridge"
USERCTL="no"
配置物理网卡的配置文件ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="none"
NM_CONTROLLED=no
IPV6INIT="yes"
ONBOOT="yes"
TYPE="Ethernet"
BRIDGE="br0"
重启网络服务。
[root@localhost network-scripts]# service network restart
Shutting down interface eth0: [ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0: [ OK ]
Bringing up interface br0: Determining if ip address 192.168.217.131 is already in use for device br0...
[ OK ]
查看网络信息。
[root@localhost network-scripts]# ifconfig
br0 Link encap:Ethernet HWaddr 00:0C:29:02:2B:7E
inet addr:192.168.217.131 Bcast:192.168.217.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe02:2b7e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:875 (875.0 b) TX bytes:1074 (1.0 KiB)
eth0 Link encap:Ethernet HWaddr 00:0C:29:02:2B:7E
inet6 addr: fe80::20c:29ff:fe02:2b7e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:348 errors:0 dropped:0 overruns:0 frame:0
TX packets:84 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:57691 (56.3 KiB) TX bytes:5706 (5.5 KiB)
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:16436 Metric:1
RX packets:574 errors:0 dropped:0 overruns:0 frame:0
TX packets:574 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:111480 (108.8 KiB) TX bytes:111480 (108.8 KiB)
使用命令查看当前的桥设备。
[root@localhost network-scripts]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c29022b7e no eth0
启用STP的功能
[root@localhost network-scripts]# brctl stp br0 on
[root@localhost network-scripts]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c29022b7e yes eth0
基于命令行的实现。
添加一个桥设备
[root@monitor ~]# brctl addbr br0
[root@monitor ~]#
[root@monitor ~]# ifconfig -a
br0 Link encap:Ethernet HWaddr C6:50:BC:BE:88:68
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)
eth0 Link encap:Ethernet HWaddr 00:0C:29:7E:C9:4F
inet addr:192.168.217.129 Bcast:192.168.217.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe7e:c94f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:14062 errors:0 dropped:0 overruns:0 frame:0
TX packets:7065 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:20762199 (19.8 MiB) TX bytes:392006 (382.8 KiB)
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:16436 Metric:1
RX packets:18 errors:0 dropped:0 overruns:0 frame:0
TX packets:18 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1064 (1.0 KiB) TX bytes:1064 (1.0 KiB)
拆掉eth0上的IP
[root@monitor ~]# ifconfig eth0 0 up
[root@monitor ~]#
[root@monitor ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:7E:C9:4F
inet6 addr: fe80::20c:29ff:fe7e:c94f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:14192 errors:0 dropped:0 overruns:0 frame:0
TX packets:7084 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:20772188 (19.8 MiB) TX bytes:394136 (384.8 KiB)
为br0添加eth0网卡
[root@monitor ~]# brctl addif br0 eth0
为br0添加地址相关内容。
[root@monitor ~]# ifconfig br0 192.168.217.129/24 up
[root@monitor ~]# route add default gw 192.168.217.2
[root@monitor ~]#
[root@monitor ~]# ifconfig
br0 Link encap:Ethernet HWaddr 00:0C:29:7E:C9:4F
inet addr:192.168.217.129 Bcast:192.168.217.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe7e:c94f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:582 errors:0 dropped:0 overruns:0 frame:0
TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:26772 (26.1 KiB) TX bytes:606 (606.0 b)
eth0 Link encap:Ethernet HWaddr 00:0C:29:7E:C9:4F
inet6 addr: fe80::20c:29ff:fe7e:c94f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:14868 errors:0 dropped:0 overruns:0 frame:0
TX packets:7091 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:20814087 (19.8 MiB) TX bytes:394562 (385.3 KiB)
查看。
[root@monitor ~]# brctl stp br0 on
[root@monitor ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c297ec94f yes eth0