惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
爱范儿
爱范儿
WordPress大学
WordPress大学
博客园 - 三生石上(FineUI控件)
J
Java Code Geeks
Vercel News
Vercel News
aimingoo的专栏
aimingoo的专栏
T
Tailwind CSS Blog
罗磊的独立博客
B
Blog
博客园_首页
A
About on SuperTechFans
有赞技术团队
有赞技术团队
V
V2EX
U
Unit 42
I
InfoQ
IT之家
IT之家
博客园 - 司徒正美
阮一峰的网络日志
阮一峰的网络日志
博客园 - 叶小钗
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Stack Overflow Blog
Stack Overflow Blog
The Cloudflare Blog
H
Help Net Security

方永、南天紫雲

linux透明代理 技术的边界 停机问题通俗说明 Rust与oracle、redis集群的纠结 学习能力的增长 微信调试的原语 mac外接移动硬盘安装ArchLinux linux的死机问题 linux下全键盘操作 漂亮又好用的bspwm linux本机透明代理 ssh、mosh、autossh linux不能待机又一例 从WordPress切换到Hugo 折腾电脑开机 linux系统QQ新思路 Arch Linux的字体渲染 svn管理之submin OpenWrt自动fucking墙記錄 二维码(qrcode)名片的一些事儿 用lua nginx module搭建一个二维码(qr code)生成器 CentOS 7 安裝註記 php程序連接MySQL时只能127.0.0.1而localhost無法連接的問題 ThinkPad之FAN_ERROR、hi fi聲卡 jetty多端口部署 OpenWrt簡單暴力限網 linux中cron之PATH变量 OpenWrt的WDS無線橋接模式 再敘OpenWrt下的rtl8187無線中繼 sed之模擬tail
WireGuard点对点连接
zola · 2022-06-05 · via 方永、南天紫雲

之前在 NAT穿透的问题 里描述了NAT穿透的问题,这篇文章则介绍 使用 wgcp 完成 WireGuard NAT穿透,点对点连接的过程。

假设一种场景,家里安装了NAS,有gitea、minio等诸多服务,但是宽带没有分配公网IP,如何做到随时直连? 通过 NAT穿透的问题 的描述,可知在外网仍然可以直接访问到内网的设备, 只是需要知道内网设备在NAT上的映射地址,或者说,有某种方式能够协助内网设备和外网设备建立一条能通过 NAT的通讯通道。 wgcp 就是这样一种协助工具。

wgcp 工作原理

wgcp 有客户端程序和服务端程序之分,客户端A向服务端发送获取另一客户端B端点信息的请求, 服务端返回该信息,客户端A和B建立直接连接。

所以服务端就像一个电子公告牌一样,有客户端来获取端点信息了,就告诉它。 而客户端之间建立连接时,必须是以WireGuard名义,发送和接收数据包,所以wgcp 使用加了 BPF filterraw socket 来完成这个过程。而这个过程的代码的实现,也只是复刻了 WireGuardnat-hole-punching C语言的实现而已。

配置

服务端配置如下:

listen_address: 127.0.0.1:5465
broker: 0.0.0.0:5466
token: xxx
  • listen_address 是监听地址,接收来自客户端的请求,websocket协议,所以可以使用任何支持 websocket 转发 的 CDN 网络,比如 cloudflare

  • broker 是建立连接的协调服务,UDP协议。

  • token 鉴权 token。

客户端配置如下:

server_address: ws://127.0.0.1:5465/
listen: false
token: xxx
keepalive: 100
network:
  -
    network: default
    interface: wg0
    id: 2
    peers:
      -
        id: 3
        persistent_keepalive: 25
  • server_address 服务端地址。
  • listen 监听模式,处于监听模式时,客户端会保持和服务端的连接,等待服务端的指令;否则和其它客户端建立连接后退出。
  • token 鉴权 token。
  • keepalive 发送心跳数据包的间隔时间
  • network中:
  • network 网络名称
  • interface wireguard 的 interface 名称
  • id 在此网络中的 id, 目前填写 public key
  • peers 对端节点,即需要建立连接的节点
  • persistent_keepalive WireGuard NAT 保活时间

使用

NAS 上配置好 WireGuard,并填好wgcp的配置,注意开启监听模式。 在某云服务器架设服务端。 然后在笔记本上配置好 WireGuard,使用wgcp即可完成连接。