通过一台服务器来自防火墙后面的两个连接 - 这两个连接可以直接发送数据而不通过服务器吗?

发布于 2024-09-06 03:34:37 字数 663 浏览 7 评论 0原文

有三台计算机,服务器-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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

烟酒忠诚 2024-09-13 03:34:37

如果服务器 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文