文章目录
背景Link to heading
由于 Yggdrasil 的 TLS 有可能会被防火墙(GFW)识别,在美国的 VPS 上直接运行 Ygg 并与中国节点组网可能有风险。如果改用 TCP 虽然能避免 TLS 特征,但又缺少加密保护。
为此,我们考虑将 NaiveProxy 作为跳板机,在 Naive 的加密隧道内连接 Ygg 节点(即 Ygg in Naive),从而避免特征被识别,同时确保数据安全。
服务器端配置(美国 VPS)Link to heading
1. 安装依赖Link to heading
sudo apt updatesudo apt install golang-go -y2. 编译带插件的 CaddyLink to heading
这里额外添加了 l4 插件,因为此 VPS 可能还需要用来转发 Minecraft 服务器的流量。
~/go/bin/xcaddy build \ --with github.com/caddyserver/forwardproxy@caddy2=github.com/klzgrad/forwardproxy@naive \ --with github.com/mholt/caddy-l4编译完成后移动到系统路径:
sudo mv ~/go/bin/caddy /usr/bin/caddy然后参考官方文档安装 Caddy 服务管理脚本: 👉 Caddy 官方运行文档
3. 创建专用用户和用户组Link to heading
为安全起见,不要使用 root 来运行 Caddy。
sudo groupadd --system caddy
sudo useradd --system \ --gid caddy \ --create-home \ --home-dir /var/lib/caddy \ --shell /usr/sbin/nologin \ --comment "Caddy web server" \ caddy4. 设置权限Link to heading
sudo chown root:caddy /etc/caddy/Caddyfilesudo chmod 640 /etc/caddy/Caddyfile5. 配置文件 /etc/caddy/CaddyfileLink to heading
:443, xxx.xxx.xxx { route { forward_proxy { basic_auth usr pwd hide_ip hide_via probe_resistance } reverse_proxy https://xxx.com { header_up Host {upstream_hostport} header_up X-Forwarded-Host {host} } }}其中:
usr和pwd替换为自定义的代理认证信息xxx.xxx.xxx替换为 VPS 的域名或 IPhttps://xxx.com替换为需要伪装的网站
6. Systemd 服务文件Link to heading
/etc/systemd/system/caddy.service:
[Unit]Description=CaddyDocumentation=https://caddyserver.com/docs/After=network.target network-online.targetRequires=network-online.target
[Service]User=caddyGroup=caddyExecStart=/usr/bin/caddy run --environ --config /etc/caddy/CaddyfileExecReload=/usr/bin/caddy reload --config /etc/caddy/CaddyfileTimeoutStopSec=5sLimitNOFILE=1048576LimitNPROC=512PrivateTmp=trueProtectSystem=fullAmbientCapabilities=CAP_NET_BIND_SERVICE
[Install]WantedBy=multi-user.target加载并启动服务:
sudo systemctl daemon-reloadsudo systemctl enable caddysudo systemctl start caddy查看运行状态:
sudo systemctl status caddy应用配置文件修改:
sudo systemctl reload caddy安装 YggdrasilLink to heading
下载并安装(Debian 系统):
wget https://github.com/yggdrasil-network/yggdrasil-go/releases/download/v0.5.12/yggdrasil-0.5.12-amd64.debsudo dpkg -i yggdrasil-0.5.12-amd64.deb编辑配置文件 /etc/yggdrasil/yggdrasil.conf:
Listen: ["tcp://[::]:8091?password="]注意:这里用
tcp而不是tls,否则会出现 TLS in TLS 的特征,反而显眼。
防火墙限制Link to heading
仅允许 Naive 本地访问 Ygg 端口:
# IPv4sudo iptables -I INPUT -p tcp --dport 8091 -s 127.0.0.1 -j ACCEPTsudo iptables -A INPUT -p tcp --dport 8091 -j DROP
# IPv6sudo ip6tables -I INPUT -p tcp --dport 8091 -s ::1 -j ACCEPTsudo ip6tables -A INPUT -p tcp --dport 8091 -j DROP客户端配置Link to heading
1. 下载 NaiveProxyLink to heading
创建 config.json:
{ "listen": ["socks://127.0.0.1:1080"], "proxy": "https://usr:pwd@xxx.xxx.xxx", "log": ""}2. Ygg 客户端配置Link to heading
yggdrasil.conf:
Peers: [ "socks://127.0.0.1:1080/[::]:8091?password="]这样,客户端通过 NaiveProxy 的 socks5 转发流量,再由 Naive 安全传输到 VPS,最终进入 Ygg 网络。
总结Link to heading
- NaiveProxy 负责中美之间的加密传输,规避 GFW 特征识别。
- Ygg 在 Naive 内部,保证通信安全和匿名性。
- 防火墙规则确保 Ygg 只能被本机(Naive)访问,避免暴露服务端口。
这套方案能有效提升 Ygg 在跨境场景下的可用性和安全性。
本文部分内容由 GPT-5 辅助生成与整理。