外部 IP 地址、子网掩码和 SSH - 它们是如何工作的?

Zul*_*lfe 3 networking router ssh lan wan

我真的很困惑如何通过 Internet 在另一个网络中的计算机上连接到我网络上的特定计算机。例如,我有一个 beowulf 集群在我家不断运行。我将它用于硬核计算,例如从单词列表中暴力破解密码。现在假设我在我的笔记本电脑上,但在其他人的 LAN 上的其他地方。我知道beowulf集群中master节点的外部IP,而且是所有节点中唯一一个连接到Internet的。但是,当我将外部 IP 获取到与集群位于同一 LAN 上的桌面时,我获得了相同的外部 IP。据我了解,该 LAN 上的所有设备的外部 IP 都是相同的。beowulf 集群主节点的外部 IP,我的桌面,和我的智能电视(例如)应该都一样,因为它们都通过同一个调制解调器路由,对吗?子网掩码决定了数据来自 LAN 上的哪个节点(所有设备共享的外部 IP),对吗?如果是这样,如果我的桌面也打开了 SSH 端口 22,我如何通过 SSH 连接到集群中的特定主节点以向其发送信息以进行处理?如果局域网内有两台或多台机器,并且这些机器都运行SSH,并且该局域网只能被两台机器共享的外部IP引用,我如何指定我想连接到该局域网中的哪台机器?如果我的桌面也打开了 SSH 端口 22,我如何通过 SSH 连接到集群中的特定主节点以向其发送信息以进行处理?如果局域网内有两台或多台机器,并且这些机器都运行SSH,并且该局域网只能被两台机器共享的外部IP引用,我如何指定我想连接到该局域网中的哪台机器?如果我的桌面也打开了 SSH 端口 22,我如何通过 SSH 连接到集群中的特定主节点以向其发送信息以进行处理?如果局域网内有两台或多台机器,并且这些机器都运行SSH,并且该局域网只能被两台机器共享的外部IP引用,我如何指定我想连接到该局域网中的哪台机器?

gro*_*taj 6

子网掩码

子网掩码仅用于将一个网络中的计算机分组为子网。

IPv4 地址包含四个八位字节,总共 32 位。假设您的 LAN 上有几台计算机,它们分配了以下 IP 和子网掩码:

  1. IP 192.168.0.1, 掩码255.255.255.0
  2. IP 192.168.0.6, 掩码255.255.255.0
  3. IP 192.168.1.1, 掩码255.255.255.248
  4. IP 192.168.1.6, 掩码255.255.255.248
  5. IP 192.168.1.12, 掩码255.255.255.248

要确定哪些计算机属于哪个子网,我们必须将掩码应用于 IP 地址:

  • 将 IP 和掩码转换为二进制

    1. IP 11000000 10101000 00000000 00000001, 掩码11111111 11111111 11111111 00000000
    2. IP 11000000 10101000 00000000 00000110, 掩码11111111 11111111 11111111 00000000
    3. IP 11000000 10101000 00000001 00000001, 掩码11111111 11111111 11111111 11111000
    4. IP 11000000 10101000 00000001 00000110, 掩码11111111 11111111 11111111 11111000
    5. IP 11000000 10101000 00000001 00001100, 掩码11111111 11111111 11111111 11111000
  • 执行逻辑“与”操作,即。复制1IP 和掩码都有的位1并用0s填充孔

    1.    11000000 10101000 00000000 00000001
        & 11111111 11111111 11111111 00000000
        -------------------------------------
        = 11000000 10101000 00000000 00000000
    
    2.    11000000 10101000 00000000 00000110
        & 11111111 11111111 11111111 00000000
        -------------------------------------
        = 11000000 10101000 00000000 00000000
    
    3.    11000000 10101000 00000001 00000001
        & 11111111 11111111 11111111 11111000
        -------------------------------------
        = 11000000 10101000 00000001 00000000
    
    4.    11000000 10101000 00000001 00000110
        & 11111111 11111111 11111111 11111000
        -------------------------------------
        = 11000000 10101000 00000001 00000000
    
    5.    11000000 10101000 00000001 00001100
        & 11111111 11111111 11111111 11111000
        -------------------------------------
        = 11000000 10101000 00000001 00001000
    
    Run Code Online (Sandbox Code Playgroud)
  • 将结果转换回十进制

    1. 192.168.0.0
    2. 192.168.0.0
    3. 192.168.1.0
    4. 192.168.1.0
    5. 192.168.1.8
  • 这些是我们计算机的子网地址。如果计算机具有相同的子网地址,则它们属于同一子网。

    • 计算机 1 和 2 属于一个子网
    • 计算机 3 和 4 属于另一个子网
    • 计算机 5 属于第三个子网

