利用VPS的IPv6升级移动云电脑为IPv6 NAT大鸡

云电脑没有分配IPv6地址,但手中有一些闲置HK 移动CMI直连鸡.
想到可以用HK鸡作为入口,拉广移的云电脑, 如果仅仅跑个FRP和Alist,又浪费了8C16G
所以配了PVE + IPv6 + IPv4(Nat) 的玩法

硬性要求

  • VPS有公网IPv6地址,且为/64位或数字<64,如下图
  • 利用VPS的IPv6升级移动云电脑为IPv6 NAT大鸡
  • 移动云电脑已DD为Debian,若未DD请参照下文DD

网段划分

  • 172.16.98.0/24 用于VPS和PVE节点间的IPv4通信
  • fc00:fc00::/64 用于VPS和PVE节点见的IPv6通信
  • 172.16.99.0/24 为PVE分配给虚拟机的IPv4
  • 2401:1111:2222:3333::/64 为PVE分配给虚拟机的IPv6

一. 安装PVE和FRP

此处安装FRP是因为便于PVE SSH和Web页面管理

1. VPS释放掉IDC分配的IPv6地址

请记录VPS的IPv6地址,并使用ip -6 route命令获取IPv6的默认网关地址

  • 注释掉/etc/network/interfaces中的IPv6配置部分
  • 利用VPS的IPv6升级移动云电脑为IPv6 NAT大鸡
  • 重启VPS

2. 先DD到Debian

3. 使用Debian安装PVE 8

  • 安装过程参考 官方安装教程
  • 默认配置的国外pve源
    • 可以使用Termius端口转发本地7890代理端口到云电脑
    • 利用VPS的IPv6升级移动云电脑为IPv6 NAT大鸡
    • 然后使用proxychains代理进行软件包安装
    • 利用VPS的IPv6升级移动云电脑为IPv6 NAT大鸡

4. 使用FRP映射PVE Web端口和SSH端口

FRP配置文件写的没用的有点多,因为尝试了QUIC和KCP,最终发现TCP稳定一些.
建议将VPS和PVE的FRP均配置为Systemd,请参照官网文档 使用 systemd

  • FRP版本: 0.53.2
  • FRP 服务端配置文件
bindPort = 7000
kcpBindPort = 7000
quicBindPort = 7001
transport.quic.keepalivePeriod = 10
transport.quic.maxIdleTimeout = 30
transport.quic.maxIncomingStreams = 100000
transport.heartbeatTimeout = 90
transport.maxPoolCount = 10
transport.tcpMux = true
transport.tcpMuxKeepaliveInterval = 60
transport.tcpKeepalive = 7200
transport.tls.force = false
enablePrometheus = false
log.to = "/var/log/frps.log"
log.level = "info"
log.maxDays = 7
log.disablePrintColor = true
auth.method = "token"
auth.token = "修改该字段为自己的连接密码"
auth.additionalScopes = ["HeartBeats", "NewWorkConns"]
udpPacketSize = 15000
  • FRP 客户端配置文件
user = "PVE"
serverAddr = "修改该字段为自己的VPSIP"
serverPort = 7000
log.to = "/var/log/frpc.log"
log.level = "info"
log.maxDays = 7
auth.method = "token"
auth.additionalScopes = ["HeartBeats","NewWorkConns"]
auth.token = "修改该字段为自己的连接密码"
transport.dialServerKeepalive = 7200
transport.poolCount = 10
transport.tcpMux = true
transport.tcpMuxKeepaliveInterval = 60
transport.protocol = "tcp"
transport.quic.keepalivePeriod = 10
transport.quic.maxIdleTimeout = 30
transport.quic.maxIncomingStrams = 100000
transport.tls.enable = true
transport.heartbeatInterval = 30
transport.heartbeatTimeout = 90
udpPacketSize = 15000

[[proxies]]
name = "SSH"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 1022
transport.useEncryption = true
transport.useCompression = true

[[proxies]]
name = "pve-https"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8006
remotePort = 443
transport.useEncryption = true
transport.useCompression = true

二. 配置PVE

1. 新建网桥

  • 在节点中创建一个新的网桥,命名为vmbr0
    • IPv4/CIDR根据前文,设置为172.16.99.0/24
    • IPv6/CIDR根据前文,设置为2401:1111:2222:3333::/64
    • 网关/IPv6根据前文,设置为2401:1111:2222:3333::
    • 其余置空即可
      • 若填写了网关(IPv4) 可能导致PVE无法联网
      • 桥接端口不需要填写
        利用VPS的IPv6升级移动云电脑为IPv6 NAT大鸡

2. DNS配置

利用VPS的IPv6升级移动云电脑为IPv6 NAT大鸡

3. 磁盘-LVM配置

利用VPS的IPv6升级移动云电脑为IPv6 NAT大鸡


三. 配置WireGuard

1. VPS初始化配置

apt install wiregaurd
cd /etc/wireguard
wg genkey | tee vps_priv_key | wg pubkey > vps_pub_key
# 查看私钥
cat vps_priv_key
# 查看公钥
cat vps_pub_key

2. PVE初始化配置

apt install wiregaurd
cd /etc/wireguard
wg genkey | tee pve_priv_key | wg pubkey > pve_pub_key
# 查看私钥
cat pve_priv_key
# 查看公钥
cat pve_pub_key

