0. 前言

因为最近一直在折腾软路由相关的系统及配置,也在家里整了一套k8s的环境,有一定需求需要在外面去连这套k8s的环境作为开发环境的补充,虽然可以通过外网端口暴露的方式访问,但是还是觉得不太方便和安全,因此需要将办公环境的电脑直接通过内网的ip访问内网的环境。

因为办公环境使用的是H3CiNode上网,尝试使用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_privatekeyserver_publickey,后面配置要用到。

  • 客户端公钥私钥 ( macOS )

这里有多少客户端就需要生产多少次,命名规则可以按照 macos_publickeymacos_privatekey 命名。

# 创建 macOS 客户端公钥和私钥
wg genkey | tee macos_privatekey | wg pubkey > macos_publickey
# 获取 macOS 客户端私钥复制保存
cat macos_privatekey
# 获取 macOS 客户端公钥复制保存
cat macos_publickey

这里需要保存macos_privatekeymacos_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,复制以下信息,并且修改对应的公私钥信息:

需要修改如下配置

  • Address 192.168.100.2/32 客户端ip
  • PrivateKey 对应客户端私钥
  • DNS 192.168.50.2 OpenWrt的地址,前提是主路由的DNS设置的OpenWrt地址
  • PublicKey OpenWRT的公钥
  • 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/24wireguird的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的运行状态

OpenWrt作为旁路由配置Wireguard 实现内网穿透的更多相关文章

  1. OpenWRT DNS无法解析WAN连接的内网服务器域名

    系统版本OpenWrt Chaos Calmer 15.05.1,网络连接为:WAN口连接内网10.x.x.x网段,WAN口设置为静态IP.设置L2TP接口,通过L2TP访问外网.问题出现于,所有外网 ...

  2. 【转】Syncthing – 数据同步利器---自己的网盘,详细安装配置指南,内网使用,发现服务器配置

    Syncthing – 数据同步利器---自己的网盘,详细安装配置指南,内网使用,发现服务器配置 原贴:https://www.cnblogs.com/jackadam/p/8568833.html ...

  3. Mac配置内网穿透

    闲语: Java开发过程中,往往会对接第三方,而在对接过程中,双方间使用的最多的"通讯"方式就是异步通知.可是异步通知过程中,只能通知到外网地址,可是在调试过程我们都是在本地进行- ...

  4. frp + nginx 配置多人共用的http 内网穿透服务

    来源:简书   https://www.jianshu.com/p/c9d7527d607b 一. 前言 frp 是一个用Go语言开发的,可用于内网穿透的高性能的反向代理应用,支持 tcp, udp ...

  5. p2p-tunnel 打洞内网穿透系列(一)客户端配置及打洞

    系列文章 p2p-tunnel 打洞内网穿透系列(一)客户端配置及打洞 p2p-tunnel 打洞内网穿透系列(二)TCP转发访问远程共享文件夹 p2p-tunnel 打洞内网穿透系列(三)TCP转发 ...

  6. frp 用于内网穿透的基本配置和使用

    frp 用于内网穿透的基本配置和使用 今天是端午节,先祝端午安康! frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP.UDP.HTTP.HTTPS 等多种协议.可以将内网服务以安全.便 ...

  7. 五、frp内网穿透客户端frpc.ini各配置参数详解

    [必须]标识头[common]是不可或缺的部分 [必须]frps服务端IPserver_addr = 0.0.0.00.0.0.0为FRP服务端IP,客户端要填写为服务端已配置的对应的IP,或者是服务 ...

  8. 四、frp内网穿透服务端frps.ini各配置参数详解

    [必须]标识头[common]是不可或缺的部分 [必须]服务器IPbind_addr = 0.0.0.00.0.0.0为服务器全局所有IP可用,假如你的服务器有多个IP则可以这样做,或者填写为指定其中 ...

  9. Frp内网穿透搭建,家庭主机对外提供接口,支持ssh访问

    Frp内网穿透搭建,家庭主机对外提供接口,支持ssh访问 1.使用场景: 需求1.家中服务器 ubuntu 主机,跑接口服务,需要对外暴漏, 需求2.同时需要在外网ssh远程 ​ 关键词: frp内网 ...

  10. 内网穿透神器(ngrok)服务端部署【分享一台自己的ngrok服务器】【多平台】

    Ngrok为何物 “ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道.ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放.”这是百度百科上给Ng ...

随机推荐

  1. 为 KubeSphere 集群启用免费的泛域名 SSL 证书并实现证书自动更新和分发

    作者:scwang18,主要负责技术架构,在容器云方向颇有研究. 前言 KubeSphere 集群默认安装的证书是自签发证书,浏览器访问访问会发出安全提醒.本文记录了利用 let's encrytp ...

  2. C#/.NET/.NET Core技术前沿周刊 | 第 10 期(2024年10.14-10.20)

    前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...

  3. Redisson 工作原理-源码分析

    时间不在于你拥有多少,而在于你怎样使用. 1:Redisson 是什么 个人理解:一种 可重入.持续阻塞.独占式的 分布式锁协调框架,可从 ReentrantLock 去看它. ①:可重入锁 拿到锁的 ...

  4. Unity6 URP17使用初探

    1.简介 随着Unity6的发布,URP17也已经可以上手使用,相对旧的版本改动较大的是加入了 RenderGraph.STP.Foveated rendering.GPU Resident Draw ...

  5. C#/.NET/.NET Core技术前沿周刊 | 第 11 期(2024年10.21-10.31)

    前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...

  6. 强化学习算法——TPG算法(遗传编程GP算法)代码

    tpg算法是一个使用模块涌现和复用机制的遗传编程(GP)算法,该算法在一些强化学习问题上有着不错的表现,本文给出该算法的项目地址. tpg算法的C++实现代码大概有1万的逻辑代码,如果这个比例换做使用 ...

  7. ubuntu环境安装街机风格的太空飞船游戏(2D飞机射击游戏)游戏——Chromium_B.S.U.

    相关: https://en.wikipedia.org/wiki/Chromium_B.S.U. https://manpages.ubuntu.com/manpages/focal/en/man6 ...

  8. JS中如何获取当前日期,并与输入日期作比较

    首先我们获取到"2020-5-5"类型的值 通过Date函数转换 var inputDate = new Date(Date.parse(realTimeEnd)); 获取当前时间 ...

  9. 海外模组联网非常难?不往忘了APN配置…

    ​ 除了中国之外,国外的4G信号都比较差劲. 做海外的设备,如果忽视了射频的信号质量,肯定是要吃大亏的! 所以,海外模组的联网问题,会比国内要多不少. 客户在实际应用中或多或少都会遇到: 网络相关问题 ...

  10. 人工智能模型训练技术:随机失活,丢弃法,Dropout

    前一篇:<探索训练人工智能模型的词汇大小与模型的维度> 序言:Dropout 是神经网络设计领域的一种技术,通常我们把它翻译成 随机失活 或者 丢弃法.如果训练神经网络的时候不用 Drop ...