返回博客列表
部署运维
一键部署开机自启服务端脚本运维

LetsVPN Linux服务端一键部署全流程指引

LetsVPN官方团队
LetsVPN Linux服务端一键部署, LetsVPN 开机自启配置, Linux VPN服务端脚本, 如何设置LetsVPN自启动, LetsVPN部署教程, VPN服务端自动化安装, CentOS Ubuntu LetsVPN, LetsVPN systemd配置, 一键脚本部署VPN, Linux VPS搭建VPN

问题定义:为什么需要自建 LetsVPN Linux 服务端

2025 年 Q3 起,LetsVPN 官方把 LightWire 协议栈完整下放到 Linux 服务端,峰值带宽 1.2 Gbps、延迟中位数 38 ms,且通过 SGS-CSA-STAR 零日志审计。对于企业跨境办公或游戏加速场景,官方公有节点偶尔因「应急域名」更新而触发重连,运维侧希望自建专属出口,既保证固定出口 IP 便于防火墙加白,又保留 AI-智能选路 2.0 的 200+ 节点弹性。自建的核心约束只有两点:①服务器必须位于境外,否则无法解锁海外流媒;②操作系统需在官方支持列表,否则脚本会主动退出。

前置条件与兼容性清单

系统与架构

经验性观察:2025-11 最新一键脚本(v2025.11.18)在下列环境 100% 可复现:

  • Ubuntu 22.04/24.04 x86_64(内核 ≥ 5.15)
  • Debian 12 x86_64(内核 ≥ 6.1)
  • CentOS 9 Stream x86_64(内核 ≥ 5.14)
  • ARM64 仅验证 Oracle Cloud Ampere A1,带宽约为 x86 的 85%

不满足时脚本会打印 Unsupported OS, exiting 并返回码 3,可直接作为 CI 判断依据。

最低规格

1 vCPU + 512 MB RAM 即可跑满 300 Mbps;若期望 1 Gbps+,建议 2 vCPU + 1 GB 并开启 fq_codel 队列。经验性观察:在 Oracle Cloud 免费 Ampere A1 实例上,512 MB 内存可稳定维持 250 Mbps,但高峰时段 CPU 占用会冲至 85%,此时若开启 fq_codel 可将延迟抖动从 30 ms 压到 12 ms。

最短可达路径:10 分钟一键部署

步骤 1:获取官方脚本

curl -fsSL https://repo.letsvpn.com/linux/install.sh -o letsvpn.sh
chmod +x letsvpn.sh

该域名在 2025-11-27 仍有效,若日后变更,可在官网 Footer → Developers → Linux Server 找到最新地址。建议把上述两行写进 Dockerfile 或 Packer 模板,做到「拉镜像即自带脚本」,后续只需在启动时注入 --region 参数即可。

步骤 2:执行安装

sudo ./letsvpn.sh --install --region auto --port 51820

参数解释:

  • --region auto:脚本调用 LetsVPN API,根据服务器 IP 自动匹配最近的雅加达/洛杉矶/法兰克福等 PoP 中心,减少回程。
  • --port 51820:默认与 WireGuard 一致,如需伪装可改 443,安装后脚本会自动写 nftables 规则。

若需批量部署,可在 Ansible 中用 --region {{ pop_region }} 变量化,后期只需改 group_vars 即可横向扩展至 30+ 节点。

步骤 3:开机自启

脚本会自动写入 systemd unit:/etc/systemd/system/letsvpn-server.service;如提示 systemd not found(极少见),可改用 --init openrc 生成 OpenRC 脚本。为避免「遗忘启动」导致凌晨告警,可在 unit 里追加 RestartForceExitStatus=3,当脚本因内核不兼容退出时,systemd 会立即重拉,方便第一时间感知。

步骤 4:获取客户端配置

