我花了一天时间寻找如何将路由器上的端口转发到 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 的连接。)