使用WireGuard访问OpenWrt路由器下的局域网设备

这个月开始放暑假了,闲的没事开始搞起了异地组网,这次记录一下我怎么配置的WireGuard

服务端配置

首先我们要有一台公网IP的服务器,这个服务器哪里都可以买到,只要宽带高就行,宽带低的话速度太慢了
系统我选择的是Debian,使用Ubuntu的话安装WireGuard的方式是一样的

1
2
3
4
5
6
7
8
9
# 安装WireGuard和iptables
apt update && apt install wireguard iptables -y
# 配置IP转发
sysctl -w net.ipv4.ip_forward=1
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
# 配置NAT规则(如果不懂下面每个配置的含义请保持默认)
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
iptables -A FORWARD -i wg0 -o eth0 -j ACCEPT
iptables -A FORWARD -o wg0 -i eth0 -j ACCEPT

等待跑完代码即可
接下来就是生成密钥,这个密钥就是我们本地设备与服务器互相连通的密码,这串密码非常的复杂,我们用下面的命令生成
我的设备有Debian(服务端),OpenWrt(客户端),安卓手机(客户端),笔记本(客户端),所以我需要生成四串密钥

1
2
3
4
5
6
7
8
9
10
# 新建一个文件夹,这个文件夹存放密钥和配置文件
mkdir -p /etc/wireguard
# 生成Debian(服务端)的密钥
wg genkey | tee server_private.key | wg pubkey | tee server_public.key
# 生成Openwrt(客户端)的密钥
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的配置文件,配置文件位于/etc/wireguard/wg0.conf请自行新建,下面的配置可以直接抄作业,请自行修改配置

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

接着编辑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 '0.0.0.0/0'

接着配置防火墙,不然网络出不去,防火墙的配置文件位于/etc/config/firewall,下面的内容直接复制粘贴即可,什么都不用改,前提是跟着我教程走的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
config rule
option name 'Allow-WireGuard-Inbound'
option src 'wan'
option dest_port '51820'
option proto 'udp'
option target 'ACCEPT'

config zone
option name 'wg'
option network 'wg0'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'ACCEPT'
option masq '1'
option mtu_fix '1'

config forwarding
option src 'wg'
option dest 'lan'

config forwarding
option src 'lan'
option dest 'wg'

前面的文件配置好后就可以重启网络和防火墙然后查看连接了

1
2
/etc/init.d/network restart
/etc/init.d/firewall restart

重启好网络和防火墙后,可以使用wg命令来查看连接情况

安卓手机配置

安卓手机的话可以下载官方的软件,在下面的网站找到安卓设备类型即可
链接:WireGuard官方下载网站
下载好后安装打开,请按下面的格式填写,未提及的请保持默认

1
2
3
4
5
6
7
8
9
10
11
本地(Interface)
名称: 随便填写都可以
私钥: 安卓手机的私钥(android_private.key)
公钥: 自动生成即可
局域网IP: 10.0.0.4/24
!!!添加节点!!!
远程(Peer)
公钥: 云服务器的公钥(server_public.key)
连接保持间隔: 25
对端: 云服务器的IP:51820
路由的IP地址(段): 192.168.2.0/24, 10.0.0.0/24

保存然后启用就可以连接上了

笔记本配置

我的笔记本是Windows系统,还是刚才的链接,下载Windows设备类型的安装文件即可
链接:WireGuard官方下载网站
安装好后打开WireGuard,选择左下角的新建隧道

然后把下面的配置文件粘贴进去即可,记得修改里面的一些配置

1
2
3
4
5
6
7
8
9
[Interface]
PrivateKey = 笔记本的私钥(computer_private.key)
Address = 10.0.0.3/24

[Peer]
PublicKey = 云服务器的公钥(server_public.key)
Endpoint = 云服务器的IP:51820
AllowedIPs = 192.168.2.0/24, 10.0.0.0/24
PersistentKeepalive = 25

保存后点击连接就大功告成了,这样子就组成一个虚拟的局域网,访问的IP也是跟内网一样不需要改变,流量走的是云服务器的就不用怕没有公网IP


使用WireGuard访问OpenWrt路由器下的局域网设备
https://bricawa.com/posts/33211/
作者
BricRoot
发布于
2024年9月4日
许可协议