通过 NAT 的隧道

通过 NAT 的隧道

我有一个路由器,可通过无线蜂窝数据网络向单个客户端设备提供互联网连接。该网络提供非公共 IP 地址,这些地址会受到限制。我想获得网络外部的静态 IP 地址,以便将所有内容路由回蜂窝网络上的设备。

由于这是一个嵌入式设备,因此空间有限(此处大约需要 500kB)。因为网络很贵,所以不能消耗太多流量。

首先,我尝试使用 iproute2 创建 IPIP 隧道。在服务器上,我使用路由器的出口 IP 作为远程 IP,而不是路由器收到的私有地址。我希望一旦路由器通过隧道与服务器进行通信,服务器就可以进行回复。此情况并非如此。

我尝试了 dropbear SSH,发现它不能做通用隧道,但我想我可以使用 iptables 来解决这个问题。然而,似乎仅仅打开 ssh 链接就会消耗大约 150 字节/秒。

我也尝试过 nc,但通信只有一个方向,因此我可以发起与服务器的连接,但无法返回任何信息。

OpenSSH 和 OpenVPN 太大,无法安装在设备上(均约为 1MB)。

我的下一次尝试可能是编写一个程序,使持久套接字对服务器保持打开状态,并使用 iptables 将流量路由到该程序。我想先看看是否还有其他想法。

那么,有什么想法吗?

答案1

IPIP 隧道可能使用的唯一 NAT 是一对一 NAT,这显然不是蜂窝情况下的情况。

这种“开放 SSH 连接每秒 150 字节”的情况非常奇怪,您应该调查一下。对于我来说,OpenSSH -> OpenSSH 会话不会发生这样的事情(有不可避免的保活,但当您位于 NAT 后面时,您实际上想要这些),并且没有理由这样做,除非您实际上正在传递流量。

您错误地认为 netcat 是单向的,用 netcat 发起的 TCP 会话是双向的。

我建议您以任何方式获取双向流(可能是 netcat 和服务器上的 TCP 侦听器)并在其上运行 PPP。你得到所有通常的缺点运行 IP over TCP,但这比完全没有连接要好。

以下是在服务器上进行快速测试时对我有用的内容:

server:~$ sudo pppd noauth passive pty "nc -lp 9999" debug nodetach

在客户端:

client:~$ sudo pppd noauth pty "nc server 9999" debug nodetach

我认为拨号语义还为您的手机设备根本无法访问的情况提供了一个有用的模型。

运行 IP 连接后,您可以考虑玩 IPIP 或 1:1 NAT。

相关内容