為什麼我的 EC2 名稱伺服器(正確)將名稱解析為私有 IP,然後切換到公共 IP?
我正在為 EC2 上的幾台機器執行名稱伺服器。此名稱伺服器無法通過公共 Internet 訪問。我希望我的所有 EC2 實例都能使用它來找到彼此並解析所有公共域名(例如
google.com
)。使用 CNAME,我應該能夠創建自己的名稱,但要遵循 Amazon 的內部 EC2 名稱伺服器(用於(內部)IP 地址)。它工作了一段時間,但最終一些名稱錯誤地解析為它們的公共IP 地址。這是應該發生的事情:
foo$ host bar bar.tld is an alias for ec2-88-88-88-88.compute-1.amazonaws.com. ec2-88-88-88-88.compute-1.amazonaws.com has address 192.168.50.17
這是一段時間後實際發生的情況:
foo$ host bar bar.tld is an alias for ec2-88-88-88-88.compute-1.amazonaws.com. ec2-88-88-88-88.compute-1.amazonaws.com has address 88.88.88.88
確認!如果我重新啟動 BIND,它會在一段時間內將名稱正確解析為私有 IP,然後最終為公共 IP 提供服務。除非我重新啟動 BIND,否則它似乎永遠不會再次恢復為私有 IP 提供服務。
順便說一句,這似乎總是有效的:
foo$ host ec2-88-88-88-88.compute-1.amazonaws.com 172.16.0.23 ec2-23-21-222-199.compute-1.amazonaws.com has address 192.168.50.17
如果看起來我不知道自己在做什麼,因為我在其中一個配置文件中犯了一個簡單的錯誤,那是因為我不知道自己在做什麼。
我建立了自己的頂級域:“.tld”(經過混淆處理——希望為頂級域選擇的真實字元無關緊要)。
我嘗試按照Eric Hammond 的建議去做。這是我的
/etc/bind/named.conf.options
:options { directory "/var/cache/bind"; forwarders { 172.16.0.23; }; auth-nxdomain no; listen-on-v6 { any; }; allow-query { 127.0.0.1; 192.168.50.0/24; }; };
172.16.0.23 是亞馬遜 DNS 伺服器的 ip,只能從 EC2 內部訪問。它是唯一知道我的機器正確的內部/私有 IP 的人。就好像我的伺服器
foo.tld
有時無法解析,然後轉到其他伺服器$$ public $$名稱伺服器,然後查找被中斷(隨後解析為公共 IP)。我似乎沒有完成的技巧是我的名稱伺服器決不能超過 172.16.0.23 來解析這些
x.compute-1.amazonaws.com
名稱。另一種可能性是,有時亞馬遜的域名伺服器會出現問題並給我一個公共 IP,但為什麼我的域名伺服器最終不會更正錯誤並有時會再次解析私有 IP? 無論如何,繼續前進……這是/etc/bind/named.conf.local
:zone "tld" { type master; file "/etc/bind/db.tld"; notify no; };
為了完整起見,這裡是
/etc/bind/named.conf
:include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; include "/etc/bind/named.conf.default-zones";
這是我的區域的混淆綁定數據庫
/etc/bind/db.tld
:$TTL 1h @ IN SOA tld. ns.tld. ( 2012021425 ; Serial 1m ; Refresh 2m ; Retry 1w ; Expire 1h ) ; Negative Cache TTL ; @ IN NS ns.tld. @ IN A 192.168.50.5 ns A 192.168.50.5 foo CNAME ec2-99-99-99-99.compute-1.amazonaws.com. bar CNAME ec2-88-88-88-88.compute-1.amazonaws.com.
唷。好的,這裡還有幾個文件可能是整個圖片所必需的。這是
/etc/resolv.conf
在名稱伺服器上,ns
:domain tld search tld nameserver 127.0.0.1
這裡
/etc/resolv.conf
是foo.tld
和bar.tld
:domain tld search tld compute-1.internal nameserver 192.168.50.5 nameserver 172.16.0.23
我不知道這是否正確。也許我應該只有
nameserver 192.168.50.5
?此設置在 Ubuntu Server 11.10 上使用 BIND 9.7.3。
(僅供參考:交叉發佈在http://alestic.com/2009/06/ec2-elastic-ip-internal)
options { forward only; ...
從綁定 ARM97:
forward此選項僅在轉發器列表不為空時才有意義。的值
first
,預設值,會導致伺服器首先查詢轉發器——如果沒有回答問題,伺服器將自己尋找答案。如果only
指定,伺服器將只查詢轉發器。在您的情況下,由於您實際上只需要 .amazonaws.com 的亞馬遜 DNS 伺服器,您也可以這樣做:
options { forwarders { }; ... } zone "amazonaws.com" { type forward; forwarders { 172.16.0.23; }; forward only; };