问题标签 [nat-traversal]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - 从服务器远程在客户端上运行 shell 脚本
我有一台服务器和多个客户端。服务器想要在它想要的每台设备上运行 shell 脚本。绝对不可能通过简单的套接字,因为我们可能有成千上万的设备。服务器和设备也应始终通过套接字连接。经过大量搜索后,我发现解决方案可能是 NAT-T。但我仍然不知道如何使用它或者是否有其他解决方案。请帮助我在客户端和服务器上应该做什么。
c# - C#中的Tcp打孔
我有一个全局可访问的服务器,一旦连接到它,就会发送主机的公共端点。我使用两个客户端连接它,然后在每个客户端上使用一个 TcpListener 和 2 个 TcpClient 来尝试相互连接。我可能做错了什么,因为连接总是被拒绝或超时。
这是 2 个客户端的代码。
两个客户端都在 NAT 之后,一个在家庭网络中,另一个在商业网络中。
我按照这个文档介绍了如何进行 Tcp NAT 遍历。
networking - STUN 和 TURN 说明
我需要在服务器和客户端之间建立连接,它们都可以位于任何类型的 NAT 之后。为此,我在 Internet 上有一个专用主机,其 IP 干净,用于托管 STUN/TURN 服务器。我不会使用 WebRTC,我只想使用 STUN/TURN 服务器在客户端和服务器之间进行消息传递。在阅读了 RFC、SO 等之后,我还有一些不清楚的问题:
- 在什么情况下使用 STUN?据我了解,STUN 仅用于全锥 NAT。在所有其他情况下,由于主机和/或端口限制,必须使用 TURN 服务器。那是对的吗?
- 看来我需要一个信令服务器来通知客户端服务器地址,反之亦然。但是一旦客户端/服务器向信令服务器发送消息,我就知道他们的外部主机:端口,所以我让每一方都知道对方的主机:端口,每一方都可以向这个信令服务器发送包含对等方的主机:端口数据的消息,信令服务器可以使用它来检测此消息是针对哪个对等点并将其转发给相应的对等点。乍一看,这个逻辑在我看来非常简单,我的信令服务器变成了一个 TURN 服务器——这就是 TURN 服务器的实现方式吗?但如果是这样,我不明白,为什么我需要像“coturn”、“reTurn”等这样的 TURN 服务器?我知道他们实现了 ICE,但是如果我的信令服务器从具体主机接收到消息:对等方的端口,这个 ICE 将如何工作,
- 在受限 NAT(端口、地址或对称)的情况下,客户端外部(公共)端口在路由器上打开多长时间以接收 UDP 数据报?我读到 TURN 客户端向服务器发送刷新消息以保持通道打开,这是客户端如何防止端口关闭的方式吗?
nat - libutp (µTP) 和 NAT 遍历(UDP 打孔)
根据维基百科的文章,微传输协议支持使用 UDP 打孔的 NAT 穿越。但是查看libutp 的项目页面,我在头文件中找不到任何此类引用。我错过了一些明显的东西吗?还是在其他地方实现了 NAT 穿越?
port - Nat Punchthrough 理解 P2P 概念
所以,我一直在阅读 NAT-Punchthrough。我似乎明白了这个想法,但我很难实现它,我觉得我在这里错过了一步。测试这个功能有点困难,因为当涉及到基于互联网的连接时,我几乎无法控制环境。
我有一个 SQL 服务器作为我的“促进者”运行,它保存服务器和客户端的外部地址,以及外部看到的它们的端口。
以下是到目前为止的步骤: - 我通过存储服务器/客户端 IP/PORT 的 Web 请求(PHP 脚本)连接到我的 SQL 服务器 - 当两者都已知时,客户端和服务器都尝试连接(服务器主机在设置的端口上,客户端通过设置的端口连接) - 没有发生任何重大事件
这里有两个未知数,我想和你一起检查一个。NAT-Punchthrough 是否确实要求我使用我计划在之后的步骤中连接的确切(内部/LAN)端口执行第一步?
如果是这样,我不知道我的服务器在水下究竟是如何工作的,所以它可能需要比我最初给定的静态端口更多的端口来连接,但这至少给了我一个提示。
如果有人有更多关于这方面的文件然后我,请告诉我。
资料来源:
编程 P2P 应用程序
http://www.mindcontrol.org/~hplus/nat-punch.html
tcp - 使用 TCP on.net 核心的 P2P 网络
我想知道是否可以使用 .net 核心(不是 asp.net 核心,而是 .net 核心控制台应用程序)进行 P2P 网络和 TCP NAT 遍历,所以我做了一些研究,我在 MSDN 中遇到了这个,但这是关于 .net框架而不是 .net 核心,所以我也可以在 .net 核心中使用相同的方法,而且我无法在博客文章中提到的 .net 核心中找到 System.net.PeerToPeer 命名空间,所以它存在并重命名或没有在.net核心中实施了吗?如果您能告诉我是否可以在不使用 3rd 方和使用 IPv4 的 .net 核心中的端口转发(如可以在 Windows、Linux、具有相同代码 TNX 的 unix
sockets - 使用 CG-NAT 的两个设备之间的直接客户端-服务器连接
我想连接两台位于不同位置但连接到互联网的设备,一台运行 Windows 10 的计算机和一台智能手机 android。该应用程序是一个简单的 UDP 套接字,用于在它们之间传输数据,但我有不同的场景。
第一种情况。具有公共 IP 的 PC 和智能手机位于 3G/4G CG-NAT 之后) PC 打开 de UDP 套接字,智能手机连接到公共 IP,简单快捷。
第二个场景。带有公共 IP 的 NAT 后面的 PC 和 3G/4G NAT 后面的智能手机)
选项 A) PC 配置一个端口转发到 NAT 到它的内部 IP,然后智能手机连接到该公共 IP。简单但不快,因为客户端必须配置 NAT。
选项 B) 使用 UDP HOLE PUNCHING 在 NAT 上打开一个洞,然后客户端连接到它。
第 3 种情况。电脑和智能手机都在 CG-NAT 后面。 这是我的问题,PC 有时在 CG-NAT 后面,可能是因为 ISP 使用了这种技术,或者可能是因为使用另一部智能手机的 Wifi Hotspot 连接到互联网。据我所知,我无法使用任何协议(UPnP、PCP 等)配置 CG-NAT,因此无法进行端口转发。由于“端口随机化”,UDP 打孔不是一个选项,因此 ISP 会在 CG-NAT 之外更改我的源端口,并且每个连接都会更改。
我正在开发一个依赖于此的项目,在没有技术细节的情况下在 PC 和智能手机之间直接连接,并且始终在两个客户端都有互联网的情况下工作,不管是否有防火墙,在 NAT 后面等等……我正在考虑使用第三个云服务器使用公共 IP 连接它们,但只是为了建立连接,而不是转发所有流量,因为这会给我的项目增加延迟和流量成本,这是无法承受的。那么……有什么技术可以解决我的问题吗?
谢谢!
c++ - C/C++ UPNP NAT 遍历 Winsock 实现
我目前正在使用 C/C++ 和 Winsock2 在 Internet 上使用 P2P 网络。有了这个,我想用 UPNP 与路由器进行端口转发(我知道有些路由器没有 UPNP,我只需要用这种技术来做)。
我想创建一个简单的类,即“NATUPNP”来使用 UPNP 进行所有 NAT 遍历。我已经上了这门课,但它引起了很多错误,因为我不是很喜欢网络编程抱歉(仅限简单知识)。如果有人知道如何做到这一点,我将非常感谢您的努力。下面是我的课程,其中包含我想在那里工作的功能/方法。提前致谢。
sip - 你如何使用 Kamailio 为 RTP 媒体进行 NAT 穿越?
有问题的三个设备。
- NAT 后面的 VoIP 电话
- 我自己在 EC2 实例上的 Kamailio 服务器。
- 我手机上的 Android 版 Linphone 应用程序。
我的手机在移动数据上,因为我有一个 MVNO,它似乎也被 NAT 过(私有 IP,如 192.0.0.X)。
我的问题是,虽然 SIP 信令工作得很好,但我无法让任一设备接收对方的 RTP 媒体流。
我在 kamailio.cfg 中定义了 WITH_NAT,但它似乎对收集候选人没有帮助。这是通过 Kamailio 之前和之后的邀请。
前:
后:
入站电话也是如此。
我期待 nathelper 模块添加类似
但显然不是。我可以修改o=
并c=
在标头中使用服务器收到邀请的 IP,但是服务器如何知道 RTP 媒体应该发送到哪些端口?服务器可以知道 的唯一端口是
- 发送邀请的端口(私人和公共方面)
- sdp 中提供的端口。但这些都是私人的。他们在公共方面肯定会有所不同吗?
对此的任何帮助将不胜感激。
android - P2P 多人安卓 NAT 穿越解决方案/库?
我正在编写一个多人安卓游戏,其中对等点之间连接的可靠性并不重要,因为它唯一的多人游戏方面是信息丰富的(每组玩家获得相同的拼图广告,P2P 连接用于通知每个玩家其他人每5秒的进度),我可以使用这样的配对服务来传达匹配组的IP,但我不知道从那里去哪里,我只知道我无法建立直接连接NAT 背后的玩家,我找到了一些解决方案,但它们都是昂贵的或限制性的(例如光子),所以我的问题是有哪些可用的 NAT 遍历解决方案/库可以免费用于多人 android 游戏开发?