实在搞不懂了,谁来科普下, Frp xtcp 双侧 Nat4 为什么能成功打洞

2023-11-28 16:26:57 +08:00
 Jestom
/t/995564
原本打算用现成的远程桌面软件的,但是帖子下一位老哥的分享,开了 Frp xtcp 来尝试打洞,双侧 Nat4 居然能通,这是为啥
我原本尝试了 zerotier 、wireguard 之类的,都打洞失败,甚至向日葵和 todesk 之类的远程软件,都没办法实现 p2p 连接
没想到近在我眼前的 Frp 是可以的,我还想着 zerotier 都打不成功的话 Frp 也就当个中转了。。。

所以 Frp xtcp 是要靠运气还是原理上就能成功打通的。
目前尝试了移动 NAT4-联通 NAT4 成功

我甚至尝试把 dmz 和 upnp 都关了,依旧可行
ipv6 本来就只有单侧有,我也试过把另一侧的 ipv6 关了,依旧可行
虽然挺惊喜的,但是还是想学习一下这是什么原理
4495 次点击
所在节点    宽带症候群
18 条回复
xqzr
2023-11-28 18:11:48 +08:00
```sh
frpc nathole discover --nat_hole_stun_server stun.easyvoip.com:3478
```
heiher
2023-11-28 18:22:50 +08:00
难道不是 xtcp 的 fallback 机制退回到 stcp(服务器中转)模式嘛
Jestom
2023-11-28 18:29:10 +08:00
@heiher 满速了,而且我没开 stcp ,我拖文件跑满带宽了,frp 服务器只有 5m 小水管
Jestom
2023-11-28 18:29:44 +08:00
@xqzr 可以用命令指定 stun 服务器?
Jestom
2023-11-28 18:31:16 +08:00
@heiher ps:是跑满了本地带宽
lazywen
2023-11-28 21:25:25 +08:00
xtcp 看起来是 tcp ,实际上是它代理了 tcp ,而传输使用的 kcp ,即 udp ,而 udp 打洞在大部分 nat4 下还是有很大几率成功的,参照普通家庭宽带使用 bt 下载
xqzr
2023-11-28 21:27:11 +08:00
xqzr
2023-11-28 21:28:45 +08:00
@Jestom 通常不需要指定
这是 https://github.com/fatedier/frp/issues/3812 的临时解决办法
Jestom
2023-11-28 23:13:52 +08:00
@lazywen 原来如此
amyw495062
2023-11-29 00:40:23 +08:00
@lazywen 所以也是看运气,并不是所有 nat4 都能打洞?
skies457
2023-11-29 09:01:30 +08:00
Tailscale 有篇关于 NAT traversal 的科普: https://tailscale.com/blog/how-nat-traversal-works/
maybeonly
2023-11-29 09:38:42 +08:00
nat4 和 nat4 也是不一样的
linux 内核实现的 nat 的话,默认情况下会尽量保持 nat 后的源端口和之前的源端口一致
这样的话,就有很多文章可以做,甚至 tcp 都有机会连得上

就算端口有变化,只要端口是可预测的,都可能被成功打洞
8E9aYW8oj31rnbOK
2023-11-29 11:52:34 +08:00
frp 的 xtcp 只是对端口打洞吗,楼主可以分享一下两端的配置文件怎么写的吗
lazywen
2023-11-29 12:35:47 +08:00
@amyw495062 一般宽带 nat4 udp 打洞成功的概率还是远高于不成功的概率,不成功的情况很复杂,也说不清,可能由于复杂的网络拓扑、防火墙,或者其他什么阻碍限制
amyw495062
2023-11-29 13:26:15 +08:00
@lazywen 原来,我也一直以为双侧 nat4 不存在打洞的可能性
YGBlvcAK
2023-11-29 18:17:48 +08:00
如果设备发送数据包的源端口和路由器 NAT 后的源端口一致,打洞成功率就很高,双方互发就可以了(stun 服务器告知双方端口)
flynaj
2023-11-30 01:46:45 +08:00
光猫桥接电脑拨号后用 https://github.com/HMBSbige/NatTypeTester/releases/ 测试,你的网络不是 nat4.
xcsoft
37 天前
wk 我也不清楚为什么, 可能和 6 楼所说的有一定关系,走 UDP 可以打洞成功, 但是在我的网络环境下 Tailscale 始终打通不了,只能走中转。 但是 Tailscale 使用 wailgurad 协议,应该也是基于 UDP 的吧,所以有点奇怪

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

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

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

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

© 2021 V2EX