Administrator
发布于 2026-05-17 / 2 阅读

私人VPN搭建(WireGuard)

私人VPN搭建实现 「只有访问 192.168.31.0/24 网段才走 VPN」 的目标。


最终目标

  • VPN 服务器:您的 Ubuntu 服务器(内网 IP 192.168.31.15,公网域名 example.com:1111

  • 客户端:您的设备(电脑/手机)

  • 分流规则:客户端仅将目的地为 192.168.31.0/24的流量发送至 VPN 服务器,其他流量(如上网)直接走本地网络。


第一步:服务器端配置(在 Ubuntu 服务器上操作)

1. 安装 WireGuard


sudo apt update && sudo apt install -y wireguard

2. 生成服务器密钥对


sudo mkdir -p /etc/wireguard

cd /etc/wireguard

# 生成服端 key

sudo wg genkey | tee privatekey | wg pubkey > publickey

3. 创建服务器配置文件

编辑 /etc/wireguard/wg0.conf


[Interface]

PrivateKey = <服务器私钥>  # 填入上面生成的 privatekey 内容

Address = 10.0.0.1/24      # VPN 虚拟网络,服务器占 .1

ListenPort = 1111         # 监听端口



# 关键:设置 NAT 和路由,允许客户端访问 192.168.31.0/24

PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o enp1s0 -s 10.0.0.0/24 -j MASQUERADE

PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o enp1s0 -s 10.0.0.0/24 -j MASQUERADE

4. 启用 IP 转发并配置防火墙


# 启用 IP 转发

echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf

sudo sysctl -p



# 开放 WireGuard 端口

sudo ufw allow 1111/udp

5. 启动 WireGuard 服务


sudo systemctl enable wg-quick@wg0

sudo systemctl start wg-quick@wg0

sudo wg show  # 检查状态


第二步:生成客户端配置(在服务器上操作)

在服务器上,为您的设备生成一个客户端配置。

1. 生成客户端密钥对


cd /etc/wireguard

CLIENT_IP="10.0.0.2"

CLIENT_PRIVATEKEY=$(wg genkey)

CLIENT_PUBLICKEY=$(echo $CLIENT_PRIVATEKEY | wg pubkey)

2. 创建客户端配置文件

创建文件 /etc/wireguard/clients/your_device.conf


[Interface]

PrivateKey = <客户端私钥>  # 填入上面生成的 CLIENT_PRIVATEKEY

Address = 10.0.0.2/24     # 为客户端分配的 VPN IP

DNS = 8.8.8.8             # 可选,设置 DNS



[Peer]

PublicKey = <服务器公钥>  # 填入 /etc/wireguard/publickey 的内容

Endpoint = frp-dad.com:51820  # 您的服务器公网地址



# !!!核心配置:只允许 192.168.31.0/24 网段走 VPN !!!

AllowedIPs = 192.168.31.0/24



# 保持连接

PersistentKeepalive = 25

3. 将客户端公钥添加到服务器

在服务器配置 /etc/wireguard/wg0.conf末尾添加:


[Peer]

PublicKey = <客户端公钥>  # 填入上面生成的 CLIENT_PUBLICKEY

AllowedIPs = 10.0.0.2/32  # 只允许这个客户端 IP 连接

4. 重新加载服务器配置


sudo wg syncconf wg0 <(wg-quick strip wg0)


第三步:客户端配置(在您的设备上操作)

1. 安装 WireGuard 客户端

  • Windows/macOS:从官网下载安装

  • Linuxsudo apt install wireguard

  • Android/iOS:从应用商店安装

2. 导入配置文件

将第二步第 2 点中生成的 完整客户端配置(即 /etc/wireguard/clients/your_device.conf的内容)导入到客户端的 WireGuard App 中。

关键检查点:确保配置中的 AllowedIPs = 192.168.31.0/24

3. 连接测试

  1. 在客户端 WireGuard App 中,激活连接。

  2. 测试内网连通性:尝试 ping 或访问 192.168.31.0/24网段内的任何一个地址(例如 192.168.31.1192.168.31.11),应该能通。

  3. 测试公网连通性:访问 ifconfig.me查看您的公网 IP。此时显示的 IP 应该是您本地网络的公网 IP,而不是 VPN 服务器的 IP。这证明您的互联网流量没有经过 VPN。


第四步:故障排查

如果连接失败,请按以下顺序检查:

1. 服务器端检查


# 检查 WireGuard 状态

sudo wg show



# 检查端口监听

sudo ss -tuln | grep 1111



# 检查防火墙

sudo ufw status

2. 客户端检查

  • 确认配置中的 Endpoint地址和端口正确。

  • 确认 AllowedIPs设置正确。

  • 检查客户端的路由表,确认只有目标为 192.168.31.0/24的流量指向 VPN 接口。

3. 网络检查

  • 确保服务器的防火墙/安全组放行了 UDP 1111 端口。

  • 如果使用了 内网穿透,请确认 服务端和客户端的配置正确,且转发的是 UDP 协议。



评论