<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/ DTD/wml_1.1.xml">

<wml>
<head>
<meta http-equiv="cache-control" content="max-age=180,private" />
</head>
<card title="通过PVE命令批量或单独开设NAT服务器以及维护(简称母鸡开小鸡)">
<p>
作者:<a href="index.php?action=showuser&amp;userid=1&amp;hash=">admin</a><br />时间:2023-05-22 17:48<br />分类:<a href="index.php?action=list&amp;cid=3&amp;hash=">电脑技术</a><br />内容:
通过PVE命令批量或单独开设NAT服务器以及维护(简称母鸡开小鸡)


一键虚拟化：https://virt.spiritlhl.net/ 


GitHub：https://github.com/spiritLHLS/pve


更新：https://github.com/oneclickvirt/pve


系统要求与配置：




建议debian在使用前尽量使用最新的系统，非debian11可使用 debian一键升级来升级系统，当然不使用最新的debian系统也没问题，只不过得不到官方支持。只适配Debian系统(非Debian无法通过APT源安装，官方只给了Debian的镜像，其他系统只能使用ISO安装)。






XML/HTML代码


    系统要求：Debian 8~11，不能是 Debian 12

    最低的硬件要求：2核2G内存x86_64架构服务器硬盘至少20G

    可开KVM的硬件要求：VM-X或AMD-V支持-(部分VPS和全部独服支持)

    如果硬件需求不满足，可使用LXD批量开LXC




遇到选项不会选的可无脑回车安装，所有脚本内置国内外IP自动判断，使用的是不同的安装源与配置文件，有使用CDN加速镜像下载


检测硬件环境：




XML/HTML代码


    本仓库脚本执行前务必执行本脚本检测环境，如果不符合安装PVE的要求则无法使用后续的脚本

    检测硬件配置是否满足最低要求

    检测硬件环境是否可嵌套虚拟化KVM类型的服务器

    检测系统环境是否可嵌套虚拟化KVM类型的服务器

    不可嵌套虚拟化KVM类型的服务器也可以开LXC虚拟化的服务器，但不推荐安装PVE，不如使用LXD