子网仅在您的本地网络内重要,即。计算机连接到一台交换机。然后将交换机连接到路由器,该路由器在交换机和调制解调器之间路由网络数据包。您可能在一台设备中拥有所有这三个。

交换机、路由器和调制解调器

  • 开关 - 让您将两台以上的计算机连接在一起。您不能简单地将多条网线焊接在一起并将它们连接到多台计算机,您必须使用交换机。

  • 调制解调器 - 提供不同网络标准之间的双向转换。您的 ISP 使用与普通 LAN 不同的网络标准,因此您需要一个调制解调器,将它们的网络数据包转换为您的格式,并将您的数据包转换为它们的格式。

  • 路由器 - 路由器在两个网络之间路由数据包。您不能只是将不同网络中的两台交换机相互连接,您需要在它们之间使用路由器。路由器在其连接的每个网络中都有一个 IP 地址。

您的网络看起来有点像这样:

    ????????+-----------------------------------------+????????
    ????????|?????????????????????????????????????????|????????
    PC1?+---------+???????????????????????????????????|????????
    ????????|?????|???????????????????????????????????|????????
    ????????|???+--------+???+--------+???+-------+???|????????
    PC2?+-------+?Switch?+---+?Router?+---+?Modem?+-------+?ISP
    ????????|???+--------+???+--------+???+-------+???|????????
    ????????|?????|???????????????????????????????????|????????
    PC3?+---------+???????????????????????????????????|????????
    ????????|?????????????????????????????????????????|????????
    ????????+-----------------------------------------+????????
Run Code Online (Sandbox Code Playgroud)

路由是如何工作的?

左边的计算机有三个 IP 地址,比方说:

  • 192.168.0.1
  • 192.168.0.2
  • 192.168.0.3

还有您的路由器的 LAN 侧地址。

但是在右侧,您只有一个 IP 地址,即所谓的“公共 IP”。它是路由器的 Internet 端地址。当外部人员想与您网络内的计算机通话时,他如何指定要与哪台计算机通话?

答案是:他不能。您不能只是从外部开始与网络内部的计算机通话。互联网上的人只能与您的路由器通信。

但是,这种网络将毫无用处,而且显然您可以从 Internet 下载数据。那么它是怎样工作的?它有效,因为您已经启动了连接。当网络内部的计算机尝试与外部世界通信时,路由器会将其 Internet 端端口之一分配给该计算机的端口。如果有人回复该端口,路由器就知道应该将这些数据包转发到哪里。这种技术称为网络地址转换(简称 NAT)。

如何从外部连接到网络内部的计算机?

你不能不正确配置你的路由器,因为它是你网络中的计算机启动连接。仅当另一端的计算机具有公共 IP 时才有效,这是不太可能的。网络大概是这样的:

    +----------------+                            +-----------------------+
    |                |                            |                       |
    |  Your cluster  |                            |     Other network     |
    |                |                            |                       |
    |    PC1 +---+   |                            |   +---+ Other PC      |
    |            |   |     +----------------+     |   |                   |
    |            |   |     |                |     |   |     The computer  |
    |    PC2 +-------------+  THE INTERNET  +-------------+ you're using  |
    |            |   |     |                |     |   |     to connect    |
    |            |   |     +----------------+     |   |                   |
    |    PC3 +---+   |                            |   +---+ Other PC      |
    |                |                            |                       |
    +----------------+                            +-----------------------+
Run Code Online (Sandbox Code Playgroud)

这两个网络的边界上都有路由器,而且这两个路由器都使用 NAT,因此设置反向连接将不起作用。

如何连接到您的集群?

您必须在路由器中配置端口转发

端口转发将路由器的 Internet 端端口之一永久绑定到您的其中一台计算机的某个端口。

例如,您可以将路由器的端口 5432 转发到集群中 PC1 的端口 22(默认 SSH 端口)。然后你可以在端口 5432 上通过 SSH 连接到你的公共 IP,你实际上会在端口 22 上连接到 PC1。

如果您想连接到集群中的另一台 PC,您有两种方法可以做到:

  • 将另一个端口转发到另一台机器

  • 使用 PC1。PC1 连接到您的 LAN,它可以与 LAN 中的其他计算机通信,无需路由或 NAT。您可以通过转发端口 SSH 进入 PC1,然后从 PC1 SSH 到 PC2。这比直接连接效率低,但不需要任何额外配置。