因为没有找到合适的,于是自己写了一个,这样就能用 1m 小水管,随时打洞连家里的 nas 了,并享受家宽满速体验。
1
shmilyin 2021-12-28 15:18:01 +08:00 1
挺好的,有没有详细点的教程?
|
2
Saimen 2021-12-28 15:59:41 +08:00 via Android
cool ,之前用过 natpunch-go ,有空试一下这个
|
3
xiejieyin 2021-12-28 16:22:19 +08:00 via Android
记录一下 以备不时之需
|
4
redhujiao 2021-12-28 16:34:47 +08:00
这是什么原理 不是直接转发的吗,
我用花生壳很慢很慢 |
6
yinheli OP @shmilyin 这个是不是不需要教程?配置好 wg 以后,服务端常住运行,两边 nat 后面的设备也运行一下这个工具就行了。
|
8
duqich 2021-12-29 10:23:00 +08:00
wireguard 还是 openvpn 好一点呢呢?现在在用 openvpn 感觉好重,想试试 wireguard
|
9
zx900930 2021-12-29 19:13:44 +08:00 via Android
@duqich wireguard 性能更好,配置更简单,除非是为了兼容旧的网络基础设施,新的建议都用 wg
|
10
yinheli OP @shmilyin 可能极少数不行,但是借助中间服务器发现应该绝大部分都没问题,我自己测试的几个网络环境都行,包括 联通 5G 的的上网卡、手机热点共享,多层 NAT (光猫->路由器 1->路由器 2 )
|
11
xiejc 2021-12-29 23:02:52 +08:00
请教一下,server 端没有公网行不行,如果是借助被人的 tcp 端口暴漏的行不行,比方说 frp/ngrok
|
12
Tyanboot 2021-12-30 04:59:53 +08:00
自己做这个还不如直接用 tailscale ,反正都是 wireguard 。
|
13
mayli 2021-12-30 07:39:30 +08:00 via Android
不错的 解决了好多小白的 nat 穿透问题 不过小白一般只会点点点…不会命令行…
|
14
yinheli OP @xiejc 不行,需要借助一个公网的服务器,毕竟发现协议是自定义的,带宽需求极低,只发几个包知道对端的出口 IP 和端口号才行,如果是持续运行的话,就是每隔 25 秒发一次包,每次几十个字节
|
15
shineit 2021-12-31 08:26:57 +08:00
wireguard 移动端可以?
|
17
leiclye 2022-01-01 17:48:13 +08:00
老哥, Win 环境是要先安装 Go 么 ? 看里面写着(This program cannot be run in DOS mode)
|
19
yinheli OP @leiclye 刚借了台电脑测试了下,是可以的,下载文件后要补充一下后缀,添加 '.exe' 然后管理员运行 powershell
有个坑点要留意:如果你是用手机热点共享测试连 PC 和你家的网络( NAS),可能不行。当然你家宽带和手机如果是不同的运营商可能可以,我家联通宽带,因为和手机套餐是一起的,我发现它们连出口 IP 都是一样。 最好是两端的网络是在两个不同的 NAT ,并且中间一定要经过公网环境。 祝你成功! |
20
2i2Re2PLMaDnghL 2022-01-03 19:29:18 +08:00
@xiejc 借助别人的话你需要暴露 UDP 端口
|
21
bao3 2022-01-03 21:33:35 +08:00
如果需求不高,可以使用 tailscale 。
|
23
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 |
24
leiclye 2022-01-04 14:28:52 +08:00
服务器上的 WG 的端口是用的 51888. 打洞程序在服务器运行的时候也是需要用 51888, 还是需要另外换一个 port ?
|
25
leiclye 2022-01-04 14:31:58 +08:00
如果换另外一个端口, CLI 敲下后没有任何输出内容.
|
26
yinheli OP @leiclye server 端和 wg 没有关系,它只是相当于一个注册表,用来交换 client 端的地址信息,类似 stun 的协议,就是多了个能获取其他客户端的公网出口信息的功能,打洞是为了让节点之前能直接通讯,流量不过中间的 server
https://s4.ax1x.com/2022/01/04/TLVxKA.png |
27
stephCurry 2022-01-04 18:27:16 +08:00 via iPhone
安卓 ios 这些移动端后续会支持吗
|
28
stephCurry 2022-01-04 19:47:11 +08:00 via iPhone
另外,peer 端的 endpoint 是否也要改为 vps 的 ip 和打洞的端口?
|
29
yinheli OP @stephCurry 那我比较建议你用 nebula ,它本身有 app 端
> peer 端的 endpoint 是否也要改为 vps 的 ip 和打洞的端口? 不用,参与到打洞的 peer 的 endpoint 是从 server 端拿到的,这个打洞工具的 client 端拿到后会设置 https://github.com/yinheli/udppunch/blob/v0.1.0/client/client.go#L98 |
30
wspsxing 2022-01-07 11:21:38 +08:00
老哥,client 静默退出是因为打洞成功了吗?
transfer: 0 B received, 9.83 KiB sent 然后这样连不上是说明 洞实际并没有打通吗 能简单的说下流程吗 |
31
yinheli OP @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 |
32
wspsxing 2022-01-07 16:32:02 +08:00
噢,谢谢了,不过我想要的是 你的服务的工作流程,因为 wg 我是搭好了的。 机器的 IP 转发,以及 iptables 的 SNAT/DNAT 是只需要 server 设置吧,两个客户端不需要特别的设置吧?@yinheli
|
33
461da73c 2022-01-09 10:35:07 +08:00 via Android
都有公网 ip 了,为啥要这么折腾,两个内网连到公网的 wg 就可以了。
|
34
yinheli OP @461da73c 如果你有公网 IP 或者你的公网服务器带宽非常大,并且没有额外费用,确实是没有打洞需求,这种打洞需求一般是两边都是没有固定 IP 的如家宽,还期望没有额外的带宽成本
|
35
linyichang 2022-09-04 15:37:09 +08:00
如何知道是否打洞成功了呢?
|
36
yinheli OP @linyichang 参与的 wg 节点能通讯就可以了,这只是辅助工具,利用 wg 的 listen 端口向外发了空负载的包
|
37
ixinshang 2022-12-12 18:24:27 +08:00
我对于 p2p 设置看懵了。
机器在欧洲,两台机器 ping 。 还是有快 600ms 了。 op 能指个道不? |