centos7,无图形化界面下使用kvm及网络设置和端口映射。

centos7,无图形化界面下使用kvm及网络设置和端口映射。

 

说明:此操作环境为CENTOS7无图形界面环境下,ubuntu 8也可以进行参考。

 

 

第一步: 检测环境。

    查看CPU是否支持虚拟化,如果不行自行进bios开启虚拟化。

lscpu | grep Virtualization    

 

第二步:安装kvm及相关。

yum install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install

    此步操作完成后,reboot一下。

 

第三步: 创建虚拟机

    请先开启转发功能,创建的虚机才可上网:

vi /etc/sysctl.conf

    将net.ipv4.ip_forward=0更改为net.ipv4.ip_forward=1 ,并取消掉前面的注视符“#”

    如果没有就增加内容。

    以下为创建NAT模式虚机,想了解与桥接的区别和如何设置为桥接,请自行放狗。

virt-install -n winxp --description "winxp" \
    --os-type=win\
    --os-variant=winxp\
    --ram=1024 --vcpus=1\
    --disk path=/home/kvm/winxp.img,size=10\
    --network default\
    --accelerate\
    --graphics vnc,listen=0.0.0.0,keymap=en-us\
    --cdrom=/home/bingxp.iso
    
    #第4行,设置内存以及CPU。
    #第5行为设置虚机磁盘文件路径以及大小,10为10GB
    #第6行为NAT模式。

    此时虚拟机已经建立并启动

 

第四步: 通过vnc给虚机安装OS。

    #如VNC可直接连接成功,可以跳过此步,第五步为:解决连接vnc后无法从光盘引导安装OS,。

    上面说过,虚机已经创建成功并启动,默认vnc端口为5900。监听ip为宿主IP,在配置文件中体现为:0.0.0.0。

    但centos7默认开启防火墙,5900端口被屏蔽。建议关闭防火墙:

systemctl stop firewalld #临时关闭
systemctl disable firewalld #禁止开机

    如果没有手动修改过vnc端口但连不上,请先检查虚机是否已经开启:

virsh list --all # 列出全部虚机并显示其状态。    

    如果主机开启并仍无法连接。

    可以执行如下代码查询具体vnc端口:

virsh vncdisplay winxp    

    默认返回结果为0,或者1等自然整数。

    例如:第一台虚机为0,既5900+0=5900, 第二胎虚机为1,既5900+1=5901, 以此类推。

    如果手动指定为20001,那么查询结果既为20001。

 

第五步:虚拟机配置。

    创建好虚机后,默认配置是从硬盘启动,并非从CDROM引导。

    可以先将虚机强行关闭:

virsh destroy winxp

    然后进行编辑:

virsh edit winxp

  此时默认为vi编辑winxp.xml

  配置文件更改为从光驱引导:


更改为:

 

    检查并添加ISO路径。

  检查内,是否有要加载的iso文件路径。
  具体示例如下:


      
      
      
      
      
    

 

    以下为修改VNC配置示例供参考:


更改为:

#自动获取端口改为no,端口改为2008,增加vnc密码。

    wq后,需要重新加载xml文件,然后启动虚机。

virsh define /etc/libvirt/qemu/winxp.xml
virsh start winxp #启动虚机

 

第六步:设置虚机DHCP地址。

    #虚机可以手动设置网卡IP,手动设置网卡IP的可以略过此步。

    编辑kvm的网络配置文件:

vi /etc/libvirt/qemu/networks/default.xml

    获得虚机的mac地址后,可以参照如下示例进行配置(kvm默认网段为:192.168.122.0/24):


      
      

 

第七步:端口转发

 

    下面均为介绍iptables相关内容,如果愿意使用rinetd或者其他的工具,或者使用桥接模式的,可以不用看了。

    如果需要远程管理我们可以使用自带的vnc,但如果认为vnc不如系统自带的3389或ssh方便,我们可将NAT网络内的端口转发出来。

        操作完上面第三步内开启转发的功能后,进行如下操作。

    注:第四步已经将防火墙关闭,现在是在关闭防火墙的环境下操作,如果要开启防火墙,请自行检查iptables规则是否与防火墙冲突。

    下面两条规则为将宿主机的2009端口,自动转发到虚机的3389端口。

iptables -t nat -A PREROUTING -p tcp --dport 2009 -j DNAT --to-destination 192.168.122.101:3389
iptables -t nat -A POSTROUTING -p tcp --dport 2009 -d 192.168.122.101 -j SNAT --to 192.168.122.1

       

    开启转发后一直不通,因为对iptables不熟,这个坑了我2天,网上查询资料后,终于解决。因为默有两条拒绝规则,删除即可。

    首先将规则列出:

iptables -nL -v --line-numbers -t filter

    会有两条如下规则:

4        7   420 REJECT     all  —  *      virbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

5        0     0 REJECT     all  —  virbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

 

    然后删除这两条规则,删除两次第四条即可,因为删除第四条后,第五条又变成第四条了。

iptables -D FORWARD 4 -t filter   #删除编号为4的FORWARD规则

 

    然后进行保存并重启iptables服务:

service iptables save #保存规则
service iptables resart #重启服务

    转发端口即可工作了。

 

    下面要有一个大坑介绍。

    我们上面已经了“save”保存了,但宿主机重启后,iptables自行恢复,屏蔽规则也恢复了,端口转发又无法工作了。

    因为在centos7下,需要把配置写入文件,然后开机后再从配置文件读取才可以。目前只找到这个方法。

iptables-save > /etc/sysconfig/iptables #文件路径可自行指定。

    在 /etc/rc.local内加入如下内容;

iptables-restore < /etc/sysconfig/iptables
service iptables save
service iptables restart

好了,现在全部搞定了!!

 

另外由于宿主机映射到外网的端口是由网管分配,附一条转发本地ssh端口的iptables规则。

-A PREROUTING -p tcp -m tcp --dport 3000 -j REDIRECT --to-ports 22

以下为本文的参考链接,感谢这些作者,排名不分先后:

 

如何在 CentOS 7 / RHEL 7 终端服务器上安装 KVM

linux kvm 虚拟机 nat 网络 iptables 宿主机端口转发到虚拟机

CentOS7安装iptables防火墙

linux下用iptables做本机端口转发方法

 

你可能感兴趣的:(centos7,无图形化界面下使用kvm及网络设置和端口映射。)