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.conf
: vi /etc/modprobe.d/local.conf
,添加或修改这一行内容:
options ipv6 disable=0
编辑/etc/modules
:vi /etc/modules
,添加如下内容(对的,就一个ipv6):
ipv6
接着通过ip a
看一下ip在哪个网卡上,一般都是eth0
,下面就拿eth0举例了。如果不是eth0,下面的eth0(8、9行)全部换成你的网卡名称。
编辑/etc/sysctl.conf
:vi /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是前天装好的,全靠回忆,因此没有截图,不过印象还是挺深的。