无法转发端口

无法转发端口

我花了一天时间寻找如何将路由器上的端口转发到 PC,但一无所获。现在我束手无策了……而且很沮丧。我看过很多页面,上面有描述和可能的解决方案,但不知何故,我找不到正确的答案。所以,如果这是一个重复的问题,请原谅,我并不是这么认为的。

我想要做的是:我想在工作时访问家里的 PC。为此,我使用 ddns 服务。

有些场景可行,有些则不可行:这是我的“标准”配置。

我有两台电脑,一台台式机和一台笔记本电脑。两台电脑上都有 SSH 服务器 (bitvise) 和 SSH 客户端 (PuTTY)。台式机运行的是 Windows 10,笔记本电脑运行的是 Windows 7。我可以从台式机到笔记本电脑建立 SSH 连接,反之亦然,提示我两台电脑上的端口 22 都已打开。对吗?

ISP
 |
ZyXEL VMG8324-B10A (forward port 22 to 192.168.1.105)
 | .1  (192.168.1.x)
 |
 +- .105 PC (desktop, W10, SSH server on port 22)
 |
 +- .107 PC (laptop, W7, SSH server on port 22)

ddns 服务允许我连接到我的家庭网络。如果我尝试连接端口 80,我只会看到路由器的登录屏幕,没有问题。我甚至尝试使用第二个路由器配置端口 8080,并将原始服务器将端口 8080 转发到第二个服务器。没有问题。

该设置看起来确实是这样的。

ISP
 |
ZyXEL VMG8324-B10A (forward port 8080 to 192.168.1.2)
 | .1  (192.168.1.x)
 |
 | .2
LinkSys E3000 (configuration available on port 8080)
 | .1  (10.233.1.x)

我已成功通过 ddns 提供商连接到 LinkSys 的配置(在端口 8080 上)。没有任何问题。对吧?

如前所述,我可以在 192.168.1.105 SSH 客户端与 192.168.1.107 SSH 服务器之间建立连接,也可以在 192.168.1.107 SSH 客户端与 192.168.1.105 SSH 服务器之间建立连接。

但是我无法通过 ddns 连接到任何 SSH 服务器。

现在,我可以看到 ZyXEL 和 LinkSys E3000 的配置页面(端口 80)(转发端口 8080 有效)。为什么它对端口 22 无效?

以下是 ZyXEL 中的转发规则:

# Status Name      WAN WAN_IP ServerIP      TriggerStart End TranslationStart End Protocol
1 active SSH       wan -      192.168.1.105 22           22   22           22   TCP/UDP
2 active http8080  wan -      192.168.1.105 8080         8080 8080         8080 TCP/UDP

这里没什么奇怪的。PC 和笔记本电脑之间可以进行 SSH 通信,那里也没什么奇怪的。我必须在哪里查找从 ddns 到 PC 的通信?我忘记了什么?

欢迎任何建议!

编辑:2016 年 9 月 5 日。

问题解决了!借助以下答案,我解决了一些配置问题,几分钟前,我能够将 RDC 从我的 Android 传输到我的 PC。太棒了!

答案1

您写道您在网络内部,并且发生了以下情况:

ddns 服务允许我连接到我的家庭网络。如果我尝试连接端口 80,我只会看到路由器的登录屏幕

这意味着您的路由器不支持 NAT 环回。要正确测试端口转发,您需要位于本地网络之外。例如,您可以使用带有移动宽带的手机进行测试。

大多数消费级路由器默认过滤 Ping。当然,这是通过隐蔽性来保证安全性。这也使得问题诊断变得不必要地困难,因此您可以禁用该选项。

另外:
路由器的内部软件也运行不正常。当您浏览外部 IP 地址时,Web 界面会打开。这非常危险!如果不知道您的内部网络结构,攻击者可以通过跨站点脚本等方式控制您的路由器。

答案2

“我可以从台式机到笔记本电脑建立 SSH 连接,反之亦然,这表明两台计算机上的端口 22 都已打开。对吗?”

是的。这表明 SSH 服务器正在运行,并且没有基于软件的防火墙(在任一机器上)阻止该流量。

请注意,这并不意味着您可以从另一个网络通过 SSH 进入。Windows 防火墙可以根据网络显示为“私有”、“公共”还是“来宾”来应用不同的规则。因此,仅仅因为软件防火墙允许一个连接并不意味着另一个连接可以工作。我并不是说这可能是您问题的根源,但如果是的话,如果您不考虑它,检测起来会非常棘手。

