教程:CentOS服务器安装windows虚拟机(NAT版),解决KVM中windows10安装蓝屏的问题
因为经常能弄到的服务器都是 1 个 IP 的 . 但又想用 windows 怎么办呢 ? 其实可以通过安装虚拟机的方式来实现 . 今天主要就来介绍下 , 就一个 IP 的时候 , 怎么安装 windows 虚拟机 , 并且通过 NAT 的方式来实现端口转换 .
建议安装 Centos6. Centos7 的 firewalld 有部分命令还是需要用到 iptables 命令来实现端口转发 , 没有 centos6 那么方便 . 以下的教程是基于 Centos6.
另外 , 请不要在 VPS 上进行任何尝试 …. 一般被抓到玩虚拟机就是被封号 ..
第一步 : 安装环境
1
|
yum –y install qemu–kvm libvirt python–virtinst bridge–utils avahi dmidecode virt–viewer virt–install
|
第二步 : 配置桥接网络
先拷贝一份目前的网络配置文件 , 命名为 ifcfg-br0
1
|
cp /etc/sysconfig/network–scripts/ifcfg–eth0 /etc/sysconfig/network–scripts/ifcfg–br0
|
配置 ifcfg-br0. 首先确保下面两行的 . 如果没有的话 , 就在末尾加入就可以了 . 其他的信息不需要动
1
2
|
TYPE=Bridge
DEVICE=br0
|
修改原网卡的配置文件 ifcfg-eth0. 只需要修改下面两行信息 , 如果没有 , 就在末尾加入 , 其他也不需要动 .
1
2
|
BRIDGE=br0
NM_CONTROLLED=no
|
重启下网络
1
|
service network restart
|
第三步 : 修改一些配置文件
开启 VNC, 方便使用 vnc 进行连接安装
vim /etc/libvirt/qemu.conf
把 vnc_listen = "0.0.0.0"
前面的注释 # 去掉
启动 libvirt 等相关服务 .
1
2
3
|
/etc/init.d/messagebus restart
/etc/init.d/avahi–daemon restart
/etc/init.d/libvirtd restart
|
开启 IPv4 的转发
vim /etc/sysctl.conf
把 net.ipv4.ip_forward = 1
值原来是 0, 改成 1
执行命令 sysctl -p
使配置生效
关闭 selinux
vim /etc/selinux/config
修改为 :SELINUX=disabled
重启生效 .
第四步 : 准备好系统的 ISO
带 virtio 驱动的 windows 的 ISO
第五步 : 创建系统需要的硬盘文件
1
|
qemu–img create –f qcow2 /home/kvm/win10.qcow2 100G
|
win10.qcow2
是文件名 , 你可以自行修改 , 后面安装命令会用到
100G
是硬盘大小 , 你可以自行修改
第六步 : 使用 virsh-install 开始安装 windows
1
2
3
4
5
6
7
8
9
10
11
12
13
|
virt–install \
—hvm \
—name win10 \
—ram 2048 \
—vcpus=2 \
—cpu host \
—accelerate \
—network network=default,model=virtio \
—cdrom=/home/iso/win10.iso \
—disk path=/home/kvm/win2010.qcow2,format=qcow2,sparse=true,cache=none,bus=virtio \
—graphics vnc,listen=0.0.0.0,port=5901,password=91yun \
—os–type=windows \
—autostart
|
以下是你需要自行修改的参数说明 :
--name win10
这里的 win10 是虚拟机的名字 , 你可以自行修改
--ram 2048
给虚拟机 2048M 内存 (2G), 你可以自行修改
--vcpus=2
给虚拟机分配 2 个 CPU 核心 , 你可以自行修改
--cpu host
这个选项是安装 windows10 专用的 , 因为 windows 不支持很多老的虚拟化的 CPU, 如果安装 windows10 使用了这个选项依然安装的时候蓝屏 , 就把这个选项改成 --cpu core2duo
就是使用 core2duo 的 cpu 配置 . 如果是老的 win2008,win2012 或者 linux, 可以不需要这个选项 .
--cdrom=/home/iso/win10.iso
指定安装的 iso 地址 . 请自行修改
--disk path=/home/kvm/win10.qcow2
在第五步生成的硬盘文件地址 , 请自行修改
--graphics vnc,listen=0.0.0.0,port=5901,password=91yun
这里的 5901 是虚拟机的 vnc 端口 , 每个虚拟机请分配不同的端口 . password 是设置 vnc 连接使用的密码 , 请自行修改 .
--os-type=windows
如果你安装的是 linux 就把这个改成 linux 就可以了
第七步 : 通过 VNC 来安装系统
vnc 的下载地址 :https://www.realvnc.com/en/connect/download/viewer/
输入你的 服务器地址 : 端口
即可访问你的虚拟机了
如果连不上虚拟机 , 请确认你的 vnc 端口已经在防火墙里面通过 . 通过命令是 :iptables -A INPUT -p tcp --dport 5901 -j ACCEPT
虚拟机安装完系统第一次重启的时候 , 不会自动起来 , 你需要在服务器上执行 virsh start win10
来唤醒虚拟机 . 这个 win10 就是你上面安装代码设置的 –name
第八步 : 配置防火墙 iptables
执行
1
2
3
|
iptables –t nat –A POSTROUTING –o br0 –j MASQUERADE
service iptables save
service iptables restart
|
如果你不需要端口转发 , 那么你执行完这个 iptables 命令 , 你的 windows 虚拟机就已经可以上网了 .
如果你需要端口转发 , 比如需要通过 3389 端口使用远程桌面连接连接你的 windows 虚拟机 . 那么你需要执行以下代码 .
NAT 端口转发设置
首先执行 :
1
|
iptables –I FORWARD –o virbr0 –d 192.168.122.111 –j ACCEPT
|
需要注意的是 , 这里的 192.168.122.111 是你虚拟机的 IP, 如果你需要端口转发 , 建议在虚拟机里面设置成固定 IP, 而不是 dhcp 获取 . 否则你虚拟机 ip 变了就又连不上了 .
下面是一个代码段 , 有要开放的端口都可以依次设置 . 比如要开放 3389, 那么 iptables 命令就是 : 192.168.122.111 是虚拟机的 ip
1
2
3
4
|
iptables –A INPUT –p tcp —dport 3389 –j ACCEPT
iptables –t nat –A PREROUTING –p tcp –m tcp –i br0 —dport 3389 –j DNAT —to–destination192.168.122.111:3389
service iptables save
service iptables restart
|
如果你想把服务器的 2222 端口转发到虚拟机的 22 端口 . 那么就执行
1
2
3
4
|
iptables –A INPUT –p tcp —dport 2222 –j ACCEPT
iptables –t nat –A PREROUTING –p tcp –m tcp –i br0 —dport 2222 –j DNAT —to–destination192.168.122.111:22
service iptables save
service iptables restart
|
ok, 这样你的端口就转发成功了 .
最后 , 虚拟机管理 virsh 命令的常用使用
virsh start 虚拟机
: 启动虚拟机 , 比如 virsh start win10
virsh destroy 虚拟机
: 强制关闭虚拟机 , 比如 virsh destroy win10
最后的最后 : 常见问题解答
如果你通过 vnc 连接虚拟机的时候 ,vnc 闪退 .
虚拟机的属性设置 (properties)>>Expert>>ColorLevel 设置成 full
如果你通过 vnc 连接虚拟机的时候 ,vnc 显示 “ZlibInStream:Inflate Failed/ZlibInStream :exceeded bytesIn” 错误
调整画面质量即可解决 :Options -> General -> Picture quality -> Low