具体使用请参考:PVE 使用手册
核心目标
在电子科大(UESTC)复杂的校园网环境(Ruijie ePortal + 端口安全 + NAT)中,部署一台 Proxmox VE 服务器,实现:
- 自动通过认证:开机自动联网,断网自动重连。
- 内网穿透:寒假在家或外出时能通过内网 IP 访问。
- 无人值守:断电自启,无需物理干预。
第一阶段:环境准备与安装
1. 硬件连接
- 服务器 (PVE):网线连接墙上端口。
- 控制端 (笔记本):连接同一局域网(初期需要网线直连 PVE 进行配置)。
2. PVE 系统安装
- 下载:官网下载 Proxmox VE ISO 镜像。
- 烧录:使用
Ventoy或Rufus制作启动盘。 - 安装:
- 插入 PVE,启动,按照引导走。
- IP 设置 (关键):安装时先随便设一个静态 IP(如
192.168.10.2/24),网关192.168.10.1。这一步是为了安装顺利完成,后面会改。
3. 更换国内源 (国内源)
PVE 默认源在国外,速度极慢。安装好后,先在 PVE 终端(或通过 SSH)替换源。
修改 /etc/apt/sources.list (Debian 系统源):
sed -i 's/ftp.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
sed -i 's/security.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list修改 /etc/apt/sources.list.d/pve-no-subscription.list (PVE 软件源):
# 注释掉企业源,添加非订阅源
echo "deb https://mirrors.ustc.edu.cn/proxmox/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list修改 CT 模板源:
cp /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm_back
sed -i 's|http://download.proxmox.com|https://mirrors.ustc.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm
systemctl restart pveproxy最后更新:apt update && apt dist-upgrade -y
第二阶段:攻克校园网
这是最难的一步。学校交换机有端口安全策略(Port Security),且认证系统(ePortal)有加密。
MAC 伪装
我们需要把 PVE 伪装成你的笔记本。
- 连网:笔记本插网线,正常登录校园网。
- 记录 MAC:终端输入
ip link,记录有线网卡 MAC (例如40:....)。 - 抓取加密密码 (Replay Attack 准备):
- 按
F12打开浏览器开发者工具 →Network(网络)。 - 勾选
Preserve log(保留日志)。 - 点击登录。
- 找到
InterFace.do?method=login的请求。 - 在
Payload(载荷) 中,复制超长的 加密后password字符串。 - 注意:不需要后缀(如 @telecom),直接取 Payload 里的 userId。
- 按
进入 PVE,修改 /etc/network/interfaces。
auto lo
iface lo inet loopback
iface enp3s0 inet manual
# 创建网桥(PVE 标准配置),但核心是在这里伪造 MAC
auto vmbr0
iface vmbr0 inet dhcp
bridge-ports enp3s0
bridge-stp off
bridge-fd 0
# 【关键】伪造 MAC 地址,骗过交换机
hwaddress ether 40:...修改完后重启 PVE (reboot),确保能获取到 10.x.x.x 或 100.x.x.x 的校园网 IP。
部署自动认证网络脚本
创建脚本 /root/auth/keep_alive.py。这是一个集成了重放攻击和断网检测的脚本。
import requests
import time
import subprocess
# === 配置区 ===
USER = "177xxxxxxx" # 你的账号
# 粘贴抓包到的超长加密字符串
ENCRYPTED_PASS = "2384c6e64e96c925e38b3b1cb8aa902d420fa1c1f..."
# =============
def check_internet():
"""Ping 检测网络"""
try:
subprocess.check_call(["ping", "-c", "1", "-W", "2", "223.5.5.5"],
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
return True
except:
return False
def get_qs():
"""动态获取 QueryString (IP/MAC信息)"""
try:
r = requests.get("http://1.1.1.1", allow_redirects=False, timeout=3)
if "Location" in r.headers:
return r.headers["Location"].split("?", 1)[1]
except: pass
return ""
def login():
qs = get_qs()
url = "http://172.25.249.64/eportal/InterFace.do?method=login"
payload = {
"userId": USER,
"password": ENCRYPTED_PASS,
"service": "",
"queryString": qs,
"passwordEncrypt": "true" # 告诉服务器这是密文
}
headers = {"User-Agent": "Mozilla/5.0"}
try:
print(f"[{time.strftime('%T')}] Trying login...")
requests.post(url, data=payload, headers=headers, timeout=5)
except Exception as e:
print(f"Error: {e}")
if __name__ == "__main__":
print(">>> Watchdog started...")
while True:
if not check_internet():
login()
time.sleep(5)
if check_internet():
print(f"[{time.strftime('%T')}] Re-connected!")
time.sleep(60) # 每分钟检查一次第三阶段:持久化与远程访问
1. 配置 Systemd 开机自启
确保 PVE 重启后脚本自动运行。创建 /etc/systemd/system/ruijie.service:
[Unit]
Description=Ruijie Auto Login Watchdog
After=network.target
[Service]
ExecStart=/usr/bin/python3 /root/auth/keep_alive.py
Restart=always
User=root
[Install]
WantedBy=multi-user.targetsystemctl daemon-reload
systemctl enable ruijie
systemctl start ruijie2. 安装 Tailscale (内网穿透)
为了在寒假或宿舍外访问 PVE,使用 Tailscale 打通隧道。
在 PVE 端:
curl -fsSL https://tailscale.com/install.sh | sh
tailscale up
# 复制屏幕上的链接,用账号登录绑定在 笔记本/手机 端:
- 安装 Tailscale 客户端,登录同一账号。
- 使用分配的
100.x.y.zIP 即可随时 SSH 或访问 HTTPS 面板。
3. 解决 Arch Linux 笔记本冲突 (重要)
如果你的主力机是 Arch Linux 且跑了 v2raya,会和 Tailscale 冲突。
修正命令:
sudo tailscale up --accept-dns=false --accept-routes并在 v2raya 设置中,将 100.64.0.0/10 加入路由白名单(Bypass)。(貌似非必要)
第四阶段:物理防御与维护
1. BIOS 设置 (必做)
- 断电恢复 (AC Recovery):进入 BIOS 电源管理,设置为
Power On。防止宿舍断电后服务器变砖。 - 合盖不休眠:如果是笔记本做服务器,确保
/etc/systemd/logind.conf中HandleLidSwitch=ignore。
2. 检查手段 (运维)
- 看脚本活没活
systemctl status ruijie
journalctl -u ruijie -f # 实时看日志- 看内网穿透状态:
tailscale status3. 应急预案
- 密码过期/失效:如果寒假期间连不上,可能是 Replay 的密文过期。
- 解法:只能回宿舍,用笔记本重新抓包,SSH 进去更新
keep_alive.py里的字符串。
- 解法:只能回宿舍,用笔记本重新抓包,SSH 进去更新
- 彻底断联:
- 解法:Tailscale 有时候需要 PVE 重启才能恢复。如果 BIOS 设置了通电自启,可以让室友帮忙拔插一下电源。
总结技术栈
通过这次部署,实际上掌握了以下技能树:
- Linux 系统管理:Systemd 服务、包管理、网络配置。
- 网络攻防:MAC 地址欺骗、中间人/重放攻击原理、DHCP/ARP 机制。
- 网络架构:NAT 穿透 (Overlay Network)、路由表管理、透明代理共存。
- 自动化运维:Python 脚本编写、看门狗逻辑。