私人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:从官网下载安装
-
Linux:
sudo apt install wireguard -
Android/iOS:从应用商店安装
2. 导入配置文件
将第二步第 2 点中生成的 完整客户端配置(即 /etc/wireguard/clients/your_device.conf的内容)导入到客户端的 WireGuard App 中。
关键检查点:确保配置中的 AllowedIPs = 192.168.31.0/24。
3. 连接测试
-
在客户端 WireGuard App 中,激活连接。
-
测试内网连通性:尝试 ping 或访问
192.168.31.0/24网段内的任何一个地址(例如192.168.31.1或192.168.31.11),应该能通。 -
测试公网连通性:访问 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 协议。