[虚拟化-KVM] · 从kvm环境到vps通网

发布于 2021-09-11  628 次阅读


这个系列本来想水到3篇左右。
但实在没什么好填充的,还不如简单明了一命通关。


# Info.

KVM是什么?linux的开源虚拟机环境,其他无须赘述。
直入正题,本文将详细描述以下几个方面,全程命令行操作:

  • kvm环境搭建
  • 创建vps
  • NAT联网
  • vps管理

# Do it.

实验环境及准备工作:
- centos7.6_8h32g_开启虚拟化
- win10_LTSC.iso

Part.1 部署kvm环境

1. 安装基本组件

yum install qemu-kvm libvirt virt-install bridge-utils -y

2. 验证安装,如下所示即成功

lsmod | grep kvm

3. 启动kvm,设置自启

systemctl restart libvirtd
systemctl enable libvirtd
systemctl status libvirtd

4. 网络组状态

这部分与桥接有关,可能会出问题
设置并启用默认网络组
virsh net-define /usr/share/libvirt/networks/default.xml
virsh net-start default
virsh net-list

5. 预备虚拟机硬盘文件路径,随便mk一个dir

mkdir /root/kvmdisk


Part.2 安装kvm虚拟机

1. 挂载镜像(好像可以不用挂载,未测试)

挂载 win10_LTSC.iso 到/mnt/usb1,但实际调用是用 /dev/loop0,可通过df -h查看

mkdir /mnt/usb1
mount -o loop /path/to/iso/windows_10_LTSC.iso /mnt/usb1/

2. 创建虚拟机磁盘

qemu-img create -f qcow2 /root/kvmdisk/win1.img 80G

3. 创建机器

使用virt-install命令创建机器,可选参数比较多,可以参考:命令参数

超长的一句命令。:

virt-install --virt-type kvm --name win1 --memory 4096 --cdrom=/dev/loop0 --boot cdrom --disk path=/root/kvmdisk/win1.img,bus='ide' --cpu host-model-only --network=default,model='e1000' --graphics vnc,listen=0.0.0.0,port=5901 --vcpus 8 --noautoconsole --os-type=windows

命令参数释义,根据实际情况和需要逐条微调:

virt-install 
--virt-type kvm  #虚拟机类型
--name win1  #虚拟机名称
--memory 4096  #内存分配,单位MB
--cdrom=/dev/loop0  #cdrom路径
--boot cdrom  #启动方式
--disk path=/root/kvmdisk/win1.img,bus='ide'  #虚拟机磁盘路径
--cpu host-model-only  #cpu属性
--network=default,model='e1000'  #网络组和网卡型号
--graphics vnc,listen=0.0.0.0,port=5901  #vnc设置,0000监听母鸡所有ip,密码在后续配置
--vcpus 8  #cpu核数
--noautoconsole  #无控制台模式? 具体看网络文档解释
--os-type=windows  #系统类型

执行成功会返回 开始/正在安装
执行失败会有相应报错,根据实际报错修改命令(或环境,比如虚拟化)

4. (可选)VNC密码

由于本操作在公网上进行,所以需要添加vnc密码。
vnc配置也可在上边的创建命令中添加,但多次尝试失败,遂创建完后再修改配置文件

编辑win1配置文件
virsh edit win1
找到vnc行,加入 passwd="xxxxxxx" ,保存退出,该vps关机再开机即可重载配置文件

<graphics type='vnc' passwd='mima123' port='5901' autoport='yes' listen='0.0.0.0'>

5. 可能存在问题:cpu核数

虽然不修改也能用,但还是多核看起来舒服些
virsh edit win1

....
<cpu mode='host-passthrough' check='none'>
    <topology sockets='1' cores='4' threads='4'></topology>
</cpu>
....

<!--
mode=cpu型号
sockets=cpu插槽数
cores=总核心数
threads=线程数
-->

Part.3 网络配置(NAT)

NAT方式能让vps用内网地址上网
因涉及到流量转发,这里采用iptables控制

1. 母鸡开启转发

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p

2. 关闭、屏蔽 firewalld

systemctl stop firewalld
systemctl disable firewalld
systemctl mask firewalld

3. 安装iptables

yum -y install iptables-services*

(可选) 新安装的iptables 清除默认配置

iptables -F
iptables -t nat -F

4. 开放vps的vnc、远程端口,以及母鸡的常用端口

iptables -A INPUT -p tcp -m tcp --dport 5901 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 50001 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

5. 转发设置

注意修改 vps内网ip母鸡出口ip
NAT转发
iptables -t nat -A POSTROUTING -s vps内网ip -o em1 -j SNAT --to-source 母鸡出口ip
端口转发,例如远程端口3389
iptables -t nat -A PREROUTING -p tcp -d 母鸡出口ip --dport 转发端口 -j DNAT --to-destination vps内网ip:3389

保存重启
service iptables save
service iptables restart


Part.4 常用 virsh 管理命令

参考:virsh命令

常用命令:

  • 编辑配置:virsh edit win1
  • 软关机:virsh shutdown win1
  • 硬关机:virsh destroy win1
  • 删除:virsh undefine win1
  • 开机:virsh start win1
  • 挂起:virsh suspend win1
  • 恢复:virsh resume
  • 增加内存:virsh setmem win1 4G

快照操作:

  • 创建
    virsh snapshot-create-as win1 快照名
  • 查看快照列表和信息
    virsh snapshot-list win1
    virsh snapshot-info win1 快照名
  • 恢复
    virsh snapshot-revert win1 快照名
  • 删除
    virsh snapshot-delete win1 快照名

Q.E.D