我还要确保你了解“开放端口”是什么。我们指的是 TCP 端口号和 UDP 端口号。这些“端口”只是数字。当“端口”开放时,这意味着可以连接到该端口。

因此,当有人尝试向您家的 IP 地址发送 SSH 请求时,您的 ISP 会尽职尽责地将该流量传递到您大楼的路由器上。如果结果是成功连接,则端口已打开。

现在,路由器可以通过两种方式处理该流量以使端口保持开放。

  • 其中一种方法是让路由器运行响应该端口的程序。因此,对于端口 22,这通常意味着路由器将运行 SSH 服务器。(对于端口 80,这通常意味着路由器正在运行 HTTP 服务器,我们通常称之为“Web 服务器”。)

  • 另一种可能的方法是让路由器将流量传递到另一台设备。这通常是通过将流量发送到另一个子网上的设备来实现的。当设备执行此操作时,它会“路由”流量。这就是为什么我们经常将这些设备称为“路由器”。

为了使第二种方法有效,路由器需要知道将流量发送到哪个系统。这可以使用称为“端口转发”的过程来完成。“端口转发”实际上涉及的只是告诉路由器流量预计到达的端口号,然后告诉路由器流量将发送到哪个系统。

现在,如果您检查路由器配置,您可能会发现“端口转发”部分是空白的。那么,在这种情况下如何路由 SSH?嗯,许多路由器都有一个称为“非军事区”的配置部分,通常缩写为“DMZ”。此 DMZ 的工作方式实际上只是端口转发的一个相当特殊的规则。您最终指定路由器将使用哪台计算机,路由器会将所有端口发送到该计算机,除非在“端口转发”部分中指定了更具体的规则。我认为大多数路由器通常不会将 DMZ 放入端口转发部分,可能是因为 DMZ 配置可能会导致路由器转发除这些端口之外的 IP 流量。

一般来说,您只能对端口 22 上的传入流量执行一项操作。好吧,我想可以执行多项操作,例如让来自西雅图办公室的流量流向笔记本电脑,而来自东京的流量流向台式机。但是,这种复杂的设置并不常见。更常见的是让端口转发将不同的端口(例如 2222)发送到您的另一台机器,并让该机器在非标准端口上监听。

(或者让路由器进行一些转换,这样端口 2222 上的传入流量就会重定向到另一台机器的标准端口 22。但接收流量的机器甚至不必知道端口 2222 已被使用。隐藏此类信息会使日志变得没那么有用,然后您需要记住路由器正在进行这样的转换。相反,如果您只监听端口 2222,事情通常会更清楚。)

请注意,ICMP(由 ping 和多个 traceroute 实现使用)不使用 TCP 端口或 UDP 端口。(ICMP 位于 IP 之上。但是,尽管 IP 使用 OSI 网络模型的“第 3 层”,但 ICMP 并不符合 OSI 模型“第 4 层”上的协议的资格,因为它不提供区分“第 4 层”协议的典型对话跟踪功能。)

所以现在您看到,在路由器上打开端口 22 并不一定有助于两台机器获取 SSH 流量。

了解您的 ZyXEL 可能有两个 IPv4 地址(假设您的 Internet 使用 IPv4)。一个是 192.168.1.1。该地址可以安全地告诉我们,因为它是列出的地址RFC 1918。另一个是公共地址。听起来好像该地址会发生变化(因为您使用 DynDNS)。不要告诉我们该地址。(对于对话,您可以假装它以“203.0.113.”开头,这实际上是一组为示例/文档保留的地址,正如RFC 5735 第 5 页

您可能只需要不使用动态 DNS,而是从 ISP 获取静态 IP,这样会更轻松。我知道我所在的地方(美国)有一家 ISP,可以根据要求免费提供静态 IP(给客户)。他们可能想向您收费(如果是这样,您可能还想问一下 /29 的价格是多少,这是一个 8 块,其中 5 块通常可供客户使用)。这并不是说您的动态 DNS 路线行不通,我只是提出另一个供考虑的选项。

ddns 服务允许我连接到家庭网络。如果我尝试连接端口 80,我只会看到路由器的登录屏幕,没有任何问题。

你没有说你连接 80 端口时使用的 IP 地址是什么。但是,既然你在谈到使用 DDNS 之后就这么说了,听起来你是在说使用你的公共 IP 地址。如果事实确实如此,那么Daniel B 的回答是一个非常有效的警告。消费级路由器因其 Web 界面安全性不足而臭名昭著,因此请找到指定您的 Web 界面只能使用有线 LAN 连接访问的选项。(不要信任来自互联网或 Wi-Fi 的连接。)

相关内容