在VPS上安装PVE来开NAT

因为最近成功交易了一个域名,所以就打算买台VPS给群友开NAT,由于NodeHatch免费用户只能开10个Nat,所以就去看了一下有什么自己开NAT的方式,然后尝试了一下

域名交易:

域名交易.png

安装PVE

参考了PVE的官方文档:文档

修改hosts

IP的获取方式: hostname -I

访问域名:任意

你的主机名:hostname

1
2
3
4
5
6
7
8
9
nano /etc/hosts

127.0.0.1 localhost
你的主要IP 你预计的访问域名地址 你的主机名 -> 只需要修改这一行,建议看文档

# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

修改之后建议reboot一下

添加源

1
2
3
4
5
echo "deb [arch=amd64] http://download.proxmox.com/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list
wget https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg
apt update && apt full-upgrade
apt install proxmox-default-kernel
systemctl reboot

安装PVE

1
apt install proxmox-ve postfix open-iscsi chrony

删除Debian内核

1
2
apt remove linux-image-amd64 'linux-image-6.1*'
update-grub

访问面板

访问地址:https://your-ip-address:8006

认证方式:PAM
用户名:root
密码:你的SSH密码

PVE登录.png

异常排查

如果你无法通过 https://your-ip-address:8006 的方式访问

检查状态

1
systemctl status pveproxy.service

如果报错提示:

1
/etc/pve/local/pve-ssl.key: failed to load local private key (key_file or key) at /usr/share/perl5/PVE/APIServer/AnyEvent.pm line 2088.

那就是修改hosts的问题

确保以下内容正确

IP的获取方式: hostname -I

你的主机名:hostname

修改好之后执行以下命令:

1
2
3
4
5
6
7
8
# 重新生成自签证书
pvecm updatecerts --force

# 重启服务
systemctl restart pveproxy.service

# 检查服务状态
systemctl status pveproxy.service

创建NAT网络

按照解释进行更改后再执行

1
2
3
vmbr1 -> 网桥名字
10.10.10.1 -> 私网IP网关
ens3 -> 你的网卡名字 执行ip a 查看你公网IP的网卡名字
1
2
3
4
5
6
7
8
9
10
11
12
13
nano /etc/network/interfaces

# 这是一个仅供内部虚拟机使用的私有网络
auto vmbr1
iface vmbr1 inet static
address 10.10.10.1/24
bridge-ports none
bridge-stp off
bridge-fd 0

# 当主机启动时,自动开启NAT规则
post-up iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o ens3 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o ens3 -j MASQUERADE

修改后建议reboot一下

开启IP转发

1
nano /etc/sysctl.conf
1
2
删除这行的#号并保存<br>
#net.ipv4.ip_forward=1

然后执行命令查看是否为1

1
sysctl -p

创建虚拟机

创建虚拟机需要先下载对应的镜像,可以下载好之后上传,也可以从URL下载
ISO

下载好之后就可以右上角创建了

常规

选择刚才下载的镜像

选择ISO镜像

依次更改磁盘 CPU 内存即可

更改磁盘大小

完成

完成

选中创建的虚拟机后右上角点击启动即可进入安装程序,可以在左边的控制台查看VNC

启动

批量创建

1
2
3
4
5
6
7
8
9
10
# 可选操作 清理模板机内容
# 清理 SSH 主机密钥 建议清理
rm -f /etc/ssh/ssh_host_*
# 清理 machine-id
truncate -s 0 /etc/machine-id
# 清理 shell 历史记录
history -c
history -w
# 关机
shutdown now

选择好需要用来做模板的虚拟机,然后添加Cloud-init

Cloud-init

右键点击转换为模板

转换模板

转换后,选择模板,右键点击克隆

克隆

选择完整克隆

clone

克隆之后,选择克隆的虚拟机,修改Cloud-init的配置

修改Cloud-init

修改完成后,右上角点击开机即可,会自动配置好用户、密码、IP等

设置端口映射

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
apt update
apt install iptables-persistent

# TCP 将10.10.10.101的80端口转发到公网IP的8080端口
# -i ens3 是指公网流量入口,-o ens3 是指公网流量出口
iptables -t nat -A PREROUTING -i ens3 -p tcp --dport 8080 -j DNAT --to-destination 10.10.10.101:80
iptables -A FORWARD -p tcp -d 10.10.10.101 --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# PREROUTING 规则 (UDP): 将发往主机 12345 UDP 端口的包,目标地址改为虚拟机的 12345 端口
iptables -t nat -A PREROUTING -i ens3 -p udp --dport 12345 -j DNAT --to-destination 10.10.10.5:12345
# FORWARD 规则 (UDP): 允许这个被修改后的 UDP 包通过防火墙转发给虚拟机
iptables -A FORWARD -p udp -d 10.10.10.5 --dport 12345 -j ACCEPT

# 如果要删除转发
iptables -t nat -L PREROUTING --line-numbers
iptables -t nat -D PREROUTING 需要删除的number

iptables -L FORWARD --line-numbers
iptables -D FORWARD 需要删除的number

# !!!!不管是新增还是删除,修改后都要执行下面命令保存
netfilter-persistent save