如何正确定向到具有多台机器(因此有多个 SSH 服务器)的 LAN 的 public IP 地址的传入 SSH 连接请求?
How does an incoming SSH connection request to a public IP address of a LAN with multiple machines (thus multiple SSH servers) get directed correctly?
假设我在同一局域网内有两台机器mA
(私有IP:192.168.0.3)和mB
(私有IP:192.168.0.4)谁是public IP地址是 2.2.2.2
。这些机器都有使用共同用户名 root
的用户。此外,mA
有用户 uA
,mB
有用户 uB
。
我了解从 mA
或 mB
到另一个 public IP 3.3.3.3
的 ssh
通信是如何工作的。来自 mA port 22
的 SSH 在路由器中创建一个 NAT table,它对应于 2.2.2.2 port 22
作为源地址。因此,从 3.3.3.3
到 2.2.2.2 port 22
的 ssh 请求的任何传入回复都可以反向转换为 mA port 22
。这是可能的,因为 NAT table entry for mA
.
的存在
现在,如果 LAN 外的任何其他服务器尝试使用 ssh root@2.2.2.2
ssh
到 mB
。路由器怎么知道局域网中的哪台机器发送这个SSH请求呢? (因为现在NATtable里面没有什么可以识别mB
了,而且mA
和mB
都有root了)
这与您尝试 ssh uB@2.2.2.2
时发生的情况是否不同,其中用户 uB
仅存在于 mB
中?
传出连接数
on mA: ssh 3.3.3.3
这会在路由器上创建一个 NAT table 条目,其中包含以下连接信息
Source-IP IP of mA
Source-Port >1024
Dest-IP 3.3.3.3
Dest-Port 22
Source-IP被NATed到2.2.2.2
,每次一个带有上述连接信息的数据包(Source-IP是NATed Source-IP)到达路由器时, NATed Source-IP 被转换回 mA
的 IP,然后数据包被转发到 mA
.
传入连接
对于传入连接,路由器上没有可用的连接信息,这意味着路由器不知道如何处理具有
的数据包
Dest-IP 2.2.2.2
Dest-Port 22
在 TCP/IP header 中,假设路由器本身无法通过 SSH 访问。因此,路由器能够定义所谓的 port forwarding 规则。端口转发规则的形式为
[Dest-IP:]Dest-Port --> Real-Dest-IP:Real-Dest-Port
如果路由器接受更多的IP地址端口转发规则也可以区分不同Dest-IPs.
因此,在您的情况下,您必须创建两个端口转发规则,一个用于 mA
,一个用于 mB
。
22 --> mA:22
2222 --> mB:22
不幸的是,您必须从外部连接到不同的端口才能访问您的服务器。
根据此规则,用于访问您的服务器的 ssh 命令如下:
mA: ssh 2.2.2.2
mB: ssh -p 2222 2.2.2.2
顺便说一句:出于安全原因,不建议直接以 root
.
访问您的服务器
假设我在同一局域网内有两台机器mA
(私有IP:192.168.0.3)和mB
(私有IP:192.168.0.4)谁是public IP地址是 2.2.2.2
。这些机器都有使用共同用户名 root
的用户。此外,mA
有用户 uA
,mB
有用户 uB
。
我了解从 mA
或 mB
到另一个 public IP 3.3.3.3
的 ssh
通信是如何工作的。来自 mA port 22
的 SSH 在路由器中创建一个 NAT table,它对应于 2.2.2.2 port 22
作为源地址。因此,从 3.3.3.3
到 2.2.2.2 port 22
的 ssh 请求的任何传入回复都可以反向转换为 mA port 22
。这是可能的,因为 NAT table entry for mA
.
现在,如果 LAN 外的任何其他服务器尝试使用 ssh root@2.2.2.2
ssh
到 mB
。路由器怎么知道局域网中的哪台机器发送这个SSH请求呢? (因为现在NATtable里面没有什么可以识别mB
了,而且mA
和mB
都有root了)
这与您尝试 ssh uB@2.2.2.2
时发生的情况是否不同,其中用户 uB
仅存在于 mB
中?
传出连接数
on mA: ssh 3.3.3.3
这会在路由器上创建一个 NAT table 条目,其中包含以下连接信息
Source-IP IP of mA
Source-Port >1024
Dest-IP 3.3.3.3
Dest-Port 22
Source-IP被NATed到2.2.2.2
,每次一个带有上述连接信息的数据包(Source-IP是NATed Source-IP)到达路由器时, NATed Source-IP 被转换回 mA
的 IP,然后数据包被转发到 mA
.
传入连接
对于传入连接,路由器上没有可用的连接信息,这意味着路由器不知道如何处理具有
的数据包Dest-IP 2.2.2.2
Dest-Port 22
在 TCP/IP header 中,假设路由器本身无法通过 SSH 访问。因此,路由器能够定义所谓的 port forwarding 规则。端口转发规则的形式为
[Dest-IP:]Dest-Port --> Real-Dest-IP:Real-Dest-Port
如果路由器接受更多的IP地址端口转发规则也可以区分不同Dest-IPs.
因此,在您的情况下,您必须创建两个端口转发规则,一个用于 mA
,一个用于 mB
。
22 --> mA:22
2222 --> mB:22
不幸的是,您必须从外部连接到不同的端口才能访问您的服务器。
根据此规则,用于访问您的服务器的 ssh 命令如下:
mA: ssh 2.2.2.2
mB: ssh -p 2222 2.2.2.2
顺便说一句:出于安全原因,不建议直接以 root
.