Назад | Перейти на главную страницу

Конечная точка RDS всегда отображается на внешний IP-адрес

У меня запущен экземпляр 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.