Ubuntu

為什麼我的 EC2 名稱伺服器(正確)將名稱解析為私有 IP,然後切換到公共 IP?

  • March 14, 2014

我正在為 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.conffoo.tldbar.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;
};

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