继下面三篇文章完成了kvm虚拟化管理平台webvirtmgr环境的部署安装:
kvm虚拟化管理平台WebVirtMgr部署-虚拟化环境安装-完整记录(0)
kvm虚拟化管理平台WebVirtMgr部署-完整记录(1)
kvm虚拟化管理平台WebVirtMgr部署-完整记录(2)

一般情况下,虚拟机(下面称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
valid_lft forever preferred_lft forever
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
valid_lft forever preferred_lft forever
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
link/ether 44:a8:42:21:a6:01 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.17/24 brd 192.168.1.255 scope global br0
inet6 fe80::46a8:42ff:fe21:a601/64 scope link
valid_lft forever preferred_lft forever
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
valid_lft forever preferred_lft forever

[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代理;
如果是https的squid代理,可以参考我的另一篇技术博客内容:squid代理http和https方式上网的操作记录
---------------------------------------------------------------------------------------------------------

宿主机的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
# Generated by iptables-save v1.4.7 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
COMMIT
# Completed on Tue Aug 16 09:48:24 2016

然后重启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

[root@openstack ~]#service iptables restart

#终端命令行里添加规则后,要先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反向代理(在其他篇章中有介绍)

kvm虚拟化管理平台WebVirtMgr部署-完整记录(3)的更多相关文章

  1. kvm虚拟化管理平台WebVirtMgr部署-完整记录(2)

    继上一篇kvm虚拟化管理平台WebVirtMgr部署-完整记录(1),接下来说说WebVirtMgr的日常配置:添加宿主机,创建虚机,磁盘扩容,快照等具体操作记录如下: 一.配置宿主机1.登录WebV ...

  2. kvm虚拟化管理平台WebVirtMgr部署-完整记录(1)

    公司机房有一台2U的服务器(64G内存,32核),由于近期新增业务比较多,测试机也要新增,服务器资源十分有限.所以打算在这台2U服务器上部署kvm虚拟化,虚出多台VM出来,以应对新的测试需求.当KVM ...

  3. kvm虚拟化管理平台WebVirtMgr部署-完整记录(0)

    打算部署kvm虚拟机环境,下面是虚拟化部署前的一些准备工作: 操作系统环境安装1)修改内核模式为兼容内核启动[root@ops ~]# uname -aLinux openstack 2.6.32-4 ...

  4. kvm虚拟化管理平台WebVirtMgr部署-完整记录(安装ubuntu虚拟机)-(5)

    之前介绍了在webvirtmgr平台下创建centos,windows server 2008的虚拟机,今天说下创建ubuntu虚拟机的过程. (1)首先下载ubuntu16.04的iso镜像放到/u ...

  5. kvm虚拟化管理平台WebVirtMgr部署-完整记录(安装Windows虚拟机)-(4)

    一.背景说明  在之前的篇章中,提到在webvirtmgr里安装linux系统的vm,下面说下安装windows系统虚拟机的操作记录: 由于KVM管理虚拟机的硬盘和网卡需要virtio驱动,linux ...

  6. 008-kvm虚拟化管理平台WebVirtMgr部署-完整记录(1)

    公司机房有一台2U的服务器(64G内存,32核),由于近期新增业务比较多,测试机也要新增,服务器资源十分有限.所以打算在这台2U服务器上部署kvm虚拟化,虚出多台VM出来,以应对新的测试需求. 当KV ...

  7. KVM虚拟化管理平台WebVirtMgr部署及使用

    KVM虚拟化管理平台WebVirtMgr部署及使用   需求: 公司机房有一台2U的服务器(64G内存,32核),由于近期新增业务比较多,测试机也要新增,服务器资源十分有限.所以打算在这台2U服务器上 ...

  8. centos7.2 kvm虚拟化管理平台WebVirtMgr部署

    在服务器上部署kvm虚拟化,虚出多台VM出来,以应对新的测试需求.当KVM宿主机越来越多,需要对宿主机的状态进行调控,决定采用WebVirtMgr作为kvm虚拟化的web管理工具,图形化的WEB,让人 ...

  9. [原创]KVM虚拟化管理平台的实现

    KVM虚拟化管理平台的实现 源码链接:https://github.com/wsjhk/IaaS_admin.git 根据KVM虚拟化管理的要求,设计并实现网页操作管理KVM虚拟机.设计原理架构如下图 ...

随机推荐

  1. Vue2 框架开发的单页程序页面首次加载慢的原因与优化方案

    在用Vue2 框架进行单页面开发时,开发完成后项目打包到线上环境,发现vendor脚本有963K,app.css文件也有四百多k,用户第一次打开网页加载这两个文件要十多秒,会使页面白屏十多秒,之后再次 ...

  2. Asp.Net WebApi Get请求整理(一)

    Asp.Net WebApi+JQuery Ajax的Get请求整理 一.总结 1.Asp.Net WebApi默认不支持Get请求,需要在Action方法上指定[HttpGet], 除非Action ...

  3. ubuntu通过apt-get安装JDK8

    安装python-software-properties apt-get install python-software-properties apt-get install software-pro ...

  4. 02LaTeX学习系列之---TeX环境的搭建

    目录 02Latex的下载与安装及其编译IDE 目录 前言 (一)Tex Live的下载 1. Tex Live官方下载网站: (二)TeXStudio 1.TeXStudio官网下载 2.TeXSt ...

  5. Alpha冲刺! Day12 - 砍柴

    Alpha冲刺! Day12 - 砍柴 今日已完成 晨瑶:终于更了 Gitkraken 团队协作教程. 昭锡:初步学习了解Android动画. 永盛:用户逻辑基本完成. 立强:从众多开源库中找到两个合 ...

  6. 关于HashMap自定义key重写hashCode和equals的问题

     使用HashMap,如果key是自定义的类,就必须重写hashcode()和equals() hashcode()和equals()都继承于object,在Object类中的定义为: equals( ...

  7. [零基础学python]为什么要开设本栏目

    这个栏目的名称叫做"零基础学Python". 如今网上已经有不少学习python的课程.当中也不乏精品.按理说,不缺少我这个基础类型的课程了.可是,我注意到一个问题.无论是课程还是 ...

  8. 修改CentOS 7.2系统的主机名

    之前使用网上的大部分说法,修改了两个配置文件: /etc/hosts /etc/sysconfig/network 然后,并没有什么卵用. 后来,搜阿里云配置,看到这个办法: 使用“经典网络”类型的E ...

  9. 【转】BASE64编码简介

    BASE64是一种编码方式,通常用于把二进制数据编码为可写的字符形式的数据. 这是一种可逆的编码方式. 编码后的数据是一个字符串,其中包含的字符为:A-Z.a-z.0-9.+./ 共64个字符:26 ...

  10. PHP开发小技巧③—实现多维数组转化为一维数组

    在平常的项目开发中我们多会用到让多维数组转化为一维数组的情况,但是很多Programmer不会将其进行转化,也有些没有想到很好的算法然后经过乱起八糟的运算方式将其勉强转化好,但是所写的程序代码冗余非常 ...