以橋接的方式搭建虛擬機網絡,其優勢是可以將網絡中的虛擬機看作是與主機同等地位的服務器。
在原本的局域網中有兩台主機,一台是win7(IP: 192.168.0.236),一台是CentOS7(IP: 192.168.0.251),現在要在CentOS(以下簡稱HOST)中搭建虛擬機,並使得虛擬機能夠處於與Win7和HOST相同的網絡環境中。
HOST原本的網絡配置
打開HOST的網絡鏈接配置文件:
vi /etc/sysconfig/network-scripts/ifcfg-enp3s0
其文件內容為:
TYPE=Ethernet DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_AUTOCONF=yes IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no NAME=enp3s0 UUID=99244a4d-8cac-4023-9a09-8e50c547cd3a DEVICE=enp3s0 HWADDR=b0:6e:bf:bb:12:ad #static assignment ONBOOT=yes BOOTPROTO=static IPADDR=192.168.0.251 GATEWAY=192.168.0.1 NETMASK=255.255.255.0
DNS服務器配置在如下文件中:
vi /etc/sysconfig/network
其內容為:
DNS1=192.168.0.1
配置橋接
以橋接的方式配置網絡,修改 ifcfg-enp3s0文件:
TYPE=Ethernet BRIDGE=br0 #DEFROUTE=yes #PEERDNS=yes #PEERROUTES=yes #IPV4_AUTOCONF=yes #IPV6INIT=yes #IPV6_AUTOCONF=yes #IPV6_DEFROUTE=yes #IPV6_PEERDNS=yes #IPV6_PEERROUTES=yes #IPV6_FAILURE_FATAL=no NAME=enp3s0 UUID=99244a4d-8cac-4023-9a09-8e50c547cd3a DEVICE=enp3s0 #HWADDR=b0:6e:bf:bb:12:ad #static assignment ONBOOT=yes #BOOTPROTO=static #IPADDR=192.168.0.251 #GATEWAY=192.168.0.1 #NETMASK=255.255.255.0
同時,在相同目錄下拷貝一份該文件,並命名為 ifcfg-br0:
cp /etc/sysconfig/network-scripts/ifcfg-enp3s0 /etc/sysconfig/network-scripts/ifcfg-br0
然后修改該文件內容為:
TYPE=Bridge DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_AUTOCONF=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no NAME=br0 #UUID=99244a4d-8cac-4023-9a09-8e50c547cd3a DEVICE=br0 #HWADDR=b0:6e:bf:bb:12:ad #static assignment ONBOOT=yes BOOTPROTO=static IPADDR=192.168.0.251 GATEWAY=192.168.0.1 NETMASK=255.255.255.0
修改完成這兩個文件之后,重啟網絡服務:
systemctl restart network.service
配置虛擬網絡
使用如下命令打開KVM管理工具:
virt-manager
看到窗口:
在【編輯】菜單中選擇【連接詳情】,打開如下窗口:
選擇【網絡接口】這個Tab,將br0接口給停止掉,即左側下方紅色的大叉叉,注意不是圓圈的叉叉,那個是刪除,此處不要刪除。
然后選擇【虛擬網絡】這個Tab,將原本的一個default網絡給停止並刪除掉,然后重新創建一個虛擬網絡,創建過程如下:
設置一個虛擬網絡的名稱,然后下一步:
然后
然后是選擇轉發的物理網絡,此處注意是選擇enp3s0,模式采用路由的方式:
配置完成之后回到網絡接口界面,啟動br0,然后再回到虛擬網絡界面,啟動vnet0。
此時我們查看ifconfig:
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.0.251 netmask 255.255.255.0 broadcast 192.168.0.255 inet6 fe80::b26e:bfff:febb:12ad prefixlen 64 scopeid 0x20<link> ether b0:6e:bf:bb:12:ad txqueuelen 1000 (Ethernet) RX packets 70809 bytes 4050362 (3.8 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 718 bytes 69637 (68.0 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 enp3s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether b0:6e:bf:bb:12:ad txqueuelen 1000 (Ethernet) RX packets 93610 bytes 20510654 (19.5 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 10830 bytes 918705 (897.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1 (Local Loopback) RX packets 1610 bytes 122960 (120.0 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1610 bytes 122960 (120.0 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.100.1 netmask 255.255.255.0 broadcast 192.168.100.255 ether 52:54:00:b3:49:b9 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 vnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 fe80::fc54:ff:fe00:8db prefixlen 64 scopeid 0x20<link> ether fe:54:00:00:08:db txqueuelen 1000 (Ethernet) RX packets 9522 bytes 786944 (768.5 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 76790 bytes 18908454 (18.0 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
可以看到類似這樣的幾個連接信息:enp3s0、br0、vnet0、virbr0。
注意,此時我們的HOST網絡訪問都是正常的。
然后創建一台虛擬機,其虛擬機配置為:
配置其網絡連接為:
TYPE=Ethernet UUID=55ec455e-aa43-47df-8657-d7846c355792 ONBOOT=yes NM_CONTROLLED=yes DEVICE=eth0 #HWADDR=52:54:00:00:08:DB DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6NIT=no NAME="System eth0" #HWADDR=00:0C:29:22:D2:64 PEERDNS=yes PEERROUTES=yes LAST_CONNECT=14674126 #static assignment BOOTPROTO=static IPADDR=192.168.0.211 NETMASK=255.255.255.0 BROADCAST=192.168.0.255 GATEWAY=192.168.0.1 DNS1=192.168.0.1
然后查看虛擬機的網絡連接信息:
eth0 Link encap:Ethernet HWaddr 52:54:00:00:08:DB inet addr:192.168.0.211 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::5054:ff:fe00:8db/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:74804 errors:0 dropped:0 overruns:0 frame:0 TX packets:9511 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:18772134 (17.9 MiB) TX bytes:786170 (767.7 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:10 errors:0 dropped:0 overruns:0 frame:0 TX packets:10 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:578 (578.0 b) TX bytes:578 (578.0 b) virbr0 Link encap:Ethernet HWaddr 52:54:00:60:DA:35 inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0 UP BROADCAST RUNNING 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)
測試:
在Win7上Ping HOST:
正在 Ping 192.168.0.251 具有 32 字節的數據: 來自 192.168.0.251 的回復: 字節=32 時間<1ms TTL=64 來自 192.168.0.251 的回復: 字節=32 時間<1ms TTL=64 來自 192.168.0.251 的回復: 字節=32 時間<1ms TTL=64 來自 192.168.0.251 的回復: 字節=32 時間<1ms TTL=64 192.168.0.251 的 Ping 統計信息: 數據包: 已發送 = 4,已接收 = 4,丟失 = 0 (0% 丟失), 往返行程的估計時間(以毫秒為單位): 最短 = 0ms,最長 = 0ms,平均 = 0ms
在Win7上Ping虛擬機:
正在 Ping 192.168.0.211 具有 32 字節的數據: 來自 192.168.0.211 的回復: 字節=32 時間<1ms TTL=64 來自 192.168.0.211 的回復: 字節=32 時間<1ms TTL=64 來自 192.168.0.211 的回復: 字節=32 時間<1ms TTL=64 來自 192.168.0.211 的回復: 字節=32 時間<1ms TTL=64 192.168.0.211 的 Ping 統計信息: 數據包: 已發送 = 4,已接收 = 4,丟失 = 0 (0% 丟失), 往返行程的估計時間(以毫秒為單位): 最短 = 0ms,最長 = 0ms,平均 = 0ms
在HOST上Ping虛擬機:
PING 192.168.0.211 (192.168.0.211) 56(84) bytes of data. 64 bytes from 192.168.0.211: icmp_seq=10 ttl=64 time=0.206 ms 64 bytes from 192.168.0.211: icmp_seq=11 ttl=64 time=0.114 ms 64 bytes from 192.168.0.211: icmp_seq=12 ttl=64 time=0.138 ms 64 bytes from 192.168.0.211: icmp_seq=13 ttl=64 time=0.135 ms
在虛擬機上Ping HOST:
PING 192.168.0.251 (192.168.0.251) 56(84) bytes of data. 64 bytes from 192.168.0.251: icmp_seq=1 ttl=64 time=0.104 ms 64 bytes from 192.168.0.251: icmp_seq=2 ttl=64 time=0.277 ms 64 bytes from 192.168.0.251: icmp_seq=3 ttl=64 time=0.254 ms 64 bytes from 192.168.0.251: icmp_seq=4 ttl=64 time=0.220 ms
在虛擬機上Ping Win7:
PING 192.168.0.236 (192.168.0.236) 56(84) bytes of data. 64 bytes from 192.168.0.236: icmp_seq=1 ttl=128 time=0.826 ms 64 bytes from 192.168.0.236: icmp_seq=2 ttl=128 time=0.405 ms 64 bytes from 192.168.0.236: icmp_seq=3 ttl=128 time=0.384 ms 64 bytes from 192.168.0.236: icmp_seq=4 ttl=128 time=0.434 ms
所有的網絡都是通暢的,萬事大吉!