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

Как настроить динамические записи cname?

Проект, над которым я работаю, требует, чтобы мы замаскировали имена хостов AWS EC2 нашими собственными поддоменами.


Например:

ec2-176-34-163-40.eu-west-1.compute.amazonaws.com будет отображаться на gf53ef.domain.com

и

ec2-123-31-124-60.eu-west-1.compute.amazonaws.com будет отображаться на sdfrh5.domain.com


Всегда будет доступен список, в котором хранятся отношения между доменами.

Этот список ВСЕГДА меняется. Это означает, что за одну минуту у нас может быть запущено более 100 новых экземпляров ec2, а в следующую - все могут завершиться.

Мне интересно, как настроить наш сервер Ubuntu для обработки этого случая.

Спасибо

Я делаю что-то подобное в облаке openstack, например, обновляет DNS-имя (вероятно, не так динамично, как ваше требование ;-), в основном у нас есть привязка named экземпляр, который принимает динамические обновления.

Я использовал webmin для настройки удаленного управления с помощью RNDC и базовой конфигурации привязки.

а затем сгенерировать ключ для удаленного доступа и передать его вашему управляющему узлу;

dnssec-keygen -a hmac-md5 -b 128 -n HOST remote-key  

файл зоны заканчивается так;

zone "mydomain.com" {
  type master;
  file "master/mydomain.com";
  allow-update { key "remote-key"; };
};

allow-update обеспечивает разрешение обновить мастер-зону, allow-notify эквивалент ведомой зоны.

а затем вы можете сделать что-то вроде этого (nsupdate from bind-utils) для обновления записей от клиента, я не тестировал обновление CNAME, но оно должно выглядеть примерно так;

cat <<EOF | nsupdate -d -k "$KEY"
server ns1.mynameserver.com
zone domain.com
update delete gf53ef.domain.com.
update add gf53ef.domain.com.   IN  CNAME   ec2-176-34-163-40.eu-west-1.compute.amazonaws.com.
send
EOF

(возможно, вам придется дважды проверить формат для примера CNAME ...)

Это похоже на справочную документацию по конфигурации для named;
http://www.zytrax.com/books/dns/ch7/xfer.html

Примеры можно получить из этих руководств;

http://www.centos.org/docs/5/html/Deployment_Guide-en-US/s1-bind-rndc.html
http://dag.wieers.com/howto/bits/bind-ddns.php
http://linux.yyz.us/nsupdate/
http://www.semicomplete.com/articles/dynamic-dns-with-dhcp/

Спасибо @ CS3

Наше решение - Route53 на данный момент.

Вот как мы это настроили (PHP). Мы использовали эту библиотеку: http://www.orderingdisorder.com/aws/route-53/

private function getDomain() {
    $sub = "e-".substr(md5($this->instance->dnsName), 2, 4);
    $domain = $sub.".domain.com";

    $dnsRecords = $this->route53->listResourceRecordSets('/hostedzone/123');

    $exists = false;
    foreach($dnsRecords["ResourceRecordSets"] as $dnsRecord) {
        if($dnsRecord["Name"] == $domain."." 
            AND $dnsRecord["Type"] == "CNAME") {
                $exists = true;
                break;
            }
    }

    if(!$exists) {
        $change = $this->route53->prepareChange('CREATE', $domain.".", 'CNAME', 300, $this->instance->dnsName);
        $this->route53->changeResourceRecordSets('/hostedzone/123', $change);
    }

    return $domain;
}

private function removeDomain() {
    $change = $this->route53->prepareChange('DELETE', $this->domain.".", 'CNAME', 300, $this->instance->dnsName);
    $this->route53->changeResourceRecordSets('/hostedzone/123', $change);
    $this->domain = null;
}