假设一个 NAT 路由器的公共地址是 200.1.1.2,内部有三个主机,私有地址分别为 10.1.1.1、10.1.1.2 和 10.1.1.3。充当服务器。如果 HTML 请求来自 Internet,套接字为 200.1.1.2:80,路由器如何知道将请求转发到哪个内部本地地址?
是否可以将 NAT/PAT 与内部的主机一起用作外部的服务器?
当外部具有单个 IP 地址时,通常可以通过三种方式完成此操作:
不同的端口:外部路由器会在端口 80、81 和 82 上接受 TCP 数据包。它在内部引导数据包,例如 200.1.1.2:80 -> 10.1.1.1:80、200.1.1.2:81 -> 10.1。 1.2:80 .... Cisco 将此称为端口地址转换,网络上有无数关于它的资源。
负载平衡:一台面向外部的机器 10.1.1.1 获取所有流量,并有一些确定内部机器负载的方法,并将请求转发到最不忙的工作人员 10.1.1.2 和 10.1.1.3,其中每个提供相同的内容。路由器只做路由和 NAT。服务器软件在这里是题外话,但您可以开始使用 HAProxy 进行搜索,HAProxy 是众所周知的负载平衡器之一。
反向代理:一台面向外部的机器 10.1.1.1 获取所有流量,它是一个 Web 服务器,它的空间分支转发到内部机器以提供不同的服务;路由器再次执行路由和 NAT。例如,您可以发送
/wiki
-> 10.1.1.2,/forum
-> 10.1.1.3。在不同域上提供 URL 时也使用此方法。大多数 Web 服务器软件都会执行反向代理功能,包括 Apache,尽管服务器软件在这里不属于我们的职责范围。
[编辑] 有时您会看到source address selection,它有时用作内容选择的地理定位的近似值。在这个方案中,路由器根据源地址向每个服务器发送一些流量。在 Cisco 文档中搜索“基于策略的路由”。(不要在路由器上做地理定位,在 web 服务器上做,它更容易也更好。)我也看到它也用于简单的负载平衡,这是我见过的少数几个“古怪的网络掩码” " 做任何有用的事情:例如根据源地址的底部两位转发到四个服务器。这些技术很少见的原因是因为它们通常是一个非常糟糕的、无法维护的想法。
[编辑 2]透明网络代理正如其他人所指出的,一些“路由器”也将执行非路由器功能,例如检查传入的请求并根据请求中的 URL 对其进行路由。根据上层内容做出路由决策被一些人认为是好的,而另一些人则认为是可怕的。一般来说,我的建议是让路由器尽可能简单,并使用专用于该任务的机器执行上层功能。尤其是当设备面向外部时。
您必须指定您拥有的路由器型号。对于 Mikrotik 存在 - https://wiki.mikrotik.com/wiki/Multiple_Web_Servers 也许你可以得到别的东西。