繼下面三篇文章完成了kvm虛拟化管理平台webvirtmgr環境的部署安裝:
<a href="http://www.cnblogs.com/kevingrace/p/5737487.html" target="_blank">kvm虛拟化管理平台WebVirtMgr部署-虛拟化環境安裝-完整記錄(0)</a>
<a href="http://www.cnblogs.com/kevingrace/p/5737724.html" target="_blank">kvm虛拟化管理平台WebVirtMgr部署-完整記錄(1)</a>
<a href="http://www.cnblogs.com/kevingrace/p/5739009.html" target="_blank">kvm虛拟化管理平台WebVirtMgr部署-完整記錄(2)</a>
一般情況下,虛拟機(下面稱vm)跟主控端通過網橋方式進行通信,隻要主控端能聯網,那麼vm也就能順利聯網。
然而,我的測試環境下的網絡環境比較特殊:
沒有内網交換機設定,也就是說内網沒有網關,主控端預設的網關是外網位址的。
如下,主控端開啟了兩個網卡:em1(外網),em2(内網,加入到網橋br0中)
[root@openstack ~]# ip addr #檢視主控端的網卡配置情況
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link/ether 44:a8:42:21:a6:00 brd ff:ff:ff:ff:ff:ff
inet 103.10.86.17/26 brd 111.101.186.163 scope global em1
inet6 fe80::46a8:42ff:fe21:a600/64 scope link
3: em2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link/ether 44:a8:42:21:a6:01 brd ff:ff:ff:ff:ff:ff
inet6 fe80::46a8:42ff:fe21:a601/64 scope link
4: em3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 44:a8:42:21:a6:02 brd ff:ff:ff:ff:ff:ff
5: em4: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 44:a8:42:21:a6:03 brd ff:ff:ff:ff:ff:ff
6: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
inet 192.168.1.17/24 brd 192.168.1.255 scope global br0
8: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
link/ether fe:54:00:08:cf:9a brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc54:ff:fe08:cf9a/64 scope link
[root@openstack ~]# route -n #檢視路由,預設路由網關是外網的
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
103.10.86.0 0.0.0.0 255.255.255.192 U 0 0 0 em1
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 em1
169.254.0.0 0.0.0.0 255.255.0.0 U 1006 0 0 br0
0.0.0.0 111.101.186.1 0.0.0.0 UG 0 0 0 em1
由于内網網關不存在,并且vm和主控端之間采用的是bridge橋接模式,是以vm不能通過橋接模式自行聯網了。
要想使安裝後的vm聯網,還需要我們手動進行些特殊配置:
1)主控端部署squid代理環境,即vm對外的通路請求通過主控端squid代理出去。
2)vm對内的通路請求通過主控端iptables的nat轉發進來或者nginx反向代理(proxy_pass)進來。
---------------------------------------------------------------------------------------------------------
下面說的是http方式的squid代理;
主控端的squid代理部署記錄
yum指令直接線上安裝squid
[root@openstack ~]#yum install squid
安裝完成後,修改squid.conf 檔案中的内容,修改之前可以先備份該檔案
[root@openstack ~]# cd /etc/squid/
[root@openstack squid]#cp squid.conf squid.conf_bak
[root@openstack squid]#vim squid.conf
1.找到檔案中的 http_access deny all,将其修改為http_access allow all,表示所有使用者都可以通路這個代理,
2.找到http_port 3128 ,将其修改為http_port 192.168.1.17:3128,這裡的IP及端口是squid的代理IP(這裡也就是主控端的ip)及端口,
然後執行下面指令,進行squid啟動前測試
[root@openstack squid]# squid -k parse
2016/08/09 13:35:04| Processing Configuration File: /etc/squid/squid.conf (depth 0)
2016/08/09 13:35:04| Processing: acl manager proto cache_object
..............
2016/08/09 13:35:04| Processing: refresh_pattern . 0 20% 4320
2016/08/09 13:35:04| Initializing https proxy context
[root@openstack squid]# squid -z
2016/08/09 13:35:12| Creating Swap Directories
[root@openstack squid]# /etc/init.d/squid start
Starting squid: . [ OK ]
[root@openstack squid]# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
.............
tcp 0 0 192.168.1.17:3128 0.0.0.0:* LISTEN 71848/(squid)
.............
--------------------------------------------------------------------------------------
如果主控端開啟了iptables防火牆規則,則還需要在/etc/sysconfig/iptables裡添加下面一行:
-A INPUT -s 192.168.1.0/24 -p tcp -m state --state NEW -m tcp --dport 3128 -j ACCEPT
然後重新開機iptables服務
[root@openstack ~]# /etc/init.d/iptables restart
虛拟機VM上進行squid代理配置
隻需要在系統環境變量配置檔案/etc/profile裡添加下面一行即可(在檔案底部添加)
[root@vmserver001 ~]# vim /etc/profile
.......
export http_proxy=http://192.168.1.17:3128
[root@vmserver001 ~]#source /etc/profile #使上面的配置生效
測試虛拟機是否能對外通路:
[root@vmserver001 ~]# curl http://www.baidu.com #能正常對外通路
[root@vmserver001 ~]#yum list #yum能正常線上使用
[root@vmserver001 ~]#wget http://my.oschina.net/mingpeng/blog/293744 #能正常線上下載下傳
虛拟機對内的通路請求通過主控端iptables的nat端口轉發實作:
比如:
主控端:外網ip-111.101.186.163,内網ip-192.168.1.17
虛拟機1:ip-192.168.1.150
虛拟機2:ip-192.168.1.151
虛拟機3:ip-192.168.1.152
要求通過通路主控端的8088、8089、8090端口,分别nat轉發到虛拟機1、虛拟機2、虛拟機3的80端口
虛拟機的操作
1)關閉防火牆iptables
#/etc/init.d/iptables stop
#chkconfig iptables off
然後修改/etc/sysconfig/selinux裡的“SELINUX=disabled"
#setenforce 0
#getenforce
#reboot
2)将三台虛拟機的網關指向主控端的内網位址 (這一點很重要!)
#vim /etc/sysconfig/network-script/ifcfg-eth0
.....
GATEWAY=192.168.1.17
#/etc/init.d/network restart
主控端的操作
先開啟主控端的IP轉發功能:
[root@openstack ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
設定nat轉發規則
[root@kvmserver ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Tue Aug 16 09:48:24 2016
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [449:63333]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 6080 -j ACCEPT //6080端口為vnc服務端口,一定也要打開
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8088 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8089 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8090 -j ACCEPT
-A INPUT -s 192.168.1.0/24 -p tcp -m state --state NEW -m tcp --dport 3128 -j ACCEPT
#-A INPUT -j REJECT --reject-with icmp-host-prohibited //這兩行注釋掉,不然nat端口轉發的時候會有問題!
#-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Tue Aug 16 09:48:24 2016
*nat
:PREROUTING ACCEPT [9:32464]
:POSTROUTING ACCEPT [9:8580]
:OUTPUT ACCEPT [9:8580]
-A PREROUTING -p tcp -m tcp --dport 8088 -j DNAT --to-destination 192.168.1.150:80 //注意,DNAT規則一定要都放在SNAT規則之上!
-A PREROUTING -p tcp -m tcp --dport 8089 -j DNAT --to-destination 192.168.1.151:80
-A PREROUTING -p tcp -m tcp --dport 8090 -j DNAT --to-destination 192.168.1.152:80
-A POSTROUTING -d 192.168.1.150 -p tcp -m tcp --sport 80 -j SNAT --to-source 192.168.1.17
-A POSTROUTING -d 192.168.1.151 -p tcp -m tcp --sport 80 -j SNAT --to-source 192.168.1.17
-A POSTROUTING -d 192.168.1.152 -p tcp -m tcp --sport 80 -j SNAT --to-source 192.168.1.17
然後重新開機iptables,使之生效!
[root@openstack ~]#service iptables restart
******************************
或者在終端指令行操作:
[root@openstack ~]#iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8088 -j DNAT --to-destination 192.168.1.150:80
[root@openstack ~]#iptables -t nat -A POSTROUTING -d 192.168.1.150 -p tcp -m tcp --sport 80 -j SNAT --to-source 192.168.1.17
[root@openstack ~]#iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 8088 -j ACCEPT
[root@openstack ~]#iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8089 -j DNAT --to-destination 192.168.1.151:80
[root@openstack ~]#iptables -t nat -A POSTROUTING -d 192.168.1.151 -p tcp -m tcp --sport 80 -j SNAT --to-source 192.168.1.17
[root@openstack ~]#iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 8089 -j ACCEPT
[root@openstack ~]#iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8090 -j DNAT --to-destination 192.168.1.152:80
[root@openstack ~]#iptables -t nat -A POSTROUTING -d 192.168.1.152 -p tcp -m tcp --sport 80 -j SNAT --to-source 192.168.1.17
[root@openstack ~]#iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 8090 -j ACCEPT
儲存規則,然後重新開機iptables
[root@openstack ~]#service iptables save
#終端指令行裡添加規則後,要先save儲存,然後重新開機~
#/etc/sysconfig/iptables檔案裡添加規則後,要restart重新開機使之生效~
#檢視設定的規則
[root@openstack ~]#iptables -L #檢視filter表的規則
[root@openstack ~]#iptables -L -t nat #檢視nat表的規則
**********************
注意:
nat端口轉發設定成功後,記得在/etc/sysconfig/iptables檔案裡注釋掉下面兩行!不然nat轉發會有問題!一般如上面在nat轉發規則設定好并save和restart防火牆之後就會自動在/etc/sysconfig/iptables檔案裡删除掉下面兩行内容了。
#-A INPUT -j REJECT --reject-with icmp-host-prohibited
#-A FORWARD -j REJECT --reject-with icmp-host-prohibited
*********************************************************************************************
同樣的,如果是其他端口的nat轉發,比如想通路虛拟機1的資料接3306端口。
可以設定:主控端63306->虛拟機3306
主控端操作:
[root@openstack ~]#iptables -t nat -A PREROUTING -p tcp -m tcp --dport 63306 -j DNAT --to-destination 192.168.1.150:3306
[root@openstack ~]#iptables -t nat -A POSTROUTING -d 192.168.1.150 -p tcp -m tcp --dport 3306 -j SNAT --to-source 192.168.1.17
[root@openstack ~]#iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 63306 -j ACCEPT #防火牆放行63306端口
[root@openstack ~]#/etc/init.d/iptables save
[root@openstack ~]#/etc/init.d/iptables restart
虛拟機需要提前在mysql裡授權給主控端
如上面通路主控端8080端口轉發到虛拟機的80端口,除了上面使用iptables的nat轉發規則實作,也可以使用nginx的proxy_pass反向代理實作。
在主控端的nginx配置如下:
[root@bastion-IDC ~]# cat /Data/app/nginx/conf/vhosts/80-vm.conf
server {
listen 8088;
server_name localhost;
location / {
root /opt/;
index index.html index.htm;
proxy_pass http://192.168.1.150/;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
重新開機nginx服務,iptables開放8080端口
這樣,通路主控端8080,即http://111.101.186.163:8080顯示結果就是http://192.168.1.150的結果
***********************************************
除了用nginx反向代理,還可以使用haproxy反向代理(在其他篇章中有介紹)
***************當你發現自己的才華撐不起野心時,就請安靜下來學習吧***************
本文轉自散盡浮華部落格園部落格,原文連結:http://www.cnblogs.com/kevingrace/p/5753193.html,如需轉載請自行聯系原作者