有两个设备位于不同的城市,并且它们都具有相同的私有 IP 地址。如何让它们进行通信(SSH、RDP、FTP、Telnet 等)。请详细说明。
谢谢
答案1
我假设您谈论的是两个标准的住宅或商业互联网连接(而不是一条专线或通过 VPN 或类似方式链接的两个站点)。
在下面的示例网络中,我们有两栋建筑和一台服务器(位于世界任何地方),它们通过互联网连接。我们有两个路由器 -R1
并且R2
- 每个路由器都有不同的民众IP 地址(或“外部的“ IP地址)。
在建筑物内,路由器和设备都共享通用 IP 地址 - 路由器(R1
和R2
)使用私人的的 IP 192.168.0.1
,并且设备(DA
和DB
)使用私人的的 IP 地址192.168.0.10
。
在建筑物外部,路由器具有不同的民众IP 地址 -203.0.113.5
和203.0.113.219
。服务器可在民众IP地址203.0.113.42
。
这里有两种类型的 IP 地址之间有一个重要的区别,更多信息可以在 wiki 页面“保留 IP 地址“。
- 公共网络 - 可直接通过互联网访问
- 注意:我实际上使用了一组为文档保留的网络地址,而不是真正的公共地址
- 专用网络 - 仅供网络内使用
为了DA
访问互联网上的服务器或主机(例如203.0.113.42
),它需要从路由器获得帮助 - 因为203.0.113.42
无法在本地网络上访问。因此它将数据包发送到配置的路由器(R1
),然后路由器将数据包转发到互联网。
在这种情况下,路由器将稍微重写数据包,标记“源地址“作为R1
的公共地址(203.0.113.5
),而不是DA
的地址(192.168.0.10
)。当数据包返回到 时R1
,它将检查连接表,重写数据包以便再次指向目的地DA
,然后将数据包转发到本地网络。
这就是所谓的网络地址解读(NAT),并将传出的数据包重写为使用路由器自己的地址的过程称为“伪装“——即:所有出站数据包似乎都来自路由器,而不是其后面的设备。
这允许私人网络(例如:DA
和DB
)上的设备与互联网上的公共服务器之间的通信。
为了展示 A 楼网络内部提供的一些服务,我们需要让它R1
看起来更像服务器203.0.113.42
...为此,我们引入转发端口。
这是一种允许我们配置R1
接受端口上的传入连接请求的技术(22
例如SSH),并将其转发到其所服务的私有网络内的另一台主机。
本例中,DA
在端口 上运行着一个 SSH 服务器22
,因此我们配置R1
将其外部接口(即: )上的端口 22 转发203.0.113.5:22
到其内部接口(即: )上的服务器192.168.0.10:22
。
现在我们已经配置了端口转发,DB
可以通过连接到的公共地址(即端口)来访问DA
的 SSH 服务器。R1
203.0.113.5
22
笔记: DB
不使用或不需要知道DA
的私有 IP 地址,反之亦然。
网络地址转换将由您负责,完整链条将如下所示:
DB
发送数据包至R2
- 源:192.168.0.10
,目的地:203.0.113.5
R2
重写数据包 - 来源:203.0.113.219
,目的地:203.0.113.5
R2
通过互联网发送数据包,并R1
接收它
R1
重写数据包 - 来源:203.0.113.219
,目的地:192.168.0.10
R1
通过本地网络发送数据包,并DA
接收它
返回路径/响应是相反的:
DA
发送数据包至R1
- 源:192.168.0.10
,目的地:203.0.113.219
R1
重写数据包-源203.0.113.5
、目标:203.0.113.219
R1
通过互联网发送数据包,并R2
接收它
R2
重写数据包 - 来源:203.0.113.5
,目的地:192.168.0.10
R2
通过本地网络发送数据包,并DB
接收它
如您所见,冲突的私有地址根本不重要 - 没有任何单个设备会同时192.168.0.10
被视为源和目标,或者可以通过两个接口访问。如果这是真的,那么链接显然不会起作用。
一些说明:
- 路由器的配置界面差异很大,因此如果不知道您使用的是哪种路由器,我们就无法指导您完成端口转发设置。
- 像这样设置端口转发将使您的服务可供整个互联网访问(除非您还配置了防火墙规则)。
- 我强烈建议不要以这种方式设置未加密的服务(例如:Telnet / FTP)。最好使用 SSH / SFTP。
- 你必须确保您的服务受到适当的保护-例如:身份验证,速率限制等...