OpenWrt作为旁路由配置Wireguard 实现内网穿透
OpenWrt作为旁路由配置Wireguard 实现内网穿透
本文将详细介绍如何在OpenWrt路由器上配置WireGuard实现内网穿透。文章将从OpenVpn和WireGuard的区别、网络环境介绍、服务端设置、客户端配置等多个方面进行讲解,帮助读者快速搭建内网穿透环境。
0. 前言
因为最近一直在折腾软路由相关的系统及配置,也在家里整了一套k8s的环境,有一定需求需要在外面去连这套k8s的环境作为开发环境的补充,虽然可以通过外网端口暴露的方式访问,但是还是觉得不太方便和安全,因此需要将办公环境的电脑直接通过内网的ip访问内网的环境。
因为办公环境使用的是
H3C
的
iNode
上网,尝试使用
OpenVpn
发现连接后
iNode
会掉线,在官方的论坛上搜索后得知是有冲突,iNode 跟其他VPN冲突,如果都是用ssl的vpn软件话会存在冲突只能用一个。这时需要换一种vpn的协议,这时选择了采用udp协议的
WireGuard
。
本文不对
OpenWrt
的安装及作为旁路由的配置做介绍,只针对旁路由下的
OpenVpn
如何安装
WireGuard
实现内网穿透,我使用的是
esir
的高大全的版本,预装了
WireGuard
,下载链接如下:
esir高大全openwrt
esir高大全openwrt列表
1. OpenVpn和WireGuard区别
OpenConnect VPN
主要是使用
TCP
协议,而
WireGuard
则是
UDP
协议,最明显使用感知就是前者需要类似拨号一样过程,在网络断开,重连等情况下并非无感.而
WireGuard
则类似于常驻后台,随用随取的感觉,体验不错.在配置方面,
OpenConnect VPN
需要使用证书来提高使用安全和连接体验,而
WireGuard
则是使用点对点的加密公钥私钥的形式来配对,并且每台客户端需要单独分配 IP 和公私钥.前期配置均稍许麻烦,但两者后续使用和管理都还比较合理和方便.OpenConnect VPN
只需要客户端拥有证书文件即可(或者设置对应的账户密码),
WireGuard
只需要客户拥有配置文件即可
2. 网络环境介绍
192.168.50.1
ikuai
主路由192.168.50.2
openwrt
旁路由,并作为DNS,与主路由网关互指
3. 服务端设置
3.1 创建公钥私钥
- 预共享密钥
通过
SSH
登陆到
OpenWRT
后台.
# 创建目录存放公钥私钥
mkdir wg
# 进入文件夹
cd wg
# 配置创建密钥的权限
umask 077
# 创建预共享密钥
wg genpsk > sharekey
# 获取密钥复制保存
cat sharekey
这里需要保存
sharekey
,后面配置要用到。
- 服务端公钥私钥
# 创建服务端公钥和私钥
wg genkey | tee server_privatekey | wg pubkey > server_publickey
# 获取服务端私钥复制保存
cat server_privatekey
# 获取服务端公钥复制保存
cat server_publickey
这里需要保存
server_privatekey
和
server_publickey
,后面配置要用到。
- 客户端公钥私钥 ( macOS )
这里有多少客户端就需要生产多少次,命名规则可以按照
macos_publickey
和
macos_privatekey
命名。
# 创建 macOS 客户端公钥和私钥
wg genkey | tee macos_privatekey | wg pubkey > macos_publickey
# 获取 macOS 客户端私钥复制保存
cat macos_privatekey
# 获取 macOS 客户端公钥复制保存
cat macos_publickey
这里需要保存
macos_privatekey
和
macos_publickey
,后面配置要用到。
最终生成的目录文件结构如下:
3.2 配置OpenWrt
3.2.1 添加WireGuard网络新接口
登陆
OpenWRT
- 网络 - 接口 - 添加新接口
填写接口名 - 选择接口协议 - 提交
3.2.2 WireGuard网络接口基本设置
基本设置 - 填写上文获取的服务端私钥:
server_privatekey
自行填写一个端口号 - 并且在路由器映射该端口的 UDP 协议
我这里使用的是
ikuai
作为主路由,协议为
udp
即可,设置如下:
IP 地址填写一个 VPN 专用的网段 IP - 本文以
192.168.100.X
为 WireGuard 的专用网段为例,则本 WG 服务器 IP 为
192.168.100.1/24
点击右下角的
保存并应用
再次补充下:
协议选择
WireGuard Vpn
协议私钥填写上文获取的服务端私钥:
server_privatekey监听端口填写
ikuai
端口映射的
16666IP地址填写
192.168.100.1/24
3.2.3 wireguard网络接口防火墙设置
防火墙设置 - 选择
wireguard
点击右下角的
保存并应用
3.2.4 客户端 Peers设置
客户端 Peers 区域为每个客户端添加配置
选择预共享密钥 - 添加
公钥 - 填写上文获取的macOS
客户端公钥macos_publickey预共享密钥 - 填写上文获取的
预共享密钥sharekey允许的 IP - 即表示为此 macOS 客户端分配固定 IP , 本文示例为
192.168.100.2/32
, 注意各客户端 IP 不能冲突.这里的ip会在后面macOs配置文件里用到持续 Keep-Alive - 填写 25
点击右下角的
保存并应用
3.2.5 OpenWrt防火墙设置
网络 - 防火墙 - 自定义防火墙 - 添加以下防火墙 - 右下角重启防火墙
# 注意此条防火墙网段 192.168.100.0/24 需和上文服务端 IP 网段保持一致.
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o br-lan -j MASQUERADE
3.2.6 重启 WireGuard
返回网络 - 接口 - 关闭 - 连接
或者直接重启整个
OpenWRT
最为稳妥.这里建议直接重启整个
OpenWRT
4. 客户端配置
创建客户端配置文件,创建后缀为.conf的配置文件,例如macos_wireguard.conf,复制以下信息,并且修改对应的公私钥信息:
需要修改如下配置
Address192.168.100.2/32 客户端ip
PrivateKey对应客户端私钥
DNS192.168.50.2 OpenWrt的地址,前提是主路由的DNS设置的OpenWrt地址
PublicKeyOpenWRT的公钥
Endpoint公网ip或域名+端口
AllowedIPs值得注意的是AllowedIPs参数.针对不同场景和需求,此处可以配置不用的路由.当此处为
0.0.0.0/0
时表示任意网络请求都经过 VPN 俗称全局 VPN , 由于 iPhone 同时只能有 1 个 VPN 软件在线,所以当
WireGuard
启动时,其他类似Quanx,小火箭等软件则无法使用,此时 iPhone 可以全局 VPN 使用家中的网络来访问一些外网,这时如果OpenVpn开启了外网访问,iPhone设置了
0.0.0.0/0
,不需要再启动QuanX等软件,一样可以访问外网.
此时的配置文件是用于客户端的,所以
PrivateKey
则为 macOS 客户端的私钥,而Peer中的
PublicKey
则为
OpenWRT
的公钥.请注意反向思考.
Endpoint
填写家中的 IP 或者 DDNS 域名和端口.
4.1 macos配置
新建
macos_wireguard.conf
在
macOS App Store
下载 WireGuard,从文件导入隧道.
这里下载
WireGuard
需要美区账户
[Interface]
# 对应客户段分配的 IP
Address = 192.168.100.2/32
# 对应客户端私钥
PrivateKey = macos_privatekey
# 本地的 DNS 服务器或者公有 DNS 服务器
DNS = 192.168.50.2
[Peer]
# OpenWRT的公钥
PublicKey = server_publickey
# macOS 如上设置可与 ClashX Pro 共存仅代理局域网,互联网走本地网络.
# iPhone iPad 设置为 0.0.0.0/0 全局则模式.
AllowedIPs = 192.168.50.0/24, 192.168.100.0/24
# 预共享密钥
PresharedKey = sharekey
# wireGuard 端点
Endpoint = 公网ip或域名:16666
PersistentKeepalive = 25
这里的AllowedIPs = 192.168.50.0/24, 192.168.100.0/24,
192.168.50.0/24
为内网ip域,
192.168.100.0/24
为
wireguird
的ip域.
连接后运行图如下:
4.2 iPhone配置
在
App Store
下载 WireGuard,从文件导入隧道.
新建
ios_wireguard.conf
并上传至 iCloud 云盘.
在 iOS 设备 App Store 下载 WireGuard
这里下载
WireGuard
需要美区账户
[Interface]
# 对应客户段分配的 IP
Address = 192.168.100.3/32
# 对应客户端私钥
PrivateKey = ios_privatekey
# 本地的 DNS 服务器或者公有 DNS 服务器
DNS = 192.168.50.2
[Peer]
# OpenWRT的公钥
PublicKey = server_publickey
# macOS 如上设置可与 ClashX Pro 共存仅代理局域网,互联网走本地网络.
# iPhone iPad 设置为 0.0.0.0/0 全局则模式.
AllowedIPs = 0.0.0.0/0
# 预共享密钥
PresharedKey = sharekey
# wireGuard 端点
Endpoint = 公网ip或域名:16666
PersistentKeepalive = 25
这里的
Address
改成
192.168.100.3/32
,保证唯一.
5. OpenWrt的wireguard运行状态
最终所有的配置配完后可以在
OpenWrt
上看到
wireguard
的运行状态