目录
一、环境准备
1、确认系统是否支持虚拟化确认
2、安装Centos7图形化界面
3、安装VNC_Server
4、安装VNC_Client
5、上传测试镜像
二、安装KVM
三、使用上传的镜像创建虚拟机
四、配置KVM创建虚拟机的上网方式
1、桥接(Bridge)方式
A:配置前网卡信息
B:开始配置网桥(Bridge)
C:添加网卡(Bridge)
D:通讯测试
E:Bridge模式网络拓扑图
2、默认(Nat)方式
A、添加网卡(Nat)
B、通讯测试
C:KVM与宿主机同局域网的其它主机通讯
D:Nat模式网络拓扑图
五、遇到的坑点
一、环境准备
1、确认系统是否支持虚拟化确认
grep -E -o 'vmx|baisvm' /proc/cpuinfo
说明:
VMX代表Intel的虚拟化技术Intel-VT,也说明你的服务器CPU是英特尔的。SVM代表AMD的虚拟化技术AMD-V
2、安装Centos7图形化界面
yum groupinstall "GNOME Desktop" "Graphical Administration Tools"
ln -sf /lib/systemd/system/runlevel5.target /etc/systemd/system/default.target
reboot
3、安装VNC_Server
#安装服务端
yum -y install vnc *vnc-server*
#修改配置文件
vim /etc/sysconfig/vncservers
#文件最下面添加以下内容,添加后保存退出
VNCSERVERS="1:root"
#为VNC设置密码
vncpasswd
#启动VNC服务端
vncserver
4、安装VNC_Client
下载安装完后,参考以下方式登录
说明:
如果VNC客户端连接不上,确认VNC服务端正常启动的情况下,需要检查下服务器的防火墙情况,确认服务器中防火墙关闭或者开启的情况下放通了默认的5901端口
5、上传测试镜像
这里使用的镜像如下
二、安装KVM
说明:
安装前关闭iptables或firewalld、关闭SELinux、如果其它安全软件也关闭。
#安装 kvm 工具
yum -y install qemu-kvm python-virtinst libvirt libvirt-python virt-manager libguestfs-tools bridge-utils virt-install
#开启KVM
systemctl start libvirtd.service
#设置开机自启动
systemctl enable libvirtd.service
三、使用上传的镜像创建虚拟机
图形化安装,这里不再赘述
安装完成,并可以成功登录
四、配置KVM创建虚拟机的上网方式
1、桥接(Bridge)方式
A:配置前网卡信息
配置前最原始的网卡(enp0s25)配置文件内容如下:
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s25
UUID=b24bc5b6-137c-4f6a-98a3-00c4d742dcf4
DEVICE=enp0s25
ONBOOT=no
配置前的网卡如下:
ip a
配置前的流量走向,可以看到流量走的是enp0s25的这块网卡
B:开始配置网桥(Bridge)
将网卡enp0s25的内容替换为以下内容:
vim /etc/sysconfig/network-scripts/ifcfg-enp0s25
BOOTPROTO=none
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
DEVICE=enp0s25
NAME=enp0s25
BRIDGE=br0
新建网桥br0并写入如下内容:
vim /etc/sysconfig/network-scripts/ifcfg-br0
BOOTPROTO=static
DEVICE=br0
TYPE=Bridge
IPADDR=192.168.2.108
NETMASK=255.255.255.0
GATEWAY=192.168.2.1
ONBOOT=yes
NM_CONTROLLED=no
DNS=114.114.114.114
重启网卡:
systemctl restart network
再看下网卡配置
看下路由
route -n
可以看到流量走网桥(br0)了
C:添加网卡(Bridge)
如果写一个不存在的网桥名称启动虚拟机会报错。
删除错误的网卡后,启动虚拟机,查看网卡信息。
可以看到虚拟机内部网络没有问题,也可以访问公网。但是绝大部分情况下,我们是需要虚拟机与虚拟机之间通过“内网”通讯的,所以我们需要知道每个虚拟机的IP地址(动态IP不便于管理),虚拟机创建后默认的IP地址获取方式是DHCP的,那么需要我们给每个虚拟机配置一个静态IP,问题来了,静态IP怎么确认呢?
1、我们使用的是网桥(Bridge)的方式
2、宿主机的网络如下(192.168.2.108/24)
我们在地址池内选择一个IP地址给新创建的虚拟机配置下(如:192.168.2.120)
vi /etc/sysconfig/network-scripts/ifcfg-ens3
#配置静态IP前虚拟机网卡内容
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=2133e472-4ebb-4c1e-9231-e54f083f0a52
DEVICE=eth0
ONBOOT=no
替换成下面的静态IP内容,并重启网卡
BOOTPROTO=static
DEVICE=ens3
TYPE=Ethernet
IPADDR=192.168.2.120
NETMASK=255.255.255.0
GATEWAY=192.168.2.1
ONBOOT=yes
NM_CONTROLLED=no
DNS=114.114.114.114
systemctl restart network
重新看下IP地址 ,可以看到从之前的192.168.2.108/24更改为了192.168.2.120/24,并且这个正常上网。
使用同样的方式创建另一个虚拟机KVM2,创建后可以使用以下命令查看KVM1和KVM2 与 网桥br0之间的关系
brctl show
D:通讯测试
到这里,我们实现了:
虚拟机与宿主机之间、虚拟机与虚拟机之间、虚拟机与同一个局域网下的其它主机与虚拟机之间的内网通信,如下。
E:Bridge模式网络拓扑图
另外,我们通过TP-Link提供的网络拓扑图来看,上面的Windows机器,Centos宿主机,KVM1、KVM2都是在一个网络环境下,所以其互相之间内网通讯也是正常的。
2、默认(Nat)方式
NAT(Network Address Translation网络地址翻译),NAT方式是kvm安装后的默认方式。它支持主机与虚拟机的互访,同时也支持虚拟机访问互联网,但不支持外界访问虚拟机。
A、添加网卡(Nat)
看下使用Nat的方式创建的KVM1与KVM2的网卡情况
brctl show
说明:
virbr0是由宿主机虚拟机支持模块安装时产生的虚拟网络接口,也是一个switch和bridge,负责把内容分发到各虚拟机。
B、通讯测试
C:KVM与宿主机同局域网的其它主机通讯
问题:
通过Nat网络形式创建KVM,KVM1可以与KVM2通讯,宿主机也可以和KVM1/2通讯,但是由于不在同一个网段,宿主机创建的KVM是无法与宿主机同网段内的其它机器“内网”通讯的,如果需要KVM和宿主机所在网段的其它机器通讯,参考以下方式
1、开启宿主机的内核的IP转发功能
#立即生效
echo "1" > /proc/sys/net/ipv4/ip_forward
#开启转发,net.ipv4.ip_forward = 0 #0为关闭,1为开启
vim /etc/sysctl.conf
#生效
sysctl -p
2、配置宿主机的iptables 端口转发功能,实现局域网的其它主机登录到宿主机创建的KVM中
iptables -t nat -A PREROUTING -p tcp --dport 25689 -j DNAT --to-destination 192.168.122.135:22
iptables -t nat -A POSTROUTING -p tcp --dport 25689 -d 192.168.122.135 -j SNAT --to 192.168.122.1
3、登录测试,KVM1在局域网的其它主机中成功登录(iptables转发没有问题)
D:Nat模式网络拓扑图
五、遇到的坑点
1、Bridge模式中虚拟机KVM设置的静态IP无法上网
2、Nat模式中宿主机开启了iptables端口转发功能后,宿主机端口无法成功转到虚拟机KVM1的端口。