通过一台服务器来自防火墙后面的两个连接 - 这两个连接可以直接发送数据而不通过服务器吗?
有三台计算机,服务器-A 客户端-B 和服务器-C。所有这些都通过 TCP/IP 连接。计算机服务器 A 和客户端 B 位于防火墙后面,只能进行向外连接。计算机服务器-C 既可以监听也可以连接。
服务器 A 和服务器 C 将运行我的程序,因此可以监听和连接,至少我可以对它们进行编程来这样做。运行在Client-B上的软件只能连接。
我想建立从客户端 B 到服务器 A 的直接连接。由于防火墙的原因,我无法创建从客户端 B 到服务器 A 的直接连接(反之亦然)。但我可以让客户端 B 和服务器 A 都连接到服务器 C。
为了让它工作,我可以在 Server-C 上创建一个代理,它只是将数据包从 Client-B 转发到 Server-A (反之亦然),但我不想这样做 - 我希望在 Client-B 之间建立直接连接-B 和服务器-A。
我的问题是,Server-C 是否可以通过某种方式操作 IP 数据包,以便 Server-C 最初只需要两者进行连接,然后可以“连接”两个套接字流,以便它们可以直接向彼此发送数据包?
一个通用的例子是;家庭计算机 A 希望将一些音乐文件发送到计算机 C。它们都位于防火墙/路由器/其他设备后面。所以他们只能连接到端口 80 上的某个服务器 B。现在我希望服务器 B 做一些魔术,这样音乐文件就不会通过服务器 B 发送,而是直接从 A 发送到 C...
非常感谢任何帮助或提示!
There are three computers, server-A client-B and server-C. All are connected via TCP/IP. Computer server-A and client-B are behind a firewall and can only make outward connections. Computer server-C can both listen and connect.
Server-A and server-C will run my program and hence can both listen and connect, at least I can program them to do so. The software that runs on Client-B can only connect.
I want to make a direct connection from Client-B to Server-A. I cannot create a direct connection from Client-B to Server-A (nor the other way around) due to the firewall. But I can have both Client-B and Server-A connect to Server-C.
To get this to work I could create a proxy on Server-C which just forwards packets from Client-B to Server-A (and the other way around) but I don't want to do this - I want a direct connection between Client-B and Server-A.
My question, is there some way that Server-C can manipulate the IP packets so that Server-C is only initially needed for the two to connect but can then 'connect' the two socket streams so they can directly send packets to each other?
A generic example would be; home computer A want so send some music files to computer C. Both of them are behind firewalls/routers/whatever. So they can only connect to some server B on port 80. And now I want server B to do some magic so that the music file is not sent via server B but directly from A to C...
Any help or tips are greatly appreciated!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果服务器 A 和客户端 B 位于 NAT 后面,则可以使用打洞方法。
如果没有 NAT,那么通过 server-C 进行 tcp 隧道并不是一个坏主意。
If Server-A and Client-B are behind NAT then hole punching approach can be used.
If there is no NAT, then tcp tunneling via server-C is not that bad idea.