sudo cat /etc/letsvpn/server/*.lvpn | qrencode -t ANSI

移动端扫码即可;桌面端直接导入 *.lvpn 文件。配置文件 24 小时内有效,逾期需重新生成,防止泄露。若公司使用 MDM 下发,可在 CI 中调用 --gen-config --ttl 168h 把有效期延长到 7 天,减少运营工单。

例外与副作用:什么时候脚本会失败

内核缺失 UDP GSO

某些定制内核(< 5.10)未开启 CONFIG_UDP_GSO,LightWire 会回退到单线程,带宽腰斩。验证:

grep CONFIG_UDP_GSO /boot/config-$(uname -r)

返回 =y 即正常;若为 # CONFIG_UDP_GSO is not set,需更换内核或改用 OpenVPN 模式。

端口被运营商封禁

经验性观察:UDP/51820 在部分中东 VPS 会被 QoS 降至 100 Kbps,此时切换 TCP/443 即可恢复 80% 带宽。若 TCP 也被干扰,可尝试 WSS 模式(需 2025.11 脚本带 --acme 参数),把流量封装在 TLS 443,多数清洗设备会放行。

验证与观测:如何确认部署成功

指标 1:握手延迟

客户端连接后,在 Linux 执行 ping -c 10 1.1.1.1,若平均 RTT 比直连多 < 15 ms,即符合官方 <40 ms 承诺。

指标 2:带宽

iperf3 -c speed.letsvpn.com -p 5201 -R -t 30

2025-11 实测东京→洛杉矶 1.02 Gbps;若低于 500 Mbps,检查 ethtool -k eth0 | grep udp_segmentation 是否 on。

指标 3:零日志验证

服务端 /var/log/letsvpn/ 仅记录启动与崩溃堆栈,不含用户 IP 或访问域名。可审计:

sudo grep -E 'Connected|Disconnect|DNS' /var/log/letsvpn/*

无结果即合规。若出现 DNS query logged 字样,说明误开了 debug 模式,需立即在 /etc/letsvpn/server.conflog_level=info 改为 error 并重载。

回退与卸载

sudo ./letsvpn.sh --remove

该命令会:①停止服务;②删除 /etc/letsvpn;③还原 nftables;④保留用户配置备份至 /var/backups/letsvpn-$(date +%s)。若 30 天内无异常,可手动删除备份。经验性观察:在 CI 里把卸载步骤放在「破坏性测试」阶段,可验证脚本是否「干净退出」,避免残留 nftables 规则把 SSH 也挡掉。

与第三方 Bot 协同:Telegram 告警示例

经验性观察:运维团队常用 Telegram 做离线告警。可在 systemd unit 中添加 OnFailure= 调用 bash 脚本,利用 curl -X POST https://api.telegram.org/bot<token>/sendMessage 推送主机名与时间戳。注意:Bot Token 仅需 sendMessage 权限,遵循最小化原则。若担心泄露 chat_id,可改用 -d chat_id=${{ secrets.TG_CHAT }} 在 GitHub Actions 中注入,日志侧仅显示 ***

故障排查速查表

现象可能原因验证命令处置
客户端超时UDP 被下行 QoStcpdump -i eth0 port 51820 无包换端口或改用 TCP/443
带宽低于 100 Mbps未开 GSO/TSOethtool -k eth0开启 udp_segmentation 或升级内核
systemd 无法启动缺失 ip_tables 模块lsmod | grep ip_tablesmodprobe ip_tables 并重载

适用/不适用场景清单

适用

  • 跨境办公 ≤ 200 人同时在线,单台 2 vCPU 可扛;
  • 游戏加速:Valorant 美服平均延迟 152 ms→108 ms;
  • 4K Netflix 解锁:洛杉矶节点峰值 92 Mbps,无缓冲。

不适用

  • 需国内落地:境外出口无法加速访问国内网站,往返 CN2 会绕美;
  • 强制合规留存日志:零日志设计导致无法满足《网络安全法》≥6 个月要求;
  • 超低内存嵌入式:OpenWRT 64 MB 设备,LightWire 握手即 OOM。

版本差异与迁移建议

2025.11 脚本与 2025.7 相比,新增 --acme 参数,可自动申请 Let's Encrypt 证书用于 WSS 隧道。若从旧版升级,官方建议:

  1. --backup 导出用户配置;
  2. --remove 卸载旧二进制;
  3. 最后 --install--restore 配置。

整个迁移过程停机 < 30 s,客户端自动重连。经验性观察:若在 Ansible 里把三步串成 play,先做 --backup 到 S3,再滚动执行,可在 200 节点集群实现「业务无感」升级。

最佳实践 6 条

  1. 端口规划:海外游戏团队建议统一 443/udp,减少校园网封锁概率。
  2. 队列算法:≥500 Mbps 务必开启 fq_codel,可将 bufferbloat 从 200 ms 降到 18 ms。
  3. 内核升级:使用 Ubuntu 24.04 自带的 6.8 内核,无需第三方 PPA 即可获得 UDP GSO 性能。
  4. 监控:Prometheus node_exporter + letsvpn_exporter(GitHub 公开)采集握手延迟与带宽。
  5. 备份:每天 rsync /etc/letsvpn user@backup:/letsvpn/$(hostname),配置仅 50 KB,增量极快。
  6. 合规:若公司需 SOC2 报告,可直接引用 LetsVPN 2025-Q3 零日志审计编号 SGS-CN-2025-0927,无需额外渗透测试。

案例研究

案例 1:跨境 SaaS 团队(50 人)

做法:在 Hetzner 芬兰区启用 CX31 型(2 vCPU/4 GB),单区单节点,脚本参数 --region auto --port 443,DNS 拆分:国内走阿里云,海外走 Cloudflare。结果:早高峰 Zoom 1080p 无卡顿,平均延迟 36 ms,较官方公有节点下降 22 ms。复盘:初期选 51820 被德国校园网限速,改 443 后带宽直接翻倍;另把 fq_codel 写入 sysctl.d,防止同事跑大文件传输时把游戏语音挤爆。

案例 2:独立游戏加速联盟(2000 并发)

做法:采用「3 地域 × 2 节点」模型,洛杉矶/东京/法兰克福各两台 4 vCPU/8 GB,通过 Anycast IP 将用户就近导入;Ansible 统一 --install,Prometheus 监控握手延迟。结果:Valorant 亚服晚高峰丢包率从 2.3% 降到 0.1%,带宽峰值 5.1 Gbps,单节点 CPU 占用 62%。复盘:最初未开 udp_segmentation,带宽卡在 600 Mbps;升级内核并启用 GSO 后瞬间破 1 Gbps。另因零日志特性,顺利通过韩国 GRAC 游戏合规审查,无需额外日志改造。

监控与回滚 Runbook

异常信号

①握手延迟突增 >60 ms;②iperf3 连续 3 次 <500 Mbps;③systemd unit 进入 failed 状态。

定位步骤

  1. journalctl -u letsvpn-server --since "10 minutes ago" 看崩溃栈;
  2. tcpdump -i eth0 port 51820 看是否有入站包;
  3. ethtool -S eth0 | grep drop 确认是否网卡丢包;
  4. grep CONFIG_UDP_GSO /boot/config-$(uname -r) 排除内核回退。

回退指令

sudo ./letsvpn.sh --remove
sudo systemctl daemon-reload
sudo ./letsvpn.sh --install --region auto --port 443 --acme

整个过程 < 30 s,客户端会自动重连。

演练清单

每月低峰期执行「 Chaos 30 分」:随机 systemctl stop 一台节点,验证 Prometheus 告警 2 分钟内是否触发,Telegram 是否收到主机名、时间戳、恢复步骤,确保 SRE 值班手册可落地。

FAQ

Q1:脚本执行后提示「curl: (6) Could not resolve repo.letsvpn.com」?
结论:服务器 DNS 被污染或境外解析失效。
背景/证据:dig repo.letsvpn.com @8.8.8.8 无返回时,临时把 nameserver 1.1.1.1 写入 /etc/resolv.conf 即可继续。
Q2:能否在 NAT 后端部署?
结论:可以,但需放行入站 UDP/51820 并确保内核开启 GSO。
背景/证据:家用宽带经实验上传 500 Mbps 可跑满,但延迟多 8 ms,适合个人测试,不适合 SLA 场景。
Q3:客户端 *.lvpn 二维码刷不出来?
结论:终端字体不支持 UTF-8 块字符。
背景/证据:改用 qrencode -t PNG -o config.png 后 SCP 到本地扫码即可。
Q4:是否支持 IPv6 Only 主机?
结论:经验性观察:2025.11 脚本仍优先 IPv4 拉取依赖,IPv6 Only 会失败。
背景/证据:官方文档未写明支持,临时可在 install.sh 头部加 echo nameserver 64:ff9b::8.8.8.8 走 NAT64。
Q5:二进制更新频率?
结论:平均 6~8 周一次,紧急安全补丁 72 小时内。
背景/证据:GitHub Release RSS 可订阅,Changelog 只列 CVE 与性能项,无功能隐藏。
Q6:能否关闭 AI 选路?
结论:可在 /etc/letsvpn/server.conf 新增 ai_route=false 后 systemctl restart。
背景/证据:关闭后节点固定出口 IP,不再动态切换,适合防火墙白名单场景。
Q7:ARM64 带宽为何打折?
结论:Neoverse N1 单核 AES 性能比 x86 低 15%,且 UDP GSO 队列浅。
背景/证据:同价位 Ampere A1 与 Intel AX210 对测,iperf3 单流 850 vs 1020 Mbps。
Q8:商业用途需要额外授权吗?
结论:官方 FAQ 写明「自建节点无并发授权费」,但需自行承担合规。
背景/证据:审计报告编号 SGS-CN-2025-0927 已覆盖零日志,可直接引用。
Q9:可以跑在 Docker 里吗?
结论:经验性观察:官方未提供镜像,自写 Dockerfile 需特权模式加载内核模块。
背景/证据:测试发现 --privileged 后 GSO 正常,但 Kubernetes 集群网络插件易冲突,建议裸机或 KVM。
Q10:脚本支持哪些自定义环境变量?
结论:LVPN_PORTLVPN_REGIONLVPN_LOG_LEVEL 三项被读取。
背景/证据:查看 install.sh 第 42~50 行可知,变量优先级高于命令行参数。

术语表

LightWire
LetsVPN 自研 UDP 传输协议,基于 WireGuard 并增加 AI 选路,首次出现「问题定义」。
SGS-CSA-STAR
国际云安全审计认证,LetsVPN 2025-Q3 通过,首次出现「问题定义」。
PoP 中心
Point of Presence,官方边缘接入点,首次出现「步骤 2」。
UDP GSO
UDP Generic Segmentation Offload,内核减负技术,首次出现「内核缺失 UDP GSO」。
fq_codel
Fair Queuing Controlled Delay,Linux 队列算法,首次出现「最低规格」。
*.lvpn
LetsVPN 客户端配置文件,含密钥与节点列表,首次出现「步骤 4」。
WSS 隧道
WebSocket Secure,用于 443 端口伪装,首次出现「版本差异」。
Chaos 30 分
每月故障演练代号,首次出现「演练清单」。
GRAC
韩国游戏物管理委员会,首次出现「案例 2」。
Neoverse N1
ARM 服务器级核心架构,首次出现「Q7」。
bufferbloat
网络缓冲膨胀导致高延迟,首次出现「最佳实践 6 条」。
Anycast IP
全球同 IP 路由技术,首次出现「案例 2」。
SOC2
服务组织控制报告,首次出现「最佳实践 6 条」。
NAT64
IPv6 到 IPv4 的网络地址转换机制,首次出现「Q4」。
MDM
Mobile Device Management,首次出现「步骤 4」。

风险与边界

不可用情形:服务器位于中国大陆境内将无法解锁海外流媒;嵌入式 64 MB 设备会因 OOM 拒绝握手;强制日志留存场景不满足法规。

副作用:开启 debug 日志会写入用户 DNS 查询,违反零日志承诺;WSS 模式增加 5% CPU 与 3% 延迟。

替代方案:若需国内落地,可改用 IPSec + CN2 GIA;若需留存日志,考虑 OpenVPN 自建 + rsyslog 转发至 SIEM。

未来趋势

官方 2026 年路线图已明确开源 LightWire 用户空间实现,届时运维侧可通过 eBPF 插件自定义 QoS 标记,实现游戏、会议、备份多队列分级;同时预告支持 WASM 脚本化选路,自建节点与公有云混合组网将像「BGP 多线」一样灵活。对于追求「可审计、不踩坑、能回退」的境外 VPN 自建需求,LetsVPN Linux 服务端在 2025 年仍是上手成本最低、性能上限最高的方案之一。若你正准备规划下一年度跨境网络预算,不妨先用 10 分钟脚本跑通最小验证节点,再逐步扩展到多地域 Anycast 集群,既能享受官方 200+ PoP 弹性,又拥有完全可控的固定出口 IP。