1. 为什么这么做?

“本站目前所在的网站服务器机房网络十分有九分的不稳定、性能长期过剩,且发生过硬盘损坏事件。出于成本、安全和稳定性等方面的考虑,我们正在对网站服务器迁移至新的服务器。”

↑ 这是马上就要出现的迁移维护提示页面中的第一句话。翻译就是 我没钱了,我要换服务器 于是买了一台100多年付的IPv6 Only 堪萨斯垃圾场的机器。(为什么还不迁移?原因是正在进行稳定性测试,跑了两个VM和两个CT,环境大概好了,但是堪萨斯回国挺差的,需要找一台v4机器转发过去(正好cdn对v6回源支持一半)。ipv4转发问题还没处理好。)

24.8.19 ↑ 又换了,那台机子有点卡,不是很接受那个速度()

为什么装pve?不想直接装上amh和网站环境,方便我整其他活。

好了好了,话题扯远了,回到正题。这台机子装pve我折腾了很久,因为网卡没有ipv4地址,很多脚本都不能用,如下:

我试过一键虚拟化项目的pve安装脚本,可惜没有对ipv6 only进行适配,使用他提供的任何一个脚本都会导致机器断网。

DD系统,使用5k哥的脚本1keydd的devdeskos(我印象里基于pve)模板,不行,脚本不知道为什么半天没动静。

官方文档是只有英文版的,啃起来说难倒是不难,但是整合了一下自己踩过的坑和nat网络配置,希望能帮到我自己,还有正在读文章的你。

2. 准备

  • 一台IPv6 Only的VPS
  • Debian 12系统
  • 学习 vim 编辑器的基本用法
  • 脑子、手

下文中ipv6地址均使用 [::1] 举例,操作时记得换成自己真实的ipv6地址,一般都是网卡上的。

安装一些必要的组件:

apt update
apt install vim wget sudo -y

3. 安装

设置主机名、Hosts

设置主机名

下面主机名以 mypve 为例,你想设置什么就设成什么。首先设置一下主机名:

hostnamectl set-hostname mypve

设置hosts

编辑hosts vi /etc/hosts,在最后添加这一行内容:

::1   mypve.proxmox.com mypve

安装pve

添加pve官方源并更新

# 添加源
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

安装pve内核

apt install proxmox-default-kernel -y
systemctl reboot

安装pve包

apt install proxmox-ve postfix open-iscsi chrony -y

Note:

  • 在此期间,会出现Postfix的配置页面,选择Local Only
  • Postfix还会出现配置邮箱域名,下面就是你的主机名+.proxmox.com,比如mypve.proxmox.com,直接OK就完事了。

精简优化

稍稍优化一下PVE的占用。

删除Debian内核

apt remove linux-image-amd64 'linux-image-6.1*' -y
update-grub

删除软件包

如果不是双系统,那么可以直接删除os-prober软件包。

apt remove os-prober -y

服务精简

单节点pve,用不着的服务,统统关掉!这里不多解释了,参考了下面参考文章里的第二个文章,那边有一些解释。

systemctl stop pve-ha-lrm.service 
systemctl stop pve-ha-crm.service 
systemctl disable pve-ha-lrm.service 
systemctl disable pve-ha-crm.service
systemctl stop pvescheduler.service
systemctl disable pvescheduler.service
systemctl stop spiceproxy.service 
systemctl disable spiceproxy.service

定时删除内存缓存

同上。

TEMP_CRON=$(mktemp)
sudo crontab -l > $TEMP_CRON
echo "*/5 * * * * echo 1 > /proc/sys/vm/drop_caches" >> $TEMP_CRON
echo "*/5 * * * * sleep 60; echo 2 > /proc/sys/vm/drop_caches" >> $TEMP_CRON
echo "*/5 * * * * sleep 120; echo 3 > /proc/sys/vm/drop_caches" >> $TEMP_CRON
echo "*/5 * * * * sleep 180; fstrim -av" >> $TEMP_CRON
sudo crontab $TEMP_CRON
rm $TEMP_CRON

其他配置

开启BBR

