Domain-Name-System
基於目的地的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-Names:DNS1 (HostRecord) 和DNS2 (Alias to DNS1 ) 我想要做的是 PREROUTE 不使用 dport 而是使用 DNS-Name,以便:
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?
TCP/IP 數據包被路由到 IP 地址和網路埠,而不是主機名。
因此,iptables 數據包過濾器也適用於 ip 地址、網路埠和協議,而不適用於 DNS/主機名。
您的選擇是:
- 配置橋接,以便您的容器獲得公共 IP 地址,而不是僅限於主機的私有範圍,並相應地設置 DNS。
- 使用在 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>