因为需要败了一台实体香港服务器。同时呢因为特殊需求需要在服务器上装个windows server 2019
废话不多说 走起
kvm这玩意我不是很懂。在加上服务器的系统没有UI界面。所以最好由个web系统来管理虚拟机。找来找去相中了 webvirtcloud这个开源项目,因为新。。我喜欢新的 八百年没人维护的项目不敢用。。
项目地址:https://github.com/retspen/webvirtcloud
readme有安装说明。。不过这玩意按照作者的安装说明装完了有权限问题。。。第一次安装失败了 各种报错找不到原因的大坑。。这次调整方案(下面是官方的安装方式)
Install WebVirtCloud panel (Ubuntu 18.04+ LTS):

sudo apt-get -y install git virtualenv python3-virtualenv python3-dev python3-lxml libvirt-dev zlib1g-dev libxslt1-dev nginx supervisor libsasl2-modules gcc pkg-config python3-guestfs libsasl2-dev libldap2-dev libssl-dev
git clone https://github.com/retspen/webvirtcloud
cd webvirtcloud
cp webvirtcloud/settings.py.template webvirtcloud/settings.py
# now put secret key to webvirtcloud/settings.py
sudo cp conf/supervisor/webvirtcloud.conf /etc/supervisor/conf.d
sudo cp conf/nginx/webvirtcloud.conf /etc/nginx/conf.d
cd ..
sudo mv webvirtcloud /srv
sudo chown -R www-data:www-data /srv/webvirtcloud
cd /srv/webvirtcloud
virtualenv -p python3 venv
source venv/bin/activate
pip install -r conf/requirements.txt
python3 manage.py migrate
python3 manage.py collectstatic --noinput
sudo chown -R www-data:www-data /srv/webvirtcloud
sudo rm /etc/nginx/sites-enabled/default

看到了需要用到www-data这个用户。。
因为服务器登录直接是root用户 懒得再搞其他用户了 直接用这个www-data吧。我是Debian 记得装 sudo .

apt install sudo

需要切换到 www-data用户 。但是这个内置的用户是无法登录的 所以
因为我又比较懒 搞了个宝塔面板。。所以上面的命令需要调整一下(如果没有www-data可能是因为没装nginx 用宝塔装一个)

vi /etc/passwd	

在这里插入图片描述
原来啥样的忘记了。。反正我就改成这个样子了
记得给www-data弄个密码 要不sodu命令用不了

sudo apt-get -y install git virtualenv python3-virtualenv python3-dev python3-lxml libvirt-dev zlib1g-dev libxslt1-dev libsasl2-modules gcc pkg-config python3-guestfs libsasl2-dev libldap2-dev libssl-dev 
# 将nginx和 supervisor 暂时删掉 因为宝塔里有。。而且还再用着  怕冲突
git clone https://github.com/retspen/webvirtcloud
cd webvirtcloud
cp webvirtcloud/settings.py.template webvirtcloud/settings.py
cd ..
sudo mv webvirtcloud /srv
sudo chown -R www-data:www-data /srv/webvirtcloud
cd /srv/webvirtcloud
virtualenv -p python3 venv
source venv/bin/activate
pip install -r conf/requirements.txt
python3 manage.py migrate
python3 manage.py collectstatic --noinput
sudo chown -R www-data:www-data /srv/webvirtcloud
#python 如果报错有依赖问题就把markdown降低一下版本 装的时候没截图就不放了

去宝塔创建个web
在这里插入图片描述

记得换成自己的域名并且解析。
在这里插入图片描述
确认以后点config 中文版忘记叫啥了。。我讨厌绑定手机号 。。所以就用个英文版。。要是英文的也绑手机号我就不用面板了。或者自己写一套
在这里插入图片描述

