下篇:AWS Lightsail 实战:使用 WireGuard 搭建省心的个人安全隧道

在[上篇]中,我们聊了为什么放弃 EC2 转投 Lightsail,以及为什么“美西”比“美东”更靠谱。机器选好了(Lightsail + us-west-2 + Ubuntu 24.04 LTS),接下来就是动手搭建隧道。
中间我考虑过几种不同的协议方案,但最后还是回到了 WireGuard。原因很简单:配置干净、协议轻、性能好、不需要复杂的 Web 面板,后续的维护成本极低。如果你只是想给自己用,不想引入太多额外复杂度,WireGuard 是非常合适的方案。
下面是我最终跑通的完整搭建与多端接入流程,以及我踩过的坑。
一、基础环境准备
1. 记录公网 IP
在 Lightsail 创建好 wg-us-west 实例后,首先记下它的公网 IPv4 地址(假设为 35.xx.xx.xx)。
2. 配置防火墙
在 Lightsail 控制台的 Networking 页面里,修改防火墙规则:
保留:
SSH / TCP / 22(用于远程登录)新增:
Custom / UDP / 51820(WireGuard 默认端口,注意是 UDP)
建议:如果你不是跑网站,把没用的 HTTP 80、HTTPS 443 都删掉,减少多余的端口暴露,提升安全性。
二、服务端:安装与配置 WireGuard
1. 安装软件与开启转发
通过 SSH 登录服务器,依次执行以下命令:
Bash
# 更新软件源并安装 WireGuard 和二维码工具
sudo apt update
sudo apt install -y wireguard qrencode curl
# 开启 IPv4 流量转发
echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-wireguard.conf
sudo sysctl --system
2. 确认真实网卡名称(重点避坑!)
这是一个极其容易踩坑的地方! 执行下面这条命令,查看你的公网出口网卡名:
Bash
ip route get 1.1.1.1
我这次查出来的是 dev ens5。请务必记住你的网卡名(比如 ens5 或 eth0),后面的配置文件里必须填真实的网卡名,绝不能照抄网上的占位符。
3. 生成服务端密钥
Bash
umask 077
wg genkey | tee server_private.key | wg pubkey > server_public.key
# 查看并记录密钥(私钥绝不能公开!)
cat server_private.key
cat server_public.key
4. 编写服务端配置
编辑配置文件:
Bash
sudo vim /etc/wireguard/wg0.conf
写入以下内容(注意替换 <服务端私钥> 和 ens5):
Ini, TOML
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = <服务端私钥>
# 注意:下面的 ens5 必须替换成你刚才查到的真实网卡名!
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens5 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens5 -j MASQUERADE
5. 启动服务端
Bash
sudo systemctl enable --now wg-quick@wg0
sudo wg
如果出现 interface: wg0、listening port: 51820 等信息,说明服务端已经成功跑起来了。
三、电脑客户端接入 (电脑与手机)
为了避免后期混乱,建议在开始配置客户端之前,先在心里(或记事本上)列一张分配表:
有了这张表,我们在写节点 [Peer] 配置时就不会把 IP 搞混了
1. 生成客户端密钥
在服务器上继续操作,为电脑生成独立密钥:
Bash
wg genkey | tee client1_private.key | wg pubkey > client1_public.key
2. 将电脑注册到服务端
编辑 /etc/wireguard/wg0.conf,在文件末尾追加电脑的节点信息:
Ini, TOML
# MacBook
[Peer]
PublicKey = <client1 公钥>
AllowedIPs = 10.8.0.2/32
重启服务端加载配置:
Bash
sudo systemctl restart wg-quick@wg0
3. 整理客户端配置
你需要把以下信息整理成一个 client1.conf 文件,导入到你电脑的 WireGuard 客户端中:
Ini, TOML
[Interface]
PrivateKey = <client1 私钥>
Address = 10.8.0.2/24
DNS = 1.1.1.1
[Peer]
PublicKey = <服务端公钥>
Endpoint = <Lightsail 公网 IP>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
(注:如果你使用的是 Clash Verge 等代理工具,也可以按照其文档将上述节点信息转换为 yaml 格式导入。)
四、手机客户端接入 (以 iPhone 为例)
避坑提醒:每台设备必须单独分配一个 IP 和一套密钥!手机绝对不能和电脑共用 10.8.0.2 或同一套私钥!
1. 生成手机密钥与注册
在服务器上执行:
Bash
wg genkey | tee phone1_private.key | wg pubkey > phone1_public.key
再次编辑 /etc/wireguard/wg0.conf,追加手机节点:
Ini, TOML
# iPhone
[Peer]
PublicKey = <phone1 公钥>
AllowedIPs = 10.8.0.3/32
重启服务端:sudo systemctl restart wg-quick@wg0
2. 生成二维码扫码接入
创建一个 phone1.conf 临时文件,写入和刚才电脑端类似的配置(注意 PrivateKey 换成手机私钥,Address 换成 10.8.0.3/24)。
然后在服务器端执行命令生成二维码:
Bash
qrencode -t ansiutf8 < phone1.conf
打开手机上的 WireGuard 官方 App,选择“从二维码扫描”,扫码保存后直接开启连接即可。
五、验收与排错
怎么判断是真的连上了,还是仅仅“看起来连上了”?
在服务器上执行排错终极命令:
Bash
sudo wg
如果你在输出信息中看到对应的客户端下出现了 latest handshake(最近握手时间) 和 transfer(流量传输数据),那就说明设备真的已经和 WireGuard 服务端完成握手,并且有流量在走。
最后,在本地设备访问 https://ipinfo.io 验证一下出口 IP。只要看到出口已经变成了你的 Lightsail 节点 IP,整条线路就大功告成了!