XML/HTML代码


    国外：

    bash &lt;(wget -qO- --no-check-certificate https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/check_kernal.sh)

    国内：

    bash &lt;(wget -qO- --no-check-certificate https://ghproxy.com/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/check_kernal.sh)




PVE基础安装说明：




XML/HTML代码


    安装的是当下apt源最新的PVE

    比如debian10则是pve6.4，debian11则是pve7.x

    /etc/hosts文件修改(修正商家hostname设置错误以及新增PVE所需的内容)

    已设置/etc/hosts为只读模式，避免重启后文件被覆写，如需修改请使用chattr -i /etc/hosts取消只读锁定，修改完毕请执行chattr +i /etc/hosts只读锁定

    检测/etc/cloud/cloud.cfg如果发现preserve_hostname是false，则改为true

    检测是否为中国IP，如果为中国IP使用清华镜像源，否则使用官方源

    安装PVE开虚拟机需要的必备工具包

    替换apt源中的企业订阅为社区源

    打印查询Linux系统内核和PVE内核是否已安装

    查询网络配置是否为dhcp配置的V4网络，如果是则转换为静态地址避免重启后dhcp失效，已设置为只读模式，如需修改请使用chattr -i /etc/network/interfaces.d/50-cloud-init取消只读锁定，修改完毕请执行chattr +i /etc/network/interfaces.d/50-cloud-init只读锁定

    检测/etc/resolv.conf是否为空，为空则设置检测8.8.8.8的开机自启添加DNS的systemd服务

    新增PVE的APT源链接后，下载PVE并打印输出登陆信息

    配置完毕需要重启系统加载新内核




一键安装PVE：




XML/HTML代码


    国外：

    curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/install_pve.sh -o install_pve.sh &amp;&amp; chmod +x install_pve.sh &amp;&amp; bash install_pve.sh

    国内：

    curl -L https://ghproxy.com/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/install_pve.sh -o install_pve.sh &amp;&amp; chmod +x install_pve.sh &amp;&amp; bash install_pve.sh




预配置环境：




XML/HTML代码


    创建资源池mypool

    移除订阅弹窗

    尝试开启硬件直通

    检测AppArmor模块并试图安装





XML/HTML代码


    国外：

    bash &lt;(wget -qO- --no-check-certificate https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/build_backend.sh)

    国内：

    bash &lt;(wget -qO- --no-check-certificate https://ghproxy.com/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/build_backend.sh)




自动配置IPV4的NAT网关：




XML/HTML代码


    使用前请保证重启过服务器且此时PVE能正常使用WEB端再执行，重启机器后不要立即执行此命令，至少等几分钟待WEB端启动成功后再执行

    这一步是最容易造成SSH断开的，原因是未等待PVE内核启动就修改网络会造成设置冲突，所以至少等几分钟待内核启动也就是WEB端启动成功后再执行

    创建vmbr0，母鸡允许addr和gateway为内网IP或外网IP，已自动识别，测试腾讯云可用

    创建vmbr1(NAT网关)

    开NAT虚拟机时网关（IPV4）使用172.16.1.1，IPV4/CIDR使用172.16.1.x/24，这里的x不能是1，当然如果后续使用本套脚本无需关注这点细枝末节的东西

    想查看完整设置可以执行cat /etc/network/interfaces查看

    加载iptables并设置回源且允许NAT端口转发





XML/HTML代码


    国外：

    bash &lt;(wget -qO- --no-check-certificate https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/build_nat_network.sh)

    国内：

    bash &lt;(wget -qO- --no-check-certificate https://ghproxy.com/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/build_nat_network.sh)




一键生成KVM虚拟化的NAT服务器：




XML/HTML代码


    使用前记得执行本仓库的第一个个命令，那个检测硬件环境的命令查询如上的只需使用下面的一键脚本自动创建虚拟机即可，无需手动再修改WEB端设置

    查询如上的在使用后续脚本创建了虚拟机后，可能需要手动修改WEB端设置，需要关闭对应每个虚拟机的硬件嵌套虚拟化

    先停止虚拟机再修改，修改完后再开机才能使用NOVNC，不关闭可能导致这个虚拟机有BUG无法使用

    如果强行安装PVE开KVM，启动不了的也可以关闭这个选项试试能不能启动虚拟机




单独生成KVM虚拟化的VM：




XML/HTML代码


    自动开设NAT服务器，默认使用Debian10镜像，因为该镜像占用最小

    可在命令中自定义需要使用的镜像，这里有给出配置好的镜像，镜像自带空间设置是2~10G硬盘，日常使用至少10G以上即可，除非某些镜像开不起来再增加硬盘大小

    可在命令中指定存储盘位置，默认不指定时为local盘即系统盘，可指定为PVE中显示的挂载盘

    自定义内存大小推荐512MB内存，需要注意的是母鸡内存记得开点swap免得机器炸了开SWAP点我跳转

    自动进行内外网端口映射，含22，80，443端口以及其他25个内外网端口号一样的端口

    生成后需要等待一段时间虚拟机内部的cloudinit配置好网络以及登陆信息，大概需要5分钟





XML/HTML代码


    国外：

    curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm.sh -o buildvm.sh &amp;&amp; chmod +x buildvm.sh

    国内：

    curl -L https://ghproxy.com/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm.sh -o buildvm.sh &amp;&amp; chmod +x buildvm.sh




单个生成的使用方法：




系统支持：详见 跳转 中列出的系统，使用时只需写文件名字，不需要.qcow2尾缀


注意这里的用户名不能是纯数字，会造成cloudinit出问题，最好是纯英文或英文开头




XML/HTML代码


    ./buildvm.sh VMID 用户名 密码 CPU核数 内存 硬盘 SSH端口 80端口 443端口 外网端口起 外网端口止 系统 存储盘





示例


测试开一个NAT服务器








以下示例开设VMID为102的虚拟机，用户名是test1，密码是1234567，CPU是1核，内存是512MB，硬盘是10G，SSH端口是40001，80端口是40002，443端口是40003 同时内外网映射端口一致的区间是50000到50025，系统使用的是ubuntu20，使用宿主机的存储盘是local盘。






XML/HTML代码


    ./buildvm.sh 102 test1 1234567 1 512 10 40001 40002 40003 50000 50025 ubuntu20 local




开设完毕可执行




XML/HTML代码


    cat vm102





登陆后可使用sudo -i切换到root用户


删除示例


删除端口映射，删除测试的虚拟机和log文件






XML/HTML代码


    qm stop 102

    qm destroy 102

    iptables -t nat -F

    iptables -t filter -F

    service networking restart

    systemctl restart networking.service

    rm -rf vm102





相关qcow2镜像


已预安装开启cloudinit，开启SSH登陆，预设值SSH监听V4和V6的22端口，开启允许密码验证登陆，开启允许ROOT登陆


https://github.com/spiritLHLS/Images/releases/tag/v1.0


批量开设NAT的KVM虚拟化的VM：






XML/HTML代码


    初次使用前需要保证当前PVE未有任何虚拟机未有进行任何端口映射，否则可能出现BUG

    开设前请使用screen挂起执行，避免批量开设时间过长，SSH不稳定导致中间执行中断，推荐使用PVE自带的Shell操作母鸡

    可多次运行批量生成VM，但需要注意的是母鸡内存记得开点swap免得机器炸了开SWAP

    自动开设NAT服务器，默认使用Debian10镜像，因为该镜像占用最小

    自动进行内外网端口映射，含22，80，443端口以及其他25个内外网端口号一样的端口

    生成后需要等待一段时间虚拟机内部的cloudinit配置好网络以及登陆信息，大概需要5分钟

    默认批量开设的虚拟机网络配置为：22，80，443端口及一个25个端口区间的内外网映射

    可自定义批量开设的核心数，内存大小，硬盘大小，使用宿主机哪个存储盘，记得自己计算好空闲资源开设





XML/HTML代码


    国外：

    curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/create_vm.sh -o create_vm.sh &amp;&amp; chmod +x create_vm.sh &amp;&amp; bash create_vm.sh

    国内：

    curl -L https://ghproxy.com/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/create_vm.sh -o create_vm.sh &amp;&amp; chmod +x create_vm.sh &amp;&amp; bash create_vm.sh





开设完毕可执行




XML/HTML代码


    cat vmlog







登陆后可使用sudo -i切换到root用户


删除所有虚拟机


删除所有nat的端口映射并重启网络，删除所有虚拟机和log文件






XML/HTML代码


    for vmid in $(qm list | awk '{if(NR&gt;1) print $1}'); do qm stop $vmid; qm destroy $vmid; rm -rf /var/lib/vz/images/$vmid*; done

    iptables -t nat -F

    iptables -t filter -F

    service networking restart

    systemctl restart networking.service

    rm -rf vmlog





注意事项：


PVE修改虚拟机配置前都得停机先，再修改配置，修改完再启动，免得出现配置重载错误。






一键生成单个CT也就是LXC虚拟化的NAT容器


LXC虚拟化的容器-自带内外网映射






XML/HTML代码


    初次使用前需要保证当前PVE未有任何虚拟机未有进行任何端口映射，否则可能出现BUG

    开设前请使用screen挂起执行，避免批量开设时间过长，SSH不稳定导致中间执行中断，推荐使用PVE自带的Shell操作母鸡

    自动开设NAT服务器，默认使用Debian11镜像，也可自定义系统

    自动进行内外网端口映射，含22，80，443端口以及其他25个内外网端口号一样的端口

    生成后需要等待一段时间虚拟机内部配置好网络以及登陆信息，大概需要3分钟

    默认开设的虚拟机网络配置为：22，80，443端口及一个25个端口区间的内外网映射

    可自定义开设的核心数，内存大小，硬盘大小，使用宿主机哪个存储盘，记得自己计算好空闲资源开设

    可在命令中指定存储盘位置，默认不指定时为local盘即系统盘，可指定为PVE中显示的挂载盘

    开设的CT默认已启用SSH且允许root登陆，且已设置支持使用docker的嵌套虚拟化





XML/HTML代码


    国外：

    curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildct.sh -o buildct.sh &amp;&amp; chmod +x buildct.sh

    国内：

    curl -L https://ghproxy.com/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildct.sh -o buildct.sh &amp;&amp; chmod +x buildct.sh





如何使用：


系统支持：debian10，debian11，ubuntu18，ubuntu20，ubuntu22


其他系统可能支持可能不支持，自行测试


默认用户名是root






XML/HTML代码


    ./buildct.sh CTID 密码 CPU核数 内存 硬盘 SSH端口 80端口 443端口 外网端口起 外网端口止 系统 存储盘





CT示例


测试开一个NAT的LXC虚拟化的容器






以下示例开设CTID为102的容器，用户名是root，密码是1234567，CPU是1核，内存是512MB，硬盘是5G，SSH端口是20001，80端口是20002，443端口是20003 同时内外网映射端口一致的区间是30000到30025，系统使用的是debian11，使用宿主机的存储盘是local盘。






XML/HTML代码


    ./buildct.sh 102 1234567 1 512 5 20001 20002 20003 30000 30025 debian11 local




开设完毕可执行




XML/HTML代码


    cat ct102





删除所有CT


以下命令将删除所有CT和所有的log文件，删除所有nat的端口映射并重启网络






XML/HTML代码


    pct list | awk 'NR&gt;1{print $1}' | xargs -I {} sh -c 'pct stop {}; pct destroy {}'

    rm -rf ct*

    iptables -t nat -F

    iptables -t filter -F

    service networking restart

    systemctl restart networking.service





批量开设NAT的LXC虚拟化的CT容器


自带内外网映射


可重复运行继承配置






一键命令




XML/HTML代码


    初次使用前需要保证当前PVE未有任何CT容器未有进行任何端口映射，否则可能出现BUG

    开设前请使用screen挂起执行，避免批量开设时间过长，SSH不稳定导致中间执行中断，推荐使用PVE自带的Shell操作母鸡

    可多次运行批量生成CT容器，但需要注意的是母鸡内存记得开点swap免得机器炸了开SWAP点我跳转

    可自定义批量开设的核心数，内存大小，硬盘大小，使用宿主机哪个存储盘，记得自己计算好空闲资源开设

    开设的CT默认已启用SSH且允许root登陆，且已设置支持使用docker的嵌套虚拟化







XML/HTML代码


    国外：

    curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/create_ct.sh -o create_ct.sh &amp;&amp; chmod +x create_ct.sh &amp;&amp; bash create_ct.sh

    国内：

    curl -L https://ghproxy.com/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/create_ct.sh -o create_ct.sh &amp;&amp; chmod +x create_ct.sh &amp;&amp; bash create_ct.sh




开设完毕可执行








XML/HTML代码


    cat ctlog




详细教程参考官方说明。
</p><p>
<a href="index.php?action=login&amp;hash=">立即登陆发表评论</a><br />
</p>
<p><a href="index.php?action=list&amp;hash=">返回日志列表</a><br /><a href="index.php?action=index&amp;hash=">返回主页</a></p>
</card>
</wml>