server {
    listen 80;

    server_name kvm.xxx.com;
    #access_log /var/log/nginx/webvirtcloud-access_log; 
    access_log  /home/www-data/webvircloudlogs/kvm.xxx.com-access_log.log;
    error_log  /home/www-data/webvircloudlogs/kvm.xxx.com.error.log;

    location /static/ {
        root /srv/webvirtcloud;
        expires max;
    }

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Forwarded-Proto $remote_addr;
        proxy_set_header X-Forwarded-Ssl off;
        proxy_connect_timeout 1800;
        proxy_read_timeout 1800;
        proxy_send_timeout 1800;
        client_max_body_size 1024M;
    }

    location /novncd/ {
        proxy_pass http://wsnovncd;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
    location /socket.io/ {
        proxy_pass http://wssocketiod;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

upstream wsnovncd {
      server 127.0.0.1:6080;
}
upstream wssocketiod {
      server 127.0.0.1:6081;
}

把这个配置文件复制进去 。。其实就是webvirtcloud的nginx配置文件 修改了监听域名 添加了个日志而已。。其实我感觉不用再面板设置一遍反向代理 直接改这个配置文件就行。。但是不知道为什么 我就是不好使 。。添了一个反向代理以后再改配置文件就可以用了 也不知道是什么原因 懒得研究了

www-data@S202305087692:~$ ssh-keygen    #创建密钥

然后三步回车 好像是 如果让你输入密码的话别输入 直接回车。。要不web那边ssh登录root会不好使。而且还没提示
全部默认设置
接下来继续输入

# 刚才密钥保存目录
cat > /home/www-data/.ssh/config << EOF
Host *
StrictHostKeyChecking no
EOF
ssh-copy-id root@你的Ip

然后输入你的root密码这个应该必须是root用户。。因为创建虚拟机什么的用的是libvirtd 需要root权限才能执行
登录完了

接着设置 supervisor,这个软件宝塔有 可以自己再 应用商店下载。。但是配置应该跟原始的不一样。。如果不用宝塔 直接按照官方的配置文件复制过去就完了。。
打开 webvirtcloud/conf/supervisor/webvirtcloud.conf 看看都是咋写的
在这里插入图片描述
按照相应的格式写进去 一共3个
都配置好了以后
然后到宝塔的防火墙设置把6080, 6081,放开否则 noVnc会不好使
然后安装下面这个

wget -O - https://bit.ly/36baWUu | sudo sh

如果卡住了试试输入下 www-data的密码试试。。不知道为啥在我这没有让我输入密码 直接卡住了。。当时懵了好一会
然后输入web的网址进入web管理界面 默认密码是 admin
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
保存 正常的话就应该是下面这样
接着就可以创建示例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后就可以去创建实例了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
随便选一个
在这里插入图片描述
在这里插入图片描述
需要提前自己准备好 系统的安装镜像 和 virtio-win 镜像 上传到刚才创建好的iso目录
virtio-win镜像下载地址: 点击下载
点设置
在这里插入图片描述
在这里插入图片描述
分别点击挂在 把iso文件挂在上 virtio-win是磁盘驱动 否则win2019会找不到硬盘
在这里插入图片描述
返回电源 点击开机
在这里插入图片描述
访问->控制台
在这里插入图片描述
网页端这个玩意非常的卡。。先凑合把系统装上
在这里插入图片描述
找不到硬盘 我们早有准备 点击加载驱动程序
在这里插入图片描述
点击浏览
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
已经找到驱动了点击下一步
剩下的就不用再教了。。装系统而已。。
在这里插入图片描述
设置Administrator密码。。就算是win10你也得搞它。。因为网页端实在是太卡了 我们得弄个远程桌面
在这里插入图片描述
先点那个 。。地下人家告诉你了。。。我始终感觉微软特么脱裤子放屁。。服务器当然是再机房里面。。就不能默认开启远程桌面一类的玩意?
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在外网是无法访问这个远程桌面的 需要配置端口转发。。
先去宝塔把3389端口放开。。
在这里插入图片描述
然后去虚拟机看看ip是多少
在这里插入图片描述
到PowerShell里输入命令 ipconfig
确认IP。。 如果有需要可以设置固定IP 这里就用这个凑合用吧。。反正几乎也不会变
然后回到宿主机 linux系统 写两条 iptables规则

sudo iptables -t nat -I PREROUTING  -p tcp --dport 3389 -j DNAT --to-destination 192.168.122.46:3389
sudo iptables -t nat -I POSTROUTING  -p tcp --dport 3389 -j SNAT --to-source 10.0.0.1

将10.0.0.1 换成你自己的Ip
在这里插入图片描述
用自己的电脑远程桌面连接就行 IP地址是公网IP
正常情况加就应该就可以可以了。。不过我这有点不正常。。记录一下。。

iptables -t nat -L -n -v

查看iptables 的nat规则

在这里插入图片描述
主要是这两条 因为我这个有Docker 所以上面的命令要用 -I 添加。。这是iptables的规则。。。我就不说了。。
当时我就这样 规则都正常 各种抓包折腾了好久 就是转发不过去。。
直到后来突然特么开窍了 于是

 iptables -L FORWARD -v -n
Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   74  3848 LOG        tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:10022 LOG flags 0 level 4
    0     0 LOG        tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp spt:22 LOG flags 0 level 4
    0     0 LOG        tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp spt:23389 LOG flags 0 level 4
   15   780 LOG        tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:23389 LOG flags 0 level 4
 674K 1243M ACCEPT     all  --  *      virbr0  0.0.0.0/0            192.168.122.0/24     ctstate RELATED,ESTABLISHED
 522K   28M ACCEPT     all  --  virbr0 *       192.168.122.0/24     0.0.0.0/0           
    5  1640 ACCEPT     all  --  virbr0 virbr0  0.0.0.0/0            0.0.0.0/0           
  214 11068 REJECT     all  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
61332   18M DOCKER-USER  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
61332   18M DOCKER-ISOLATION-STAGE-1  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
35505   13M ACCEPT     all  --  *      br-9111c0593d6c  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
  174 10307 DOCKER     all  --  *      br-9111c0593d6c  0.0.0.0/0            0.0.0.0/0           
17841 3611K ACCEPT     all  --  br-9111c0593d6c !br-9111c0593d6c  0.0.0.0/0            0.0.0.0/0           
  164  9837 ACCEPT     all  --  br-9111c0593d6c br-9111c0593d6c  0.0.0.0/0            0.0.0.0/0           
 2686  417K ACCEPT     all  --  *      docker0  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
    0     0 DOCKER     all  --  *      docker0  0.0.0.0/0            0.0.0.0/0           
 5115  526K ACCEPT     all  --  docker0 !docker0  0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  docker0 docker0  0.0.0.0/0            0.0.0.0/0           
   11   564 ufw-before-logging-forward  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
   11   564 ufw-before-forward  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
   11   564 ufw-after-forward  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
   11   564 ufw-after-logging-forward  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
   11   564 ufw-reject-forward  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
   11   564 ufw-track-forward  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            192.168.122.0/24     state 

注意看到 virbr0 的两条 REJECT
virbr0 是KVM的网关。。应该叫这个吧 。。 把这两条删掉

iptables -D FORWARD 9
iptables -D FORWARD 8

9和8是行。。先删大数。。删小的就执行两次8
我的是删掉以后就可以了。。
好了 就到这里把。。
这篇博客很多东西都是错的。。
反正错了也能用。我也是临时用一下。
www-data的权限问题。。root在web端ssh会不会有安全问题等等。。如果生产环境这是妥妥的准备跑路的干法。。不过也就是临时凑合用一下。临时记录一下

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