整体思路 通过一台公网云服务器搭建WireGuard中转节点,所有设备(OpenWrt/手机/电脑)作为客户端接入该节点,形成统一VPN网络,再由OpenWrt把流量引入家庭局域网,实现远程访问内网设备
服务端配置 安装WireGuard 1 apt update && apt install wireguard iptables -y
开启IP转发 1 2 echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf sysctl -p
作用是让服务器具备路由能力,否则VPN之间的数据无法互相转发
设置NAT转发规则 1 iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
作用是把VPN内网流量“伪装成服务器公网流量”,让它能正常访问互联网
允许转发流量 1 2 iptables -A FORWARD -i wg0 -o eth0 -j ACCEPT iptables -A FORWARD -i eth0 -o wg0 -j ACCEPT
允许WireGuard虚拟网段和公网之间双向转发流量,让VPN客户端能正常访问外网并接收返回数据
各个设备密钥生成 1 2 3 4 5 6 7 8 9 10 mkdir -p /etc/wireguard wg genkey | tee server_private.key | wg pubkey | tee server_public.key wg genkey | tee OpenWrt_private.key | wg pubkey | tee OpenWrt_public.key wg genkey | tee android_private.key | wg pubkey | tee android_public.key wg genkey | tee computer_private.key | wg pubkey | tee computer_public.key
WireGuard配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [Interface] PrivateKey = 云服务器的私钥(server_private.key) Address = 10.0.0.1/24 ListenPort = 51820 [Peer] PublicKey = OpenWrt的公钥(OpenWrt_public.key) AllowedIPs = 192.168.2.0/24, 10.0.0.2/32 # 192.168.2.0为本地局域网IP段,请按实际修改 PersistentKeepalive = 25 [Peer] PublicKey = 安卓手机的公钥(android_public.key) AllowedIPs = 10.0.0.3/32 [Peer] PublicKey = 笔记本的公钥(computer_public.key) AllowedIPs = 10.0.0.4/32
启动WireGuard并设置开机自启动 1 2 systemctl start wg-quick@wg0 systemctl enable wg-quick@wg0
OpenWrt客户端配置 安装WireGuard 1 2 opkg update opkg install wireguard-tools kmod-wireguard luci-proto-wireguard
安装完成后需重启OpenWrt使配置生效
网络配置 编辑/etc/config/network加入下面的配置
1 2 3 4 5 6 7 8 9 10 11 config interface 'wg0' option proto 'wireguard' option private_key 'OpenWrt的私钥(OpenWrt_private.key)' list addresses '10.0.0.2/24' config wireguard_wg0 option public_key '云服务器的公钥(server_public.key)' option endpoint_host '云服务器的公网IP' option endpoint_port '51820' option persistent_keepalive '25' list allowed_ips '10.0.0.0/24'
防火墙配置 编辑/etc/config/firewall加入下面的配置
1 2 3 4 5 6 7 config zone option name 'lan' option input 'ACCEPT' option output 'ACCEPT' option forward 'ACCEPT' list network 'lan' list network 'wg0'
重启网络和防火墙 1 2 /etc/init.d/network restart /etc/init.d/firewall restart
Windows客户端配置 进入WireGuard官网下载Windows客户端程序:
https://www.wireguard.com/install/
下载并安装好后按格式填入下面的配置文件就可以连接上了,Mac客户端也同理
1 2 3 4 5 6 7 8 9 [Interface] PrivateKey = computer_private.keyAddress = 10.0 .0.3 /24 [Peer] PublicKey = server_publicEndpoint = server_ip:51820 AllowedIPs = 192.168 .2.0 /24 ,10.0 .0.0 /24 PersistentKeepalive = 25
Android客户端 进入WireGuard官网下载Android客户端程序:
https://www.wireguard.com/install/
下载并安装好后按格式填入下面的配置文件就可以连接上了,iOS客户端也同理
最终效果 flowchart LR
subgraph WAN[外部网络]
A1[手机]
A2[笔记本]
end
subgraph VPS[云服务器]
B1[WireGuard服务端 10.0.0.1]
B2[NAT转发]
end
subgraph HOME[家庭网络]
C1[OpenWrt 10.0.0.2]
C2[家庭LAN 192.168.2.0/24]
C3[NAS/PC/IoT]
end
A1 --> B1
A2 --> B1
B1 --> B2
B2 --> C1
C1 --> C2
C2 --> C3