![DNS 如何知道要与路由器上的哪台机器通信?](https://linux22.com/image/1593373/DNS%20%E5%A6%82%E4%BD%95%E7%9F%A5%E9%81%93%E8%A6%81%E4%B8%8E%E8%B7%AF%E7%94%B1%E5%99%A8%E4%B8%8A%E7%9A%84%E5%93%AA%E5%8F%B0%E6%9C%BA%E5%99%A8%E9%80%9A%E4%BF%A1%EF%BC%9F.png)
我有一台可通过 ssh 访问的服务器,地址是 foo.university.edu,我的工作站位于同一个路由器上(该路由器有一个不错的硬件防火墙)。当我检查工作站的公共 IP 时,我发现它是 xx123.4,当我检查 foo.university.edu 的 IP 地址时,它完全相同。这对我来说并不奇怪,因为我理解这只是我的路由器的公共 IP。我理解网络地址转换 (NAT) 如何玩游戏以允许每台机器访问外部信息,或者至少我认为我知道。重要的是,这不允许外部机器直接与我的任何联网机器通信,除非它配置为使用端口转发。
假设在我的路由器上,服务器 foo 的本地 IP 为 192.168.1.100,我的工作站位于 .101。当我通过 ssh 进入 foo 时,所有东西如何知道我需要连接到 100?是不是因为没有其他机器在监听端口 22?
如果我将另一台服务器连接到此网络会发生什么情况?假设我在路由器 192.168.1.102 上连接了一台新服务器,并将其设置为接受来自端口 1000(或其他端口)的 ssh。如果我随后使用 putty 通过 ssh 连接到端口 1000 上的 foo.university.edu,我是否能够通过 ssh 连接到 .102,因为它是那里唯一监听的东西?
答案1
DNS 如何知道要与路由器上的哪台机器通信?
不是。DNS 直接将给定的人类可读 URL 映射到计算机友好的 IP 地址(即路由器的 IP 地址)。因此在 DNS 中, foo.university.edu
映射到x.x.123.4
。
假设在我的路由器上,服务器 foo 的本地 IP 为 192.168.1.100,我的工作站位于 .101。当我
ssh
进入 foo 时,一切如何知道我需要连接到 100?
您的路由器会处理此问题。假设您已选择将端口 22 ( ) 上的通信转发到ssh
192.168.1.100,您的路由器会跟踪此信息。然后,当计算机 A(例如您的工作站)通过端口 22 ( ssh
) 连接您的路由器时,您的路由器会发现端口 22 正在使用,因此需要将该通信转发到 192.168.1.100。
假设我在路由器 192.168.1.102 上连接了一台新服务器,并将其设置为接受来自端口 1000(或其他端口)的 ssh。如果我随后使用 putty 通过 ssh 连接到端口 1000 上的 foo.university.edu,我是否能够通过 ssh 连接到 .102,因为这是那里唯一监听的东西?
不,不会自动进行。至少通常不会。您必须明确将端口 1000 转发到 192.168.1.102。此规则的例外情况是,如果您的路由器具有“DMZ”设置,即它会将所有未知的通信请求发送到的 IP 地址。