问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

OpenWrt作为旁路由配置Wireguard 实现内网穿透

创作时间:
作者:
@小白创作中心

OpenWrt作为旁路由配置Wireguard 实现内网穿透

引用
1
来源
1.
https://www.cnblogs.com/yunt/p/18318770

本文将详细介绍如何在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
    端口映射的
    16666

  • IP地址填写
    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
的运行状态

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号