WireGuard 一键附加公网 IP 到内网(内网穿透/家宽“加公网入口”)。
该脚本在“云服务器(服务端)”与“内网服务器(客户端)”之间建立 WireGuard 隧道,并在云侧做 DNAT+SNAT、内网侧做 MASQUERADE:
- 云侧(有公网入口):把除 SSH/WG 自身端口外的入站流量 DNAT 到内网机 wg IP,并对发往内网机的回包做 SNAT→云的 wg IP,固定回程路径
- 内网侧(无公网 IP):可将来自云入口的流量直接给本机服务、Docker,或再 DNAT 给其它内网主机
适配 Debian 11+/Ubuntu 22.04+,需 root 运行。(其他版本或其他发行版使用手动安装)
- 自动检测并安装依赖(两端)
- 一键完成密钥生成(私钥/公钥/PSK)、配置写入、开机自启
- 云侧 SNAT、客户端 MASQUERADE 与基础 FORWARD 放行,默认即稳定
- 仅把“云作为入口”,不劫持默认出口(客户端 AllowedIPs 最小化)
- 网段冲突检测与候选网段切换
- 端口占用检测与快速更换
- 自动探测可用 wg 接口名、出口网卡与私网入站 IP
- 安装快捷命令 wgp,包含 install/reinstall/start/stop/enable/restart/status 等
- 元数据持久化 /etc/wireguard/wgp_meta.json,便于后续管理
- 操作系统:Debian 11+/Ubuntu 22.04+
- 身份:root
- 云服务器:具备公网入口并允许放行 WG 端口和业务端口
- 客户端:能访问外网,具备 SSH 到云的权限(密码或密钥)
-
以 root 运行安装命令:
wget -O wireguard_setup.py https://cnb.cool/likesrt/wireguard_script/-/git/raw/main/wireguard_setup.py && chmod +x wireguard_setup.py && python3 wireguard_setup.py
-
按提示输入:云服务器公网 IP/域名、SSH 用户/端口、认证方式(密码或自动配置密钥免密)
-
程序会:
- 安装两端依赖、生成密钥与预共享密钥(PSK)
- 自动选择可用网段/接口/端口,写入配置
- 在云侧设置 DNAT+SNAT,在客户端设置 MASQUERADE 与转发放行
- 启动两端并保存元数据,安装快捷命令 wgp
完成后可用 wgp status 查看状态。
- 云侧:除 22 与 WG 端口外,所有发往“云私网入站 IP”的包 DNAT → 客户端 wg IP;对发往客户端的包 SNAT → 云的 wg IP(固定回程)
- 客户端:当把 wg 流量再转发到局域网/容器时做 MASQUERADE,确保回包回到内网机 → 再回 WG
- 两端放宽 rp_filter=2,开启 ip_forward=1,以避免非对称路由被丢弃
- 客户端 AllowedIPs 仅包含 云 wg IP 和 云公网 IP,不改变默认出口
详细的手动说明与进阶用法见:手动配置教程.md
- wgp install 一键安装部署
- wgp reinstall 重新安装(清理后重装)
- wgp uninstall 卸载并清理
- wgp start 启动两端
- wgp stop 停止两端
- wgp enable 设置两端开机自启
- wgp restart 重启两端
- wgp status 查看状态
- Handshake:两端执行 wg,确认 latest handshake 正常
- 规则命中:云侧执行 iptables -t nat -L -v -n 与 iptables -L -v -n 观察计数
- 抓包定位:
- 客户端:tcpdump -i wg0 tcp port <端口>
- Docker 场景:tcpdump -i docker0 tcp port <端口>
- 若访问“时好时坏”:确认 all/default/wg0/出口网卡 的 rp_filter 均为 2
- 若 Docker/防火墙拦截:在 DOCKER-USER/INPUT/FORWARD 上按需放行 wg0 流量
更多排错与 Docker/二次 DNAT 场景,请参见手动配置教程.md 的示例。