
我有一個正在運行的 RDS 實例,並且可以透過網路存取。
我希望 VPC 內的實例在內部連接到它,而不是透過網際網路。
根據另一個問題(https://stackoverflow.com/questions/21089582/amazon-rds-endpoint-internal) 如果從 VPC 內部查詢,主機連線字串應對應到內部 IP。這不起作用,無論如何我都會獲得外部IP。
- 我只有一個 VPC,因此沒有使用對等互連。
- 我確實設定了自訂 DHCP 選項,這可能是我的問題所在。
我的 VPC 的 DHCP 選項集是
domain-name = mysite.local;domain-name-servers = 10.10.51.254;
由於我的自訂 DHCP 選項集,我感覺這就是問題所在。mysite.local
是本地域,並且10.10.51.254
是本地綁定伺服器(不使用 Route53)。
我是否需要在 DNS 伺服器中配置某種正向查找us-east-1.rds.amazonaws.com
,或者是否缺少某些配置?我認為這應該是 VPC 內「自動」的,所以我想我錯了。
答案1
所以這裡的問題確實是我使用的是私人 DNS 伺服器而不是亞馬遜提供的 DNS。沒有任何「來自 Amazon 的自動 VPC 魔法」可以幫助這些 AWS 服務進行網域查找(我有點錯誤地假設)
這裡的秘訣是,即使您不使用 Amazon 提供的 DNS,您也可以針對 VPC 的 DNS 伺服器進行查找。
如果 VPC 有DNS resolution
且DNS hostnames
設定為YES
那麼您可以在 VPC 的 DNS 伺服器上進行查找,該伺服器位於 VPC CIDR 區塊的基底位址 +2(因此,如果您的 VPC 是,10.10.0.0/16
則 DNS 查找位址是10.10.0.2
) - 我在一些隨機部落格文章中發現了這一點查了一下,不確定它是否在官方文件中,因為我透過Amazon 文件進行的所有DNS 搜尋都充斥著Route 53 的內容。
現在我們有了一個有效的 DNS 正向查找,我們需要做的就是在綁定伺服器中加入轉送查找。這裡的問題是 RDS 實例的主機名稱實際上是 CNAME 查找。
例如:
user@host:~$ nslookup mydb.cvxj3uli9kc.us-east-1.rds.amazonaws.com
Server: 10.10.51.254
Address: 10.10.51.254#53
Non-authoritative answer:
mydb.cvxj3uli9kc.us-east-1.rds.amazonaws.com canonical name = ec2-34-204-131-19.compute-1.amazonaws.com.
Name: ec2-34-204-141-206.compute-1.amazonaws.com
Address: 34.204.131.19
查找實際上是一個 CNAME 記錄,compute-1.amazonaws.com
因此兩者都需要轉送規則。
長話短說:鑑於我的 VPC 的 CIDR 是10.10.0.0/16
,以下是解決我的問題並回答此問題的範例轉發區塊:
zone "mydb.cvxj3uli9kc.us-east-1.rds.amazonaws.com" {
type forward;
forward only;
forwarders { 10.10.0.2; };
};
zone "compute-1.amazonaws.com" {
type forward;
forward only;
forwarders { 10.10.0.2; };
};
現在,本地 VPC 中的所有服務都可以尋找 RDS 實例的私人 IP,並且公共解析在 VPC 外部仍然有效。