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