本實驗將多臺物理主機中的虛擬主機組合,在主機A(計算節點)的虛擬主機形成局域網,同時通過主機B(控制節點)對外通信。。。
網絡拓撲圖
外網地址規劃
主機A作爲計算節點,B作爲網絡控制節點,網關和DNS服務器爲爲192.168.153.2
主機 | IP |
---|---|
A ens33 | 192.168.153.141/24 |
B ens33 | 192.168.153.142/24 |
內網網絡地址規劃
主機 | IP |
---|---|
A ens37 | 192.168.10.1/24 |
B ens37 | 192.168.10.2/24 |
虛擬網絡地址規劃
10.0.4.200 -- 10.0.4.220
由A主機網絡名稱空間dnsmasq
提供
主機 | IP |
---|---|
VM1 | 10.0.4.215/24 |
VM2 | 10.0.4.210/24 |
VM3 | 10.0.4.211/24 |
DHCP | 10.0.4.224/24 |
NS rin0 | 10.0.4.223/24 |
NS rex0 | 192.168.153.145/24 |
橋接物理網卡設備
如圖只需將虛擬交換機連到外網,即可通信~ 至於爲什麼加一個名稱空間,因爲名稱空間可以方便快捷的管理虛擬機局域網絡。
創建物理橋設備,並將網卡橋接到物理網卡上
vim /etc/sysconfig/network-script/ifcfg-br0
TYPE=Bridge
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
BOOTPROTO=static
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.153.141
GATEWAY=192.168.153.2
# 清除ifcfg-ens33配置地址
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
# 重啓網絡並把物理網卡加到物理橋上
yum install bridge-uils
systemctl restart network && brctl addif br0
虛擬機與域名空間通信
給虛擬主機VM2添加網關
可能遇到的問題:當默認網關存在多個時,ping報文可能不被送出
解決辦法:刪除其他默認的網關
在名稱空間打開路由轉發功能,使其能和域名空間內另一塊網卡通信
ip netns exec ns sysctl -w net.ipv4.ip_forward=1
現在能與網絡空間NS
的另一塊網卡(IP:192.168.153.143)通信
虛擬機與宿主機同一網段內的其他主機通信
虛擬機處於路由模型向外發送數據,相應包無法送回,與宿主機的其他主機(192.168.153.143)不能通信,添加iptables NAT規則,變爲nat模型網絡向外通信…
ip netns exec ns iptables -t nat -A POSTROUTING -s 10.0.4.0/24 -j SNT --to-source 192.168.153.145
ip netns exec ns iptables -t nat -A PREROUTING -d 192.168.153.145 -j DNAT --to-destination 10.0.4.210
ping宿主機內的其他主機
主機能正常通信
在192.168.153.143
的主機抓包
[root@localhost ~]# tcpdump -i ens33 icmp -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
05:43:50.612719 IP 192.168.153.145 > 192.168.153.143: ICMP echo request, id 2561, seq 0, length 64
05:43:50.612766 IP 192.168.153.143 > 192.168.153.145: ICMP echo reply, id 2561, seq 0, length 64
主機與外網通信
主機不能與互聯網通信,在B主機ens37抓包查看原因
[root@localhost ~]# tcpdump -i ens37 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens37, link-type EN10MB (Ethernet), capture size 262144 bytes
03:00:48.272041 IP 192.168.10.1 > 192.168.10.2: GREv0, length 102: IP 10.0.4.210 > 59.110.231.224: ICMP echo request, id 3585, seq 238, length 64
03:00:48.272406 IP 192.168.10.2 > 192.168.10.1: GREv0, length 130: IP 10.0.4.253 > 10.0.4.210: ICMP net 59.110.231.224 unreachable, length 92 #報文能到達網關,網關回應沒有路由
觀察發現:報文能到達網關,網關回應沒有路由,於是在域名空間查看路由
[root@localhost ~]# ip netns exec ns route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.4.0 0.0.0.0 255.255.255.0 U 0 0 0 rin0
192.168.153.0 0.0.0.0 255.255.255.0 U 0 0 0 rex0
增加路由
[root@localhost ~]# ip netns exec ns route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.153.2 0.0.0.0 UG 0 0 0 rex0
10.0.4.0 0.0.0.0 255.255.255.0 U 0 0 0 rin0
虛擬機VM2添加域名解析主機
echo "nameserver 192.168.153.2" > /etc/resolve.conf
主機能與外網通信
總結
GRE
技術出現解決了虛擬機在主機之間通信的問題,當然同樣的技術還有Vxlan
技術。- 這種網絡模型實現了虛擬機網絡,與真實主機網絡的隔離,可以方便的自定義網絡。
控制節點添加一個IP號,即可映射一臺VM主機,這樣的外部的真實主機一樣的通信
- 技術帶來無限可能。