概念
网上找的图很好理解应该
wireguard原理就不多做解释了,我们只是人为的分客户端与服务端,因为国情在这,有时候两端不可都是可以互相访问的公网。这是理论上最好的访问模型,但实际上使用也就服务端访问这种模式。
2021年5月21日更新
公网环境
wireguard实际是支持ipv6的而我的环境是ipv4动态公网就不多做关于ipv6的介绍了,在2018年CN已经全面覆盖改造ipv6了,至少移动手机端与家庭宽带都支持ipv6了。
设备环境
- OpenWrt R21.2.1
- 公网IPv4
- 移动手机端
openwrt端配置
软件源 系统-软件包-发行版软件源
src/gz openwrt_core https://mirrors.cloud.tencent.com/lede/snapshots/targets/x86/64/packages
src/gz openwrt_base https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/base
src/gz openwrt_freifunk https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/freifunk
src/gz openwrt_helloworld https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/helloworld
src/gz openwrt_lienol https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/lienol
src/gz openwrt_luci https://mirrors.cloud.tencent.com/lede/releases/18.06.8/packages/x86_64/luci
src/gz openwrt_packages https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/packages
src/gz openwrt_routing https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/routing
src/gz openwrt_telephony https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/telephony
安装WG
opkg update
opkg install wireguard luci-app-wireguard luci-i18n-wireguard-zh-cn wireguard-tools
生成密钥
可以在终端下生成 也可以在各客户端下生成 privatekey=私钥 publickey=公钥
mkdir /etc/wireguard
cd /etc/wireguard
wg genkey | tee privatekey | wg pubkey > publickey
配置接口 依次找到网络->接口->添加新接口,设置内容如下
- 新接口名称:WG1
- 新接口协议:Wireguard VPN
创建接口
接口基本设置
- 私钥 程序生成
- 监听接口 100
- IP地址 就是接口的地址
Peers设置
- 公钥 就是 客户端的公钥 特别注意不是OPenwrt的对应的公钥
- 允许的 IP 设置VPN的路由
- 路由允许的 IP 勾选
防火墙设置
- 选择LAN
防火墙设置
防火墙 - 区域设置
防火墙区域设置
建立通信规则添加端口
网络->防火墙->通信规则->添加,打开的页面为防火墙 - 通信规则 - 未命名规则,在基本设置中只需修改如下几项,其他项默认即可
- 名称:自定义
- 协议:UDP
- 源区域:任意区域
- 目标区域: 设备
- 目标端口: 100 这个端口与上面设置端口一样
图片1
图片2
最后一步步骤最最最重要的步骤一定需要做的 重启接口 重启接口 重启接口
最后一步步骤最最最重要的步骤一定需要做的 重启接口 重启接口 重启接口
最后一步步骤最最最重要的步骤一定需要做的 重启接口 重启接口 重启接口
最后一步步骤最最最重要的步骤一定需要做的 重启接口 重启接口 重启接口
先点关闭再点连接
客户端
另一端就好弄了,直接可以导入配置文件下面是一个典型的例子
[Interface]
Address =
ListenPort =
PrivateKey =
DNS =
[Peer]
AllowedIPs =
Endpoint =
PublicKey =
PersistentKeepalive = 25
1.1 [Interface] 部分介绍
- Address:设置虚拟网卡的内网地址(可选子网掩码),填写规则:
- 可以填写任何符合规范(内网地址可选范围见链接 1,2)的内网地址,但要保证不与虚拟局域网内其它电脑的内网地址相同;
- 可以写两行;(可选)可以写成自己的IPV6地址:
Address = fd86:ea04:1115::1/64
。
- ListenPort:设置 udp 监听端口,可选范围为 49152 到 65535 。
- PrivateKey:填写本机的私钥,默认存储在本机的
/etc/wireguard/private.key
文本中。 - PostUp:
wg-quick up wg0
启动后执行的内核防火墙( iptables )规则,可以打通 VPN ,服务器端需此参数。 - PostDown:
wg-quick down wg0
执行删除启动时定义的内核防火墙( iptables )规则 ,服务器端需此参数。 - DNS ,设置 DNS ,不正确设置客户端浏览器网页会无法访问外网地址。
- SaveConfig:设为 true 之后,每次重启服务(stop service时)都会自动保存 config 。
- MTU:一般不用改,1500没问题
1.2 [Peer] 部分介绍
- PublicKey :连接来节点的公钥,默认存储在其它电脑的
/etc/wireguard/public.key
文本中。 - AllowedIPs:允许连接的内网 ip 地址。
- 服务器与客户端应该在同一网段,如客户端的IP为 10.0.2.1/24 ,那么这里可以设置为 10.0.2.0/24 ;
- 可以写多个,用逗号隔开。
- 如果写为 0.0.0.0/0 表示允许任何节点连接。
- Endpoint :节点的外网 IP 及端口号,服务器端不需要填写。
- PersistentKeepalive:用来保持连接检查的,每过25s会自动检查连通性,
虚拟网络的启动与关闭
启动虚拟网络执行 wg-quick up wg0
关闭虚拟网络执行 wg-quick down wg0