У меня запущен экземпляр RDS, и он доступен в Интернете.
Я хотел бы, чтобы экземпляры в VPC подключались к нему изнутри, а не через Интернет.
По другому вопросу ( https://stackoverflow.com/questions/21089582/amazon-rds-endpoint-internal) строка подключения к хосту должна отображаться на внутренний IP-адрес при запросе из VPC. Это не работает, я получаю внешний IP несмотря ни на что.
В моем VPC установлен параметр DHCP: domain-name = mysite.local;domain-name-servers = 10.10.51.254;
У меня такое чувство, что именно здесь он сломан из-за того, что я настроил настраиваемый параметр DHCP. mysite.local
это локальный домен, а 10.10.51.254
является локальным сервером привязки (не использующим Route53).
Нужно ли мне настраивать какой-то прямой поиск на us-east-1.rds.amazonaws.com
на моем DNS-сервере или где-то мне не хватает какой-то конфигурации? Я думал, что это должно было быть «автоматическим» в VPC, так что я ошибаюсь.
Проблема в том, что я использую частный DNS-сервер, а не DNS-сервер Amazon. Не происходит никакой «магии автоматического VPC от Amazon», которая помогает выполнять поиск домена для этих сервисов AWS (что я как бы неправильно предполагал)
Секрет в том, что даже если вы не используете DNS, предоставленный Amazon, вы можете выполнять поиск на DNS-сервере VPC.
Если в VPC есть DNS resolution
и DNS hostnames
установлен в YES
затем вы можете выполнить поиск на DNS-сервере VPC, который находится по базовому адресу блоков VPC CIDR +2 (так что, если ваш VPC 10.10.0.0/16
тогда адрес поиска DNS 10.10.0.2
) - Я нашел это в каком-то случайном сообщении в блоге, когда искал это, не уверен, есть ли это в официальной документации, так как все поиски DNS, которые я выполняю через документы Amazon, переполнены материалами 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
поэтому для ОБАИХ требуется правило пересылки.
TL; DR: Учитывая, что CIDR моего VPC 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 могут искать частный IP-адрес экземпляра RDS, а общедоступное разрешение также по-прежнему работает извне VPC.