是否可以访问 CGNAT 后面的机器(通过以某种方式将 IP 和端口发布到 DDNS 服务?)?

是否可以访问 CGNAT 后面的机器(通过以某种方式将 IP 和端口发布到 DDNS 服务?)?

我的设置如下:我有一台机器,我希望能够通过单个端口从家外的互联网访问它(例如,通过 SSH 进入它)。这台机器位于我家的路由器后面(我可以完全控制它,如果可以的话),我的 ISP 使用动态 IP,其端有 NAT(运营商级 NAT)。因此,我的公共 IP 正在变化(我已经习惯了,可以使用 dedyn.io 等 DDNS 服务来解决),但此外,我的公共 IP 在多个客户之间共享(这是我不知道如何解决的问题)。

我的问题是:有没有办法,以某种方式,仍然允许我通过单个特定端口访问我的机器,通过“做类似的事情”向 DDNS 服务发布一个 IP 和一个我知道将被路由回我家用路由器上的特定端口的端口,然后我可以将其路由回我的机器?(我理解这混合了不同网络堆栈级别的概念,例如 DNS 与协议)

我不知道如何解决这个问题,也不知道这是否可行。如果不行,我可以考虑其他方法使我的机器可访问(例如通过洋葱服务;还有其他免费建议吗?我不想依赖云端的“跳跃反向 ssh 隧道机器”,因为我不想为此付费)。


笔记:问题来自https://networkengineering.stackexchange.com/questions/79902/is-it-possible-to-access-a-machine-behind-an-isp-nat-by-publishing-somehow-ip-a,根据评论中收到的反馈。


答案1

你可以尝试普纳特

这是一个解决此问题的开源工具,其目的是允许任意数量的 NAT 后面的客户端与同样位于 NAT 后面的服务器进行通信,而无需在任何路由器上使用端口转发。服务器不需要知道有关尝试连接的客户端的任何信息。

我还没有找到 pwnat 的编译版本,因此你需要从源代码进行编译。

pwnat 使用的方法非常巧妙,但不能保证它适用于您的环境。

答案2

我的问题是:有没有办法,以某种方式,仍然允许我通过单个特定端口访问我的机器,通过“做类似的事情”向 DDNS 服务发布一个 IP 和一个我知道将被路由回我家用路由器上的特定端口的端口,然后我可以将其路由回我的机器?(我理解这混合了不同网络堆栈级别的概念,例如 DNS 与协议)

一般来说,不是的,原因有二:

  1. 大多数软件(包括 SSH)甚至不会DNS 端口号。它们要求 DNS 提供地址列表(A/AAAA 记录),但其中没有端口空间。

    可以在 DNS 中发布任意数据,例如使用 SRV 或 TXT 记录(如果您的 DDNS 服务允许),但您仍然需要围绕客户端的自定义包装器,使其自动从 DNS 中提取端口。对于 OpenSSH 来说,这相对容易(ProxyCommand将是一个好的开始),对于其他软件来说则不那么容易。

  2. DDNS服务无法制作一个可从外部访问的地址或端口——他们唯一要做的就是给它分配一个名称。大多数实施 CGNAT 的 ISP 不向客户提供任何可从外部访问的 TCP 端口。(与您自己的家用路由器一样,它们仅接受与已建立的流相对应的数据包,并且与您的家用路由器不同的是,它们几乎从不允许客户通过 UPnP 或类似方式请求入站端口转发。)

    根据我的经验,即使使用 1:1 映射(即实际上不会同时在多个客户之间共享地址)的 CGNAT 通常也会故意不允许入站连接,即使这在技术上是可行的。

例如通过洋葱服务;还有其他免费建议吗?我不想依赖云端的“跳跃反向 SSH 隧道机”,因为我不想为此付费

有几种选择,但是全部其中(包括 Tor 洋葱服务)必然归结为通过其他人的基础设施建立某种长寿命连接,然后将其用作反向隧道。

(至少有 3 家大型“云服务器托管”公司完全免费提供小型 VPS,因此您可以在那里设置“跳转反向 ssh 隧道机”。)

答案3

所谓的“覆盖”网络可以作为一种解决方案。例如 ZeroTier、Tailscale、Nebula(由 Slack 提供)、Innernet、Ngrok 及其替代方案。

提到的一些解决方案满足所有要求:

  • 零配置/打开端口
  • 允许跨网络漫游(使用覆盖网络进行寻址)

Cloudflare 隧道已经出现,然而它是一个封闭源解决方案,此外,他们可以看到您穿越其网络的所有流量(并不是说他们是坏人!)。

后者是如何被知道的?有一个图表显示了这一点,并且它们具有一项功能,可以启用往返本地设备的安全流量(TLS 证书)并限制谁可以访问它们。您的流量并不安全,因为它只是 http,但现在正在通过 Cloudflare 创建的证书和正在检查的访问权限(身份验证)进行支持/升级。

https://developers.cloudflare.com/assets/handshake_hufad68abf6107ffc2ef859ebe1b42b6e2_299675_1768x1102_resize_q75_box-3f75968f.jpg

答案4

如今,许多使用 CG-NAT 的零售 ISP 家庭计划都会阻止传入端口,包括 80、443 等。但是,有些可以选择退出 CG-NAT,允许使用唯一的动态或静态 IP 寻址,这有时对于某些医疗设备或家庭安全系统来说是必要的。

相关内容