Проект, над которым я работаю, требует, чтобы мы замаскировали имена хостов 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;
}