web-dev-qa-db-ja.com

宛先のDNS名に基づいたIptablesプレルーティング?

Iptableの事前ルーティングについて質問があります。私はネットワーキング/ルーティング/ iptablesにあまり詳しくないので、これがばかげた質問ではないことを願っています。 ご理解とご褒美をお願いします。

私がしていることは、LXCを使用してコンテナー内のアプリを分離することです。コンテナ内のサービス(おそらくApache2)にアクセスするには、次のような事前ルーティングを行う必要があります。

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

これまでのところ、正常に機能しています。

ホストシステムがApache2(ポート80)も実行していると想像してください。 1 NICおよび2つのDNS名が割り当てられました:DNS1(HostRecord)およびDNS2(Alias to DNS1 =)私がやりたいのは、dportを使用せずに、DNS名を使用してPREROUTEすることです。これにより、次のようになります。

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

それは可能ですか?もしそうなら、iptablesを設定する方法は?

4
ITL

TCP/IPパケットは、ホスト名ではなく、IPアドレスとネットワークポートにルーティングされます。

したがって、iptables packetfilterは、DNS /ホスト名ではなく、IPアドレス、ネットワークポート、プロトコルで機能します。


オプションは次のとおりです。

  1. コンテナがホストに制限されたプライベート範囲ではなくパブリックIPアドレスを取得するようにブリッジングを構成し、それに応じてDNSを設定します。
  2. dNSホスト名レベルで機能するApacheリバースプロキシ機能(または同様の機能)を使用し、アプリケーションレベルで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>
3
HBruijn