udp - 用于重定向 UDP 的 SOCAT 不起作用!

标签 udp network-protocols lan wan socat

我正在尝试将 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 () 对于每个接收到的数据包有点奇怪。 Stone 在你的情况下是这样的(我认为):

stone -n​​ -d -d -d -d 192.168.0.40:37000/udp 1935/udp

现在为什么外部 IP 可能不起作用。可悲的是,您的文字并没有说明您的设置,所以我不得不猜测:

这取决于您的防火墙/调制解调器/路由器是否能够转发 UDP 数据包。通常,如果你从内部发起 UDP 请求,路由器会打开一个 NAT 连接,这通常意味着,不仅数据包的源 IP 发生变化,而且源端口也会发生变化。由于 UDP 是无连接的,如果没有数据传输,UDP NAT 连接通常会很快超时,比如 5 分钟后。

如果必须在相反的方向(从Internet 到Intranet)打开UDP,路由器通常会丢弃所有来自Internet 的UDP 数据包,因为它不知道将它们转发到哪里。路由器不能随便选择一些任意机器,这将是一个安全漏洞。所以在“Internet connecting to a machine behind the router”中你必须打开路由器上的UDP端口,让它转发到正确的机器上。在这种情况下,从您的内部机器发送的数据包将获得其源 IP 和源端口被重写,Internet 上的机器始终会将数据包视为来自您的路由器。因此,除了路由器中的附加规则外,这种情况与传出情况相同。

请注意,有几种不同的方法可以制作 NAT(对称等),也有几种方法可以打开路由器上的端口(Config、UPnP 等),所以总是会在其中戳一些洞取决于你的硬件能力。这一切都无法在这里得到解答。

还有一些其他可能出错的想法:

  • 一些 UDP 协议(protocol)对负载中的 IP 地址进行编码。在那种情况下,仅仅转发数据包是不够的,您还必须更改有效负载以更正交换的 IP 地址,以使所有机器能够一起通信。不管怎样,这样的 UDP 协议(protocol)设计得很糟糕,因为你永远不应该假设任意两台机器可以直接相互对话,所以所有好的协议(protocol)都应该支持简单的代理。

  • 某些 ISP 会出于任意原因过滤某些 UDP 端口。如果您在从 Internet 与 DSL 通话时遇到问题,请尝试使用直接连接到不同 ISP 的两台外部计算机。如果这些可以通过 UDP 通信,请检查您是否可以从您的 Intranet 与其中一台外部机器通信。如果这仍然有效,这意味着您也可以向后交谈,因为通常 UDP 不是定向协议(protocol),但如果涉及一些 NAT,您必须以某种方式确保通信端口保持打开状态。

    <
  • 移动互联网计划通常不支持 P2P。这可能意味着,那些计划根本不支持互联网,因为IP,顾名思义,就是P2P。 ISP 真正想用“无 P2P”表达的是(我的猜测),即不支持从 Internet 到移动设备的连接。在这种情况下,您始终必须从移动设备发起连接,因此您不能使用推送方法(互联网到手机),移动设备始终必须拉取(来自互联网的数据)。一些宽带/有线电视提供商可能也会这样做。如果您的 ISP 将 10.x.y.z 范围内的 IP 分发给您,您通常可以看到这一点。

可能还有另一个技巧可以使连接正常工作:

请您的 ISP 获取一些 IPv6。也许使用 6to4 .使用 IPv6,您可以完全消除 NAT,然后您的本地 LAN 可以直接互连到 IPv6 上的 Internet。请务必在 IPv6 接口(interface)上的 Intranet 主机上激活防火墙/iptables,否则您可能会很快看到入侵者。

HTH

关于udp - 用于重定向 UDP 的 SOCAT 不起作用!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5968226/

相关文章:

node.js - 如何向 LAN 上的 Node.JS 服务器发送广播请求?

networking - 广播

c++ - 无法在matlab中的UDP客户端和linux中的服务器之间发送数据

c++ - 使用套接字 SFML 时窗口没有响应

java - 从 YANG 数据模型生成 XML RPC NETCONF 请求的标准方法是什么

php - Apache 或 PHP 替换主机名

c - UDP套接字: server sending file to client Address family not supported by protocol family

django - 通过无线网络设置本地 ip 以在 Ubuntu 上创建本地服务器

c - 如何在不读取 TCP 连接的情况下检查 TCP 连接是否被对等方正常关闭?

c# - 通过局域网发送声音或流式传输声音