3. VPS配置WireGuard

请修改配置文件
eth0修改为VPS的外网网卡接口名称
IPv6地址修改为VPS可用的64位v6网段内地址,例如:2401:1111:2222:3333::1/64
配置文件内的PublicKey / PresharedKey / PrivateKey 修改为注释对应的

cat > /etc/wireguard/wg0.conf<<EOF
[Interface]
Address = 172.16.98.1/24
Address = fc00:fc00::1/64
ListenPort = 16385
MTU = 1420
# VPS端生成的 vps_priv_key
PrivateKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip route add default via VPS的IPv6网关地址 dev eth0 metric 1024 onlink pref medium
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip route del default via VPS的IPv6网关地址 dev eth0 metric 1024 onlink pref medium

[Peer]
# PVE端生成的 pve_pub_key
PublicKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# VPS端生成的 PresharedKey
PresharedKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
AllowedIPs = 172.16.99.0/24, 2401:1111:2222:3333::/64, 172.16.98.0/24, fc00:fc00::/64
EOF

# 手动启动WireGuard
wg-quick up wg0
# 设置开机自启
systemctl enable wg-quick@wg0

4. PVE配置WireGuard

请参照VPS端的配置进行修改,
配置文件内的PublicKey / PresharedKey / PrivateKey 修改为注释对应的
请使用 WireGuard AllowedIPs Calculator 计算AllowedIPs:

  • Allowed IPs填写为: ::/0, 0.0.0.0/0
  • Disallowed IPs填写为: VPS的IPv4地址
cat > /etc/wireguard/wg0.conf<<EOF
[Interface]
Address = 172.16.98.2/24
Address = fc00:fc00::2/126
MTU = 1420
DNS = 1.1.1.1, 8.8.8.8
# PVE端生成的 pve_priv_key
PrivateKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

[Peer]
# PVE端生成的 pve_pub_key
PublicKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# VPS端生成的 PresharedKey
PresharedKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
AllowedIPs = 计算得到的AllowedIPs地址池
# VPS IP:端口
Endpoint = VPS服务器IP:16385
PersistentKeepalive = 16
EOF

# 手动启动WireGuard
wg-quick up wg0
# 设置开机自启
systemctl enable wg-quick@wg0

5. NDP代理(VPS端)

类似于IPv4的ARP代理,内核自带的npd-proxy有些问题.

  • 参考运行 ndpresponder
  • 需要使用Go安装ndpresponder
    • 经测试,Go版本1.19.1可用,最新版Go安装该包有问题
wget -c https://go.dev/dl/go1.19.1.linux-amd64.tar.gz -O - | tar -xz -C /usr/local
echo 'export PATH=$PATH:/usr/local/go/bin:/root/go/bin' >> /etc/profile
echo 'export PATH=$PATH:/usr/local/go/bin:/root/go/bin' >> /root/.bashrc
source /etc/profile
source /root/.bashrc
go env -w GO111MODULE=on
go install github.com/yoursunny/ndpresponder@main

cat >/etc/systemd/system/ndpresponder.service<<EOF
[Unit]
Description=NDPPD Daemon
After=network.target
 
[Service]
ExecStart=/root/go/bin/ndpresponder -i eth0 -n 2401:1111:2222:3333::/64
Restart=on-failure
RestartSec=2
 
[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl restart ndpresponder

四. 其他配置

1. VPS防墙配置

  • 尽力吧…避免WireGuard端口被封
# 禁止入方向的 ping
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# 测试时可删除,避免ping不通误判错误
# iptables -D INPUT -p icmp --icmp-type echo-request -j DROP

# 禁止服务器回复 ICMP port unreachable 和 host unreachable 消息
iptables -A OUTPUT -p icmp --icmp-type destination-unreachable -j DROP
# 禁止服务器回复 no listen port 的 TCP reset 消息(标志位为 RST, ACK)
iptables -A OUTPUT -p tcp --tcp-flags RST,ACK RST,ACK -j DROP

五. PVE启动虚拟机测试

1. 下载可用Cloud-init镜像并配置

wget http://mirrors.ustc.edu.cn/debian-cdimage/cloud/bookworm/latest/debian-12-generic-amd64.qcow2
qm create 9000 --memory 2048 --core 2 --name debian-12-template --net0 virtio,bridge=vmbr0
qm importdisk 9000 /opt/debian-build/debian-12-generic-amd64.qcow2 Storage_VG
qm set 9000 --scsihw virtio-scsi-pci --scsi0 Storage_VG:vm-9000-disk-0
qm resize 9000 scsi0 +18G
qm set 9000 --serial0 socket
qm set 9000 --boot c --bootdisk scsi0
qm set 9000 --ide2 Storage_VG:cloudinit

2. PVE Web端配置虚拟机

  • 虚拟机Cloud-Init配置
    • 关闭升级程序包,避免开机升级浪费时间
    • 设置密码
    • 利用VPS的IPv6升级移动云电脑为IPv6 NAT大鸡

3. 启动虚拟机测试

  • 可使用NoVNCxterm.js
    • 利用VPS的IPv6升级移动云电脑为IPv6 NAT大鸡

      利用VPS的IPv6升级移动云电脑为IPv6 NAT大鸡

六. 后记

  • WireGuard还是偶尔会断连,这个可以考虑伪装TCP解决
  • 端口被封的话,勤换端口
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