wireguard 打洞工具

2021-12-28 14:08:45 +08:00
 yinheli

因为没有找到合适的,于是自己写了一个,这样就能用 1m 小水管,随时打洞连家里的 nas 了,并享受家宽满速体验。

https://github.com/yinheli/udppunch

9555 次点击
所在节点    分享创造
37 条回复
bao3
2022-01-03 21:33:35 +08:00
如果需求不高,可以使用 tailscale 。
yinheli
2022-01-04 13:43:49 +08:00
@bao3 是的,如果比较倾向于开源也可以使用 nebula , 我这只是玩玩 wireguard ,它性能较好
leiclye
2022-01-04 14:27:26 +08:00
# ./punch-server-linux-amd64 -port 51888
2022/01/04 14:09:20 listen udp 0.0.0.0:51888: bind: address already in use
leiclye
2022-01-04 14:28:52 +08:00
服务器上的 WG 的端口是用的 51888. 打洞程序在服务器运行的时候也是需要用 51888, 还是需要另外换一个 port ?
leiclye
2022-01-04 14:31:58 +08:00
如果换另外一个端口, CLI 敲下后没有任何输出内容.
yinheli
2022-01-04 14:39:25 +08:00
@leiclye server 端和 wg 没有关系,它只是相当于一个注册表,用来交换 client 端的地址信息,类似 stun 的协议,就是多了个能获取其他客户端的公网出口信息的功能,打洞是为了让节点之前能直接通讯,流量不过中间的 server

https://s4.ax1x.com/2022/01/04/TLVxKA.png
stephCurry
2022-01-04 18:27:16 +08:00
安卓 ios 这些移动端后续会支持吗
stephCurry
2022-01-04 19:47:11 +08:00
另外,peer 端的 endpoint 是否也要改为 vps 的 ip 和打洞的端口?
yinheli
2022-01-05 10:10:40 +08:00
@stephCurry 那我比较建议你用 nebula ,它本身有 app 端

> peer 端的 endpoint 是否也要改为 vps 的 ip 和打洞的端口?

不用,参与到打洞的 peer 的 endpoint 是从 server 端拿到的,这个打洞工具的 client 端拿到后会设置 https://github.com/yinheli/udppunch/blob/v0.1.0/client/client.go#L98
wspsxing
2022-01-07 11:21:38 +08:00
老哥,client 静默退出是因为打洞成功了吗?

transfer: 0 B received, 9.83 KiB sent 然后这样连不上是说明 洞实际并没有打通吗

能简单的说下流程吗
yinheli
2022-01-07 13:04:37 +08:00
@wspsxing 要在两边都运行 client ,连同一个 server

假设你有 2 个设备( A ,B ),分别在两个 nat 后面,它们没有独立公网 IP ,但是都能访问互联网,(比如你办公室的 PC & 家里的 NAS)

1. 随便找个有固定公网 IP 的机器,把 server 端跑起来,记得防火墙放行对应的 UDP 端口
2. 配置 wg ( A, B 都要配置)

# A 设备 : wg0.conf
[Interface]
Address = 10.18.0.2/16
PrivateKey = A_private_key

# B peer
[Peer]
PublicKey = B_public_key
AllowedIPs = 10.18.0.0/16


# -----------

# B 设备: wg0.conf
[Interface]
Address = 10.18.0.3/16
PrivateKey = B_private_key

# A peer
[Peer]
PublicKey = A_public_key
AllowedIPs = 10.18.0.0/16



3. A 、B 都启动 wg & 启动客户端,稍等片刻,A 和 B 应该都被设置好了 endpoint ( wg show 看一下),然后他们应该能互通了
例如在 A 上 ping B: ping 10.18.0.3

注意事项:
记得开启机器的 IP 转发,以及 iptables 的 SNAT/DNAT

# vi /etc/sysctl.conf
#
# apply config
# sysctl -p
net.ipv4.ip_forward = 1

# SNAT/DNAT
iptables -t nat -A POSTROUTING -s 0.0.0.0/0 -j MASQUERADE
wspsxing
2022-01-07 16:32:02 +08:00
噢,谢谢了,不过我想要的是 你的服务的工作流程,因为 wg 我是搭好了的。 机器的 IP 转发,以及 iptables 的 SNAT/DNAT 是只需要 server 设置吧,两个客户端不需要特别的设置吧?@yinheli
461da73c
2022-01-09 10:35:07 +08:00
都有公网 ip 了,为啥要这么折腾,两个内网连到公网的 wg 就可以了。
yinheli
2022-01-09 17:51:52 +08:00
@461da73c 如果你有公网 IP 或者你的公网服务器带宽非常大,并且没有额外费用,确实是没有打洞需求,这种打洞需求一般是两边都是没有固定 IP 的如家宽,还期望没有额外的带宽成本
linyichang
2022-09-04 15:37:09 +08:00
如何知道是否打洞成功了呢?
yinheli
2022-09-04 16:51:14 +08:00
@linyichang 参与的 wg 节点能通讯就可以了,这只是辅助工具,利用 wg 的 listen 端口向外发了空负载的包
ixinshang
2022-12-12 18:24:27 +08:00
我对于 p2p 设置看懵了。
机器在欧洲,两台机器 ping 。 还是有快 600ms 了。

op 能指个道不?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/824873

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX