Article
用 WireGuard 把家里的开发环境接出来
家里的服务器没有公网 IP。用一台阿里云 ECS 做 WireGuard 中转后,笔记本可以连上家里的机器,Cursor 和 Codex 也能 SSH 过去开发、跑测试。
家里的服务器没有公网 IP。NAS、路由器和其他机器都在这层内网里。人在外面时,笔记本连不进去,Cursor 和 Codex 也碰不到这些环境。
我加了一台有公网 IP 的阿里云 ECS,只拿它做中转。家里的服务器和开发机器 2 主动连上去,笔记本也连上去,流量由 ECS 转发。
VPN 网段是 10.0.0.0/24。ECS 是 10.0.0.1,家里服务器是 10.0.0.2,笔记本是 10.0.0.3,开发机器 2 是 10.0.0.4。
密钥
每台机器装好 WireGuard 之后,各自生成一对密钥,放在 ~/.wgkeys。机器之间只交换公钥。
mkdir -p ~/.wgkeys
chmod 700 ~/.wgkeys
wg genkey | tee ~/.wgkeys/privatekey | wg pubkey > ~/.wgkeys/publickey
chmod 600 ~/.wgkeys/privatekey
私钥留在本机,不要放进仓库。
阿里云 ECS
Ubuntu 上安装:
sudo apt update
sudo apt install wireguard -y
配置写在 /etc/wireguard/wg0.conf。密钥换成 ~/.wgkeys 里的内容。
[Interface]
PrivateKey = ECS_private_key
Address = 10.0.0.1/24
ListenPort = 51820
PostUp = sysctl -w net.ipv4.ip_forward=1
PostDown = sysctl -w net.ipv4.ip_forward=0
[Peer]
PublicKey = HOME_public_key
AllowedIPs = 10.0.0.2/32
[Peer]
PublicKey = LAPTOP_public_key
AllowedIPs = 10.0.0.3/32
[Peer]
PublicKey = DEV2_public_key
AllowedIPs = 10.0.0.4/32
ip_forward 要打开,这几台机器才能互通。AllowedIPs 写对方的地址,ECS 靠它把包转给对应的机器。
sudo chmod 600 /etc/wireguard/wg0.conf
sudo wg-quick up wg0
sudo systemctl enable wg-quick@wg0
安全组入方向放行 UDP 51820。
家里的服务器
安装方式和 ECS 一样。配置:
[Interface]
PrivateKey = HOME_private_key
Address = 10.0.0.2/24
PostUp = sysctl -w net.ipv4.ip_forward=1
PostDown = sysctl -w net.ipv4.ip_forward=0
[Peer]
PublicKey = ECS_public_key
Endpoint = ECS公网IP:51820
AllowedIPs = 10.0.0.0/24
PersistentKeepalive = 25
家里没有公网 IP,所以由这台机器主动连出去。PersistentKeepalive = 25 用来保住宽带上的映射。AllowedIPs 只写 VPN 网段,平时上网还是走原来的宽带。
启动命令和 ECS 相同。这台机器要能 SSH 登录。
开发机器 2
Linux 上照家里服务器配,Address 写成 10.0.0.4/24。
Windows 则安装 WireGuard 客户端。打开后选择 Add Tunnel → Add empty tunnel,客户端会生成密钥。公钥填进 ECS 上 DEV2_public_key 那一段,隧道配置写成:
[Interface]
PrivateKey = DEV2_private_key
Address = 10.0.0.4/24
[Peer]
PublicKey = ECS_public_key
Endpoint = ECS公网IP:51820
AllowedIPs = 10.0.0.0/24
PersistentKeepalive = 25
保存后点 Activate。Windows 不用写 PostUp。要让 Cursor 或 Codex 连上这台电脑,在系统里启用 OpenSSH 服务器。
笔记本
Mac 上执行 brew install wireguard-tools。配置放在 Homebrew 的 etc/wireguard/wg0.conf。Apple 芯片一般是 /opt/homebrew/etc/wireguard/wg0.conf,Intel 是 /usr/local/etc/wireguard/wg0.conf。
[Interface]
PrivateKey = LAPTOP_private_key
Address = 10.0.0.3/24
[Peer]
PublicKey = ECS_public_key
Endpoint = ECS公网IP:51820
AllowedIPs = 10.0.0.0/24
PersistentKeepalive = 25
sudo wg-quick up wg0
不用的时候执行 sudo wg-quick down wg0。
确认隧道是通的
sudo wg show
ping 10.0.0.2
ssh dev@10.0.0.2
wg show 里能看到 latest handshake,SSH 能登录,隧道就通了。dev 换成家里服务器上的账号。
访问家里的局域网
上面只能连到 10.0.0.2。要访问 NAS 和其他内网设备,把家里的网段加进 AllowedIPs。下面用 192.168.1.0/24 举例,换成实际网段。
ECS 上,家里服务器那一段写成:
AllowedIPs = 10.0.0.2/32, 192.168.1.0/24
笔记本和 Windows 上的开发机器 2 写成:
AllowedIPs = 10.0.0.0/24, 192.168.1.0/24
然后在路由器上加一条静态路由,把 10.0.0.0/24 指向家里服务器的局域网地址。回包才找得到路。改完重新拉起隧道,再 ping 一台 NAS。
用 Cursor 和 Codex 连上去开发
笔记本的 ~/.ssh/config:
Host home
HostName 10.0.0.2
User dev
Host dev2
HostName 10.0.0.4
User dev
先确认 ssh home 和 ssh dev2 能用密钥登录。
Cursor 在命令面板里运行 Remote-SSH: Connect to Host,选 home 或 dev2。Codex 在 ChatGPT 桌面版的 Settings → Connections 里启用对应的机器,再打开远端项目。文件和命令都在那台机器上执行,编辑器还在笔记本上。远端装好对应工具,并且要能访问外网。
这样就可以把编译和测试放在家里服务器或开发机器 2 上,笔记本只负责开编辑器。
测试环境放在内网
服务可以跑在家里服务器或开发机器 2 上,例如打开 http://10.0.0.2:8080 或 http://10.0.0.4:8080。数据库也连这些地址。
这些端口只给连进 VPN 的机器用,不在 ECS 上做端口映射。
人在外面时,先把笔记本的 wg0 拉起来。