Iptables基于目的地的DNS名称预先路由?

我有一个关于iptable预发布的问题。 我不熟悉networking/路由/ iptables,所以我希望这不是一个愚蠢的问题。 所以我要求你的理解和放纵。

我所做的是:我使用LXC来分隔容器中的应用程序。 为了访问一个容器中的服务(也许是apache2),我必须这样做prerouting:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 20080 -j DNAT --to <container-ip>:80 

到目前为止,这样做很好,工作应该如此。

假设主机系统也运行一个apache2(端口80)。 它有1个网卡和2个DNS名称分配: DNS1 (HostRecord)和DNS2 (别名DNS1 )我想要做的是不要使用dport,但通过使用DNS名称,以便:

 http://DNS1:80 #ends up at the host apache2 http://DNS2:80 #ends up at lxc-container's apache2 (at the the same host) 

是否有可能,如果是的话,如何configurationiptables?

TCP / IP数据包路由到IP地址和networking端口,而不是主机名。

因此,iptables的packetfilter工作在IP地址,networking端口和协议,而不是DNS /主机名。


您的select是:

  1. configuration桥接,以便您的容器获取公共IP地址,而不是仅限于主机的专用范围,并相应地设置DNS。
  2. 使用在DNS主机名级别工作的apache反向代理function(或类似function),并在应用程序级别路由您的HTTP请求:

例如:

  NameVirtualHost *:80 <VirtualHost *:80> # The DNS1 site is hosted locally ServerName DNS1 DocumentRoot /var/www./... </VirtualHost> <VirtualHost *:80> ServerName DNS2 # Forward all requests to container: Proxypass / http://<container-ip> ProxypassReverse / http://<container-ip> </VirtualHost>