Pré-configuração de Iptables com base no nome DNS do destino?

3

Eu tenho uma pergunta sobre o pré-layout do iptable. Eu não estou tão familiarizado com o networking / routing / iptables, então espero que essa não seja uma pergunta estúpida. Então eu peço a sua compreensão e indulgência.

O que eu faço é: Eu uso o LXC para separar aplicativos em contêineres. Para acessar um serviço (talvez apache2) em um contêiner, eu tenho que fazer o pré-layout assim:

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

Até aí tudo bem, funciona como deveria.

Imagine que o sistema host também execute um apache2 (porta 80). Recebeu 1 NIC e 2 DNS-Names atribuídos: DNS1 (HostRecord) e DNS2 (Alias para DNS1 ) O que eu quero fazer é o PREROUTE não usando o dport, mas usando o DNS-Name, de modo que:

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

É possível e, se sim, como configurar o iptables?

    
por ITL 04.06.2014 / 12:33

1 resposta

3

Os pacotes TCP / IP são roteados para endereços IP e portas de rede, não para nomes de host.

Portanto, o pacote de filtros iptables também funciona em endereços IP, portas de rede e protocolos, e não em DNS / hostnames.

Suas opções são:

  1. configurar a bridging para que seu contêiner receba um endereço IP público do que um intervalo privado restrito ao host e configurar o DNS em conformidade.
  2. use a funcionalidade do proxy reverso do apache (ou semelhante) que funciona no nível do nome do host DNS e roteie suas solicitações HTTP no nível do aplicativo:

por exemplo:

 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>
    
por 04.06.2014 / 13:14