NAT后面的Web服务器,如何监听公共IP地址

我有一个使用NAT运行在防火墙后面的debian web服务器(nginx)。 Web服务器正在托pipe几个需要SSL和自己的IP地址的站点。 我希望SSL站点只监听其特定IP地址,共享站点只监听共享IP。

现在我正在监听所有域的通配符*,我假设这意味着它正在侦听单个局域网地址,并且根据主机名而不是IP地址提供站点内容。 我想纠正这一点。

什么是正确的行动? 是为每个IP地址创build一个1:1 NAT,并将LAN IP添加到networking接口来侦听,然后将LAN IP分配给特定的域? 或者,还有更好的方法? 有什么方法可以传递公共知识产权,并据此采取行动? 谢谢。

不,在完成NAT之后,不能通过原始目标IP地址,至less不能直接通过。

我将使用192.0.2.0/24作为您的外部IP块,并将198.51.100.0/24作为您的内部IP块(请参阅RFC5737)。

你可以做的一些事情包括:

  • 将每个外部IP上的目标端口NAT转换为内部IP上不同的一组端口。 例如,NAT 192.0.2.1:80和192.0.2.1:443到198.51.100.1:80和198.51.100.1:443,然后是NAT 192.0.2.2:80和192.0.2.2:443到198.51.100.1:81和198.51 .100.1:444。 configurationWeb服务器以侦听适当服务的差异化端口。 一定要select不用的任何其他端口,并检查您的防火墙设置。
  • 分配额外的内部IP到Web服务器。 例如,分配Web服务器198.51.100.1和198.51.100.2。 将相应的外部IP /端口对NAT转换为相应的内部IP /端口对(例如192.0.2.1至198.51.100.1和192.0.2.2至198.51.100.2)。 指导nginx将适当的服务绑定到合适的内部IP。

如果你使用后一种解决scheme,你的环境将会更简单和更符合标准,因为你不会处理exception的端口号和端口转换,但是你需要为每个web服务器分配多个内部IP(我收集你有只有一个)。 另外,如果您使用后一种解决scheme,则可以使用1:1 NAT。

也就是说,如果您没有任何理由将networking服务器置于NAT之后(NAT不是防火墙),那么只需监听外部IP(这样做也需要更改拓扑结构)。

这听起来像你想为每个网站不同的公共IP地址。 这意味着防火墙必须提供不同的公共IP地址。 然后,防火墙可以将请求转发到不同的IP地址到nginx服务器,或者将这些请求转发到同一IP地址的不同端口。 然后您可以让nginx服务器做出相应的响应。

具体如何configuration取决于您的防火墙。 例如,使用iptables,你可以在脚本中这样做:

KINCAID=192.168.1.112 EXTIPJMN=50.60.70.80 iptables -t nat -A PREROUTING -d $EXTIPJMN -p tcp -i $EXT --dport 8081 -j DNAT --to-destination $KINCAID:8080 

这将路由来自IP地址EXTIPJMN(50.60.70.80)和端口8081的请求到IP地址KINCAID(192.168.1.112)和端口8080的内部服务器

即使通过https也可以从同一个IP地址提供不同的站点,这是大多数现代客户支持的,但不是全部。