Giter Club home page Giter Club logo

yc-dns-redundancy's Introduction

Отказоустойчивая конфигурация DNS для подсетей в VPC

Данное решение позволяет настроить DNS сервис в отказоустойчивом режиме при использовании более одной зоны доступности.

Условия для использования (prerequisities)

  • существующая папка в Облаке
  • установленный инструмент yc

Описание решения

Решение обеспечивает перенаправление DNS запросов на резервный DNS сервис в другой зоне доступности в случае отказа активного DNS сервиса в локальной зоне доступности.

В процессе работы создаются следующие артефакты в инфраструктуре Облака:

  1. Сеть (VPC) - общий объект для всех зон доступности (атрибуты сети задаются во входных параметрах)
  2. IPv4-подсеть/подсети по одной для каждой зоны доступности (атрибуты подсети задаются во входных параметрах)
    Подразумевается, что целевой сервис будет иметь резевирование и размещаться минимум в 2х зонах доступности.

При создании подсети (по умолчанию) в список DNS серверов этой подсети всегда добавляется 2ой адрес из IPv4 префикса этой сети. Подробнее об этом можно почитать в главе "Подсети" раздела документации "Облачные сети и подсети".

При создании IPv4-подсети, в атрибут domain_name_servers добавляется список IPv4 адресов DNS серверов в разных зонах доступности. Например, при следующей конфигурации подсетей:

[
    { name = "sub1", zone = "ru-central1-a", prefix = "10.1.1.128/25" },
    { name = "sub2", zone = "ru-central1-b", prefix = "10.2.2.0/24" },
    { name = "sub3", zone = "ru-central1-c", prefix = "10.3.3.64/28" },
]

список DNS-серверов для каждой из подсетей выше будет таким:

sub1: [10.1.1.130, 10.2.2.2, 10.3.3.66]
sub2: [10.2.2.2, 10.1.1.130, 10.3.3.66]
sub3: [10.3.3.66, 10.1.1.130, 10.2.2.2]

Использование

Входные параметры variables.tf

  • net_name - имя сети (VPC) в Облаке. Сеть будет создана во всех зонах доступности автоматически.
  • subnet_list - список IPv4 подсетей, которые будут создаваться в заданной параметром net_name сети.
    Каждая из подсетей описывается набором атрибутов:
    • name - имя подсети
    • zone - имя зоны доступности
    • prefix - IPv4 префикс для создаваемой сети

Развертывание

  1. Проверить конфигурацию рабочего окружения YC в файле env-yc-prod.sh. Изменить при необходимости имя профиля "prod" на необходимое.
  2. Активировать рабочее окружение
    source env-yc-prod.sh
  3. Инициализировать Terraform
    terraform init
  4. Создать подсети в заданной сети с отказоустойчивым DNS сервисом
    terraform apply

Тестирование

  1. Сохраним внешний адрес созданной VM в переменную окружения
    export vm_ext_ip=`terraform output vm_ext_ip_address | sed 's/"//g'`
  2. Подключимся к VM
    ssh -oStrictHostKeyChecking=no ubuntu@$vm_ext_ip
  3. Проверим работу DNS сервиса
    dig www.yandex.ru
  4. Отключим все 3 DNS сервера с помощью инструмента iptables
    sudo iptables -A OUTPUT -d 10.1.1.130 -j DROP
    sudo iptables -A OUTPUT -d 10.2.2.2 -j DROP
    sudo iptables -A OUTPUT -d 10.3.3.66 -j DROP
    sudo iptables -L -v -n
  5. Убедимся, что DNS запросы теперь остаются без ответа - DNS сервис ожидаемо не работает.
    dig www.yandex.ru
  6. Разрешим трафик на 2ой DNS сервер в списке, удалив запрещающее правило, которое мы создали в п.4
    sudo iptables -D OUTPUT -d 10.2.2.2 -j DROP
  7. Убедимся, что DNS сервис снова работает.
    dig www.yandex.ru

Завершение работы

unset vm_ext_ip
terraform destroy

yc-dns-redundancy's People

Contributors

nettworker avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.