我正在尝试将UDP数据报中的数据传输到外部位置的客户端到本地局域网中的PC。但我的网络是通过 ADSL 调制解调器发送到带有 Slackware 的电脑,这台电脑将包重定向到其他电脑。我正在使用 socat 重定向 UDP:
socat -v udp-listen:1935,fork,reuseaddr udp:192.168.0.40:37000
在 LAN 中连接很好,但外部 IP 不起作用。有人帮忙吗?
我正在尝试将UDP数据报中的数据传输到外部位置的客户端到本地局域网中的PC。但我的网络是通过 ADSL 调制解调器发送到带有 Slackware 的电脑,这台电脑将包重定向到其他电脑。我正在使用 socat 重定向 UDP:
socat -v udp-listen:1935,fork,reuseaddr udp:192.168.0.40:37000
在 LAN 中连接很好,但外部 IP 不起作用。有人帮忙吗?
我不认为socat
是罪魁祸首,但是考虑使用stone
而不是socat
,因为fork()
对每个接收到的数据包使用 a 有点奇怪。在您的情况下,Stone 被称为(我认为):
stone -n -d -d -d -d 192.168.0.40:37000/udp 1935/udp
现在为什么外部 IP 可能不起作用。可悲的是,您的文字并没有说明您的设置,所以我不得不猜测:
它是否能够转发 UDP 数据包取决于您的防火墙/调制解调器/路由器。通常,如果您从内部发起 UDP 请求,路由器将打开一个 NAT 连接,这通常意味着,不仅数据包的源 IP 会发生变化,源端口也会发生变化。由于 UDP 是无连接的,UDP NAT 连接通常会很快超时,比如 5 分钟后,如果没有数据传输。
如果 UDP 必须反向打开(从 Internet 到 Intranet),路由器通常会丢弃所有从 Internet 进来的 UDP 数据包,因为它不知道将它们转发到哪里。路由器不能随便选择一些机器,这将是一个安全漏洞。所以在“Internet 连接到路由器后面的机器”中你必须打开路由器上的 UDP 端口,让它转发到正确的机器上。在这种情况下,从您的内部机器发送的数据包将获得它们的源 IP 和源端口,因此 Internet 上的机器将始终将数据包视为来自您的路由器。因此,除了路由器中的附加规则外,这种情况与传出情况相同。
请注意,有几种不同的方法可以制作 NAT(对称等),还有几种方法可以打开路由器上的端口(配置、UPnP 等),因此在其中插入一些漏洞的方法总是取决于您的硬件能力。这一切在这里都无法回答。
其他一些可能会出错的想法:
一些 UDP 协议在负载中编码 IP 地址。在这种情况下,仅转发数据包是不够的,您还必须更改有效负载以更正交换的 IP 地址,以使所有机器能够一起通话。无论如何,这样的 UDP 协议设计得很糟糕,因为你永远不应该假设两台任意机器可以直接相互通信,所以所有好的协议都应该支持简单的代理。
某些 ISP 出于任意原因过滤某些 UDP 端口。如果您在从 Internet 与 DSL 通信时遇到问题,请尝试使用两台直接连接到不同 ISP 的外部机器。如果这些可以通过 UDP 交谈,请检查您是否可以从您的 Intranet 与其中一台外部机器交谈。如果这仍然有效,这意味着您也可以向后交谈,因为通常 UDP 不是定向协议,但如果涉及一些 NAT,您必须以某种方式确保通信端口保持打开状态。
移动互联网计划通常不支持 P2P。这可能意味着,这些计划根本不支持 Internet,因为 IP 顾名思义就是 P2P。ISP 真正想说的是“没有 P2P”(我猜),不支持从 Internet 到移动设备的连接。在这种情况下,您始终必须从移动设备发起连接,因此您不能使用推送方法(Internet 到 Mobile),移动设备必须始终拉取(来自 Internet 的数据)。一些宽带/有线电视提供商可能会这样做。通常,如果您的 ISP 将 10.xyz 范围内的 IP 分配给您,您就会看到这一点。
如何使连接正常工作可能还有另一个技巧:
要求您的 ISP 获取一些 IPv6。也许使用6to4。使用 IPv6,您可以完全消除 NAT,然后您的本地 LAN 然后直接通过 IPv6 互连到 Internet。确保在 IPv6 接口上激活 Intranet 主机上的防火墙/iptables,否则您可能很快就会看到入侵者。
高温高压