Domain-Name-System

基於目的地的DNS名稱的iptables預路由?

  • January 12, 2016

我有一個關於 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/主機名。


您的選擇是:

  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>

引用自:https://serverfault.com/questions/601712