fatedier / frp

A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
Apache License 2.0
86.54k stars 13.38k forks source link

能否通过添加类似turnserver这种形式来增强P2P(XTCP)之间的通信呢?[Feature Request] #2717

Closed wangzhaobjtu closed 2 years ago

wangzhaobjtu commented 2 years ago

Describe the feature request

比如通过安装coturn(与frp配合使用,或将类似的功能包含到frp代码中),配置一个有公网IP的机器stunserver和turnserver,这样无论是哪种形式的NAT都可以让客户端之间进行P2P。这个具有公网IP地机器即可以是路由器本身,也可以是外部其他机器。

Describe alternatives you've considered

No response

Affected area

wangzhaobjtu commented 2 years ago

可参考:https://nextcloud-talk.readthedocs.io/en/latest/TURN/

fatedier commented 2 years ago

不太理解这个的意思,就是不走 p2p,走用户提供的一个中转节点?

wangzhaobjtu commented 2 years ago

是的,但这个中转节点只告诉双方需要的IP和端口等信息,并不实际转发数据。双方P2P通信进行不了的时候就都去询问这个节点。当然,这只是我一个想法,不知道是否可行。nextcloud talk 使用了turnserver以后就可以让视频通话双方(无论是什么的NAT模式)进行P2P交流,因此,我想到是不是frp也可以使用类似的机制。文档中的这段话 But in many cases, especially in combination with firewalls or symmetric NAT, a direct P2P connection is not possible, even with the help of a STUN server. For this a so called TURN server needs to be configured additionally.

wangzhaobjtu commented 2 years ago

只是起到一个穿线搭桥的作用。

fatedier commented 2 years ago

STUN 是 p2p ,对应 xtcp,TURN 是中继,对应 stcp。 文档说的只是 p2p 不成功,回退到中继方式。你可以再看看文档。

wangzhaobjtu commented 2 years ago

嗯,你说的很对,我不知道该如何表达我的想法,怎么说呢就是这个中继只给P2P双方提供对方信息,保证他们通信就行,而真正的数据还是由P2P双方互发。有点像把xtcp和stcp结合起来,但xtcp转发数据,stcp负责连接两个P2P客户端。我是个外行,天马行空的想到这个,不知是否可行。如果不可行,请忽略,我就关闭这个请求。谢谢您的回复!!

fatedier commented 2 years ago

不是很可行,如果可以 p2p,根本不需要那个额外的中转节点,在 frp 中,frps 就是这个提供双方 IP 和端口信息的节点,同时自身也可以是流量转发的中继节点。

并不是说,由于网络限制,原本不能 P2P 的,加一个中转节点之后就能 P2P 了。

wangzhaobjtu commented 2 years ago

原来这样啊,感谢!