AWS Route53 – приватные HostedZone

Хорошей практикой является прятать внутренние ресурсы (базы, дев и сервисные окружения), делать все чтоб они оставались приватными и не светились в мир. Если  отдельно поговорить об DNS записях (которые используются внутри инфраструктуры) они не должны индексироваться, доступ к ним должен быть закрыт из вне. Никто кроме нас и внутренних ресурсов не должен знать про них.

Для того чтоб спрятать DNS записи внутренних ресурсов от всяких сканеров (DNS brute-force, etc), подозрительных личностей и обезопасить Ваши спокойные будни от стрессов, есть хорошее решение, это AWS Route53 Private Hosted Zone. Если создать записи в этой зоне они будут доступны только в пределах одной или нескольких выбранных вами VPC.

Перед тем как приступим к созданию зоны нужно сделать следующее:

 

Cоздание AWS Private HosterZone

Переходим в AWS Console –> Route53 –> Create hosted zone:

 

В VPC to associate with the hosted zone нужно указать в каких VPC будет доступна зона. Для теста указал одну VPC приложения, а вторую базы данных, между ними настроен vpc-peering:

 

создание зоны завершилось, посмотрим на нее:

 

Теперь добавим запись CNAME для кластера RDS (публичный доступ к базе отключен), жмем Create Record:

 

Проверим доступ с дев сервера:

$ dig dev.mysql.example.local +short 
***************-cluster.cluster-ro-cslqcox3qst3.us-east-2.rds.amazonaws.com.
***************-cluster-instance-2.cslqcox3qst3.us-east-2.rds.amazonaws.com.
10.0.16.37

Подключаемся к базе:

$ mysql -h dev.mysql.example.local -u ***** -p
Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. 
Your MySQL connection id is 3521341
Server version: 5.7.12-log MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its 
affiliates. Other names may be trademarks of their respective 
owners. 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> exit; Bye

Проблема: can’t resolve hostname

На некоторых серверах стал замечать ошибку, запись не резолвиться, при этом все настройки верны. Стал копать в чем может быть проблема.

Заглянем в файл /etc/resolv.conf:

$ cat /etc/resolv.conf
domain us-east-2.compute.internal
search us-east-2.compute.internal
nameserver 127.0.0.1

Если вспомнить как работает DNS в VPC, то увидим следующее, для примера в VPC c Cidrs 172.50.4.0/24 шлюзом будет адрес 172.50.4.1, а адрес DNS-сервера VPC 172.50.4.2:

  • *.*.*.1 – адрес шлюза.
  • *.*.*.2 адрес DNS-сервера VPC.

Нужной записи у нас нет. Ми не можем взять и изменить файл resolv.conf на прямую, так как он будет перезаписан. Есть много решений на просторах интернета, но я выбрал следующее здесь.

 

Для того чтоб решить проблему нужно:

  • отредактировать файл по пути /run/systemd/resolve/resolv.conf, прописать nameserver 172.100.0.2 (DNS-ceрвер нашей VPC).
  • удалить файл /etc/resolv.conf.
  • создать символьную ссылку для resolv.conf, чтоб файл с /etc/resolv.conf ссылался к файлу с директории /run/systemd/resolve/resolv.conf.

 

Приступим,  отредактируем сначала запись sudo vim /run/systemd/resolve/resolv.conf добавив nameserver:

# This file is managed by man:systemd-resolved(8). Do not edit.
#
# This is a dynamic resolv.conf file for connecting local clients directly to
# all known uplink DNS servers. This file lists all configured search domains.
#
# Third party programs must not access this file directly, but only through the
# symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way,
# replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.

nameserver 172.100.0.2
search us-east-2.compute.internal

удаляем файл resolv.conf с директории /etc:

sudo rm -f /etc/resolv.conf

создаем ссылку:

sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf

проверяем:

$ ls -ln /etc/ | grep resolv 
lrwxrwxrwx 1 0 0 32 Oct 20 10:38 resolv.conf -> /run/systemd/resolve/resolv.conf 
drwxr-xr-x 4 0 0 4096 Sep 22 16:07 resolvconf

Символьная ссылка создалась. Иногда нужно перезапустить сервер чтоб изменения применились, а иногда работает без перезапуска.

Проверим резолвиться ли или нет:

$ dig dev.mysql.example.local +short 
***************-cluster.cluster-ro-cslqcox3qst3.us-east-2.rds.amazonaws.com.
***************-cluster-instance-2.cslqcox3qst3.us-east-2.rds.amazonaws.com.
10.0.16.37

работает.

Click to rate this post!
[Total: 0 Average: 0]