cat >>/etc/sysctl.conf << EOF
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF

sysctl -p

修改描述符限制

echo 'fs.file-max = 65535' >> /etc/sysctl.conf
echo '* soft nofile 65535' >> /etc/security/limits.conf
echo '* hard nofile 65535' >> /etc/security/limits.conf
echo 'ulimit -SHn 65535' >> /etc/profile

接下来,最好reboot重启一下,继续下面的操作。

4. 配置NAT网络

配置网络

注: 网卡配置只有桥接eth0(如果有多个v6 可以用vmbr0来配置ipv6公网 ,然后内网nat warp v4出口) 我这台机器没有多个ipv6,ipv6 nat也没啥意义,就没有整。

开启v4、v6转发

编辑/etc/modprobe.d/local.confvi /etc/modprobe.d/local.conf,添加或修改这一行内容:

options ipv6 disable=0

编辑/etc/modulesvi /etc/modules,添加如下内容(对的,就一个ipv6):

ipv6

接着通过ip a看一下ip在哪个网卡上,一般都是eth0,下面就拿eth0举例了。如果不是eth0,下面的eth0(8、9行)全部换成你的网卡名称。

编辑/etc/sysctl.confvi /etc/sysctl.conf,添加如下内容到文档底部:

net.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv6.conf.eth0.autoconf=0
net.ipv6.conf.eth0.accept_ra=2
net.ipv6.conf.default.forwarding=1
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.default.proxy_ndp=1
net.ipv6.conf.all.proxy_ndp=1

编辑网卡配置

下面是重点,必须三思而后行,稍有失误就有很大可能导致机器断网。

建议先备份一次原先的网卡配置,如果炸了进vnc还原后再进行操作就可以了:cp /etc/network/interfaces /etc/network/interfaces.bak

网卡配置文件所在位置从上面你应该就看出来了:/etc/network/interfaces

懒了,自行对比一下内容吧:

我的原先配置如下:

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet6 static
        accept_ra 0
        address 2604:abc0:XXXX:XXXX:0000:0000:XXXX:XXXX
        netmask 64


post-up /sbin/ip -r route add 2604:abc0:XXX:XXX::X dev eth0
post-up /sbin/ip -r route add default via 2604:abc0:XXX:XXX::X

编辑后:

# The loopback network interface
auto lo
iface lo inet loopback
iface eth0 inet manual
auto vmbr0
iface vmbr0 inet6 static
        accept_ra 0
        address 2604:abc0:XXXX:XXXX:0000:0000:XXXX:XXXX
        netmask 64
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0
auto vmbr1
iface vmbr1 inet static
        address  10.10.10.1/24
        netmask  255.255.255.0
        bridge_ports none
        bridge_stp off
        bridge_fd 0
        post-up echo 1 > /proc/sys/net/ipv4/ip_forward
        post-up   iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -j MASQUERADE

post-up /sbin/ip -r route add 2604:abc0:XXX:XXX::X dev eth0
post-up /sbin/ip -r route add default via 2604:abc0:XXX:XXX::X

编辑完成后,执行下面命令锁定文件,pve8会将其覆盖!

chattr +i /etc/network/interfaces

重启机器,能联网,就是完工了。

开小鸡的时候,选择STATIC(静态ip),ip填10.10.10.XX/24,网关10.10.10.1就可以了,小鸡和母鸡通信理所应当就是10.10.10.1。

安装Warp

由于我的vps只有ipv6网络,无法访问ipv4网络,故配置完网卡后安装一下warp,提供v4网络连接。

我使用的是fscarmen的脚本:

wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh && bash menu.sh

选择添加IPv4出口,我用的是warp+,这篇文章主要讲pve,就不多说了,配置起来很简单的。

结束,pve的安装和配置至此已经完成。说实话我刚刚好像忘了些什么,但是往上翻了一下翻回来又不知道什么忘掉了,重新看了一下都差不多了,就这样吧。第二天更新:想起来要给网络配置加只读权限了。

pve是前天装好的,全靠回忆,因此没有截图,不过印象还是挺深的。

5. 参考文章