因此,我有多个 Raspberry Pi 4B(8 个)通过以太网电缆连接到我的 FritzBox。所有 Pi 都在其设置中启用了 SSH,并且可以通过键入“ssh”在本地网络中使用 SSH[电子邮件保护]“。我为我的路由器设置了一个 dynDNS 服务,这样我就不用知道确切的 IP 地址就可以访问它。这也很好用。
然后我使用 FritzBox 的“允许访问”选项将端口 22 和 3389 转发到其中一个 RPi。现在我可以在该 RPi 上使用 SSH 和 MS 远程桌面了。
问题:所有其他 RPi 都安装了无头 Raspberry OS Lite,我也需要通过 Internet 为它们使用 SSH。但由于第一个 RPi 已在使用端口 22,因此我无法使用任何其他使用端口 22 的 RPi。
有一种称为端口重定向的方法,我在网上多次读到过。但没有人真正轻松地解释过它。所以,我必须找到一种方法来做到这一点:
路由器
|-> 外部端口 2200 -> Pi Nr. 0 的端口 22
|
|-> 外部端口 2201 -> Pi Nr. 1 的端口 22
|
|-> 外部端口 2202 -> Pi Nr. 2 的端口 22
|
|-> 外部端口 2203 -> Pi 3 的端口 22
但我不知道这是怎么回事;D
为了实现这一点,我必须在 RPi 上编辑哪个配置文件或者必须在路由器上更改哪些设置?
谢谢你的回答:)
(PS:我是网络菜鸟。大约两年来,我一直在为 PC 编写 Java 软件,有时也为 Discord Bots 编写代码,作为一种爱好。但我不知道所有互联网的东西是如何运作的,我想学习它 XD)
答案1
有一种称为端口重定向的方法,我在网上多次读到过。但没有人真正轻松地解释过它。
在大多数路由器上,无论是否需要更改端口,允许外部访问内部 IPv4 主机的功能实际上是相同的。如果您的 Raspberry Pi 有私有 IP 地址,路由器无论如何都必须执行 NAT,因此“端口重定向”是其中的一部分,并不是真正独立的事情。
在您的情况下,如果您在同一个“允许访问”部分中选择“其他应用程序”,FRITZ!Box 似乎允许您输入不同的“外部”和“内部”端口。
通过截图在谷歌上找到这将是:
- 应用:[其他应用]
- 协议:[TCP]
- 端口至设备:[22] 至 [22]
- 外部请求的端口(IPv4):[2201]
(该字段被标记为 IPv4 特定,因为在 IPv6 中您将直接连接到 Pi 自己的地址而不是路由器的地址,因此“外部”和“内部/到设备”端口之间不会有任何分离。)
为了实现这一点,我必须在 RPi 上编辑哪个配置文件或者必须在路由器上更改哪些设置?
通常是一个或者其他的,取决于你想要什么。
路由器 |-> 外部端口 2200 -> 端口22圆周率 0 |-> 外部端口 2201 -> 端口22圆周率 1 |-> 外部端口 2202 -> 端口22圆周率 2
这大概就是所谓的“端口重定向”。它需要路由器转换端口,而不需要对 Pi 本身进行任何更改。
它通常特定于 IPv4;虽然在 IPv6 中从技术上讲仍然可行,但它被认为是“应该避免”的事情。(这主要是因为在 IPv6 中每个你的 Pi 将会有它自己的外部地址,因此端口 22 冲突问题将变得毫无意义。)
在 FRITZ!Box 上,这似乎隐藏在您正在使用的同一“允许访问”页面中的“其他应用程序”选项下。
路由器 |-> 外部端口 2200 -> 端口2200圆周率 0 |-> 外部端口 2201 -> 端口2201圆周率 1 |-> 外部端口 2202 -> 端口2202圆周率 2
这不需要路由器进行任何重写(在 IPv4 和 IPv6 中工作方式相同),但需要 Pi 上的 SSH 服务监听相应的端口。
在 Linux 上,这是
Port
选项/etc/ssh/sshd_config
– 您可能应该添加两次,分别用于默认端口 22 和自定义端口 2200。
你可以当然可以同时进行这两项操作,例如将外部端口 2200 重写为 Pi 端口 3300,但这只是没有必要的。
您还可以选择不是使其他 Pi 完全可以从外部访问。相反,您可以使用ssh -J
通过第 0 个 Pi 连接到所有 Pi,例如ssh -J public.ip lan.ip.pi2
。