WireGuard 打通本地网络和阿里云 ECS组件内网

发布于 2025-09-18  46.28k 次阅读


### WireGuard 要比OpenVPN、IPSec、ZeroTier、Ngrok等更优秀可靠




#### 第一步:准备工作

1. **阿里云 ECS 配置**:

- 确保 ECS 实例有一个**公网 IP**(无论是固定弹性IP还是临时分配的)。
- 在 ECS 的**安全组**中,放行 UDP 协议,端口号为 `51820`(WireGuard 默认端口,可自定义)。这是最关键的一步。
- (可选但推荐)为 ECS 实例设置一个**弹性公网 IP (EIP)**,避免重启后公网IP变化。

2. **软件安装**:

- **在阿里云 ECS (Linux) 上**:

bash

```
# Ubuntu/Debian
sudo apt update && sudo apt install wireguard

# CentOS/Rocky/AlmaLinux
sudo yum install epel-release
sudo yum install wireguard-tools

# 或者使用官方最新版本脚本
curl -o- https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh | sudo bash
```

- **在本地计算机上**:

- **Linux**:安装方式同 ECS。
- **Windows**:从 [官网](https://www.wireguard.com/install/) 下载并安装 WireGuard 图形化客户端。
- **macOS**:`brew install wireguard-tools` 或在 App Store 安装图形化客户端。

------

#### 第二步:生成密钥对

**在阿里云 ECS 和本地计算机上分别执行以下命令**,生成公钥和私钥:

bash

```
# 生成私钥
umask 077
wg genkey > privatekey

# 从私钥生成公钥
wg pubkey < privatekey > publickey
```

你会得到两个文件:`privatekey` 和 `publickey`。**私钥必须严格保密**,公钥则用于配置对端。

------

#### 第三步:配置 WireGuard

**1. 阿里云 ECS(服务端)配置**

创建配置文件:`sudo nano /etc/wireguard/wg0.conf`

ini

```
# /etc/wireguard/wg0.conf
[Interface]
# ECS 在 WireGuard 网络中的地址
Address = 10.0.0.1/24
# 监听端口
ListenPort = 51820
# 本机的私钥 (ECS 的私钥)
PrivateKey =

[Peer]
# 本地计算机的公钥 (Peer_Public_Key_Here)
PublicKey =
# 允许来自这个 Peer 的流量访问本机
AllowedIPs = 10.0.0.2/32
# 如果本地计算机有固定公网IP,可以写在这里,否则留空(使用心跳保持连接)
# PersistentKeepalive = 25
```

**2. 本地计算机(客户端)配置**

- **Linux**:创建配置文件 `/etc/wireguard/wg0.conf`
- **Windows/macOS**:通过图形界面添加隧道,新建空隧道并编辑配置。

配置内容:

ini

```
# 本地计算机的 wg0.conf
[Interface]
# 本地计算机在 WireGuard 网络中的地址
Address = 10.0.0.2/24
# 本机的私钥 (本地计算机的私钥)
PrivateKey =

[Peer]
# ECS 的公钥 (ECS_Public_Key_Here)
PublicKey =
# 允许访问的网段:指向 ECS 的 WireGuard IP,以及希望通过 ECS 访问的其他 VPC 网段(例如 172.16.0.0/16)
AllowedIPs = 10.0.0.1/32, 172.16.0.0/16
# ECS 的公网 IP 和端口
Endpoint = :51820
# 非常重要!本地在 NAT 后,需要持续发送心跳包保持连接
PersistentKeepalive = 25
```

------

#### 第四步:启动并测试连接

1. **在阿里云 ECS 上启动 WireGuard**:

bash

```
# 启动隧道
sudo wg-quick up wg0
# 设置开机自启
sudo systemctl enable wg-quick@wg0
```

2. **在本地计算机上启动 WireGuard**:

- **Linux**:`sudo wg-quick up wg0`
- **Windows/macOS**:在图形化客户端中激活刚刚创建的隧道。

3. **测试连通性**:

- 在本地计算机上 ping ECS 的 WireGuard IP:

bash

```
ping 10.0.0.1
```

- 在 ECS 上 ping 本地计算机的 WireGuard IP:

bash

```
ping 10.0.0.2
```

- 检查 WireGuard 状态,查看是否握手成功:

bash

```
sudo wg show
# 如果输出中有 `latest handshake` 时间,说明连接成功!
```

------

#### 第五步:配置路由(访问 VPC 内其他资源)

如果你想让本地计算机能访问 ECS 所在 VPC 的其他机器(如内网 RDS、Redis 等),需做额外配置:

1. **在 ECS 上启用 IP 转发**:

bash

```
# 编辑 sysctl 配置
sudo nano /etc/sysctl.conf
# 取消注释或添加以下行
net.ipv4.ip_forward=1
# 使配置生效
sudo sysctl -p
```

2. **修改 ECS 的 WireGuard 配置**:
在 `[Peer]` 部分,修改 `AllowedIPs`,添加你希望本地能访问的 VPC 网段。

ini

```
# /etc/wireguard/wg0.conf (ECS 上)
[Peer]
PublicKey =
AllowedIPs = 10.0.0.2/32, 192.168.1.0/24 # 添加你的本地局域网网段(如果需要)
```

3. **修改本地计算机的 WireGuard 配置**:
在 `[Peer]` 部分,修改 `AllowedIPs`,添加 VPC 的网段。

ini

```
# 本地计算机的 wg0.conf
[Peer]
...
AllowedIPs = 10.0.0.0/24, 172.16.0.0/16 # ECS 的 VPC 网段
```

4. **添加 VPC 路由**(可选):
如果你希望 VPC 内的其他机器也能回包到你的本地计算机,需要在 VPC 的路由表中添加一条规则:目标网段为你本地局域网网段(如 `192.168.1.0/24`),下一跳指向你的 ECS 实例。