RRSet типа CNAME с DNS-именем foo.com. не разрешается на вершине в зоне bar.com
Я владею foo.com
и bar.com
. Я управляю обоими в Route53. foo.com
размещен мой сайт, и я хотел бы направить трафик с bar.com
до foo.com
. Я пытался настроить CNAME
рекорд bar.com
указывая на foo.com
, но я получил сообщение об ошибке:
RRSet of type CNAME with DNS name foo.com. is not permitted at apex in zone bar.com.
почему это не работает, и что я могу сделать вместо этого?
5 ответов:
согласно разделу 2.4 RFC1912:
A CNAME record is not allowed to coexist with any other data. In other words, if suzy.podunk.xx is an alias for sue.podunk.xx, you can't also have an MX record for suzy.podunk.edu, or an A record, or even a TXT record. Especially do not try to combine CNAMEs and NS records like this!: podunk.xx. IN NS ns1 IN NS ns2 IN CNAME mary mary IN A
RFC имеет смысл, поскольку сервер имен не знает, нужно ли ему следовать CNAME или отвечать с фактической записью, с которой пересекается CNAME.
bar.com
- это зона, поэтому она неявно имеет запись SOA дляbar.com
имя. Вы не можете иметь как запись SOA, так и CNAME с тем же именем.однако, учитывая, что записи SOA обычно используются только для обслуживания зоны, эти ситуации, когда вы хотите предоставление CNAME на вершине зоны довольно распространено. Несмотря на то, что RFC запрещает это, многие инженеры хотели бы такое поведение, как: "следуйте CNAME, если запрос явно не запрашивает запись SOA". Вот почему маршрут 53 обеспечивает
alias records
. Это специфическая функция Route 53, которая предлагает точную функциональность, которую вы требуете. Взгляните на http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingAliasRRSets.html
- создайте ведро S3 под названием
bar.com
. (Имя должно совпадать с доменом, который вы хотите перенаправить, чтобы это работало!)- на
bar.com
ведро S3 перейти кProperties
>Static Website Hosting
выберитеRedirect all requests to another host name
и вводимfoo.com
в текстовое поле.- назад в маршрут 53, в ваш
Hosted Zone
наbar.com
, нажмите кнопкуCreate Record Set
. ВыберитеA - IPv4 address
для типа. НажмитеYes
наAlias
. Щелкните текстовое поле дляAlias Target
.bar.com
должны быть перечислены в разделе-- S3 Website Endpoints --
. Спасать запись. Подождите несколько минут, и у вас должна быть настройка перенаправления для перенаправления запросов от bar.com к foo.com.вы можете использовать этот же метод для перенаправления голого домена в поддомен (например, www). Я использую это в случаях, когда www.foo.com должен быть CNAME, поэтому я перенаправляю из foo.com к www.foo.com с помощью этого же метода. Если foo.com является ли запись A, вы можете использовать эту технику для перенаправления с www.foo.com к foo.com.
Примечание: этот метод будет дальше с полный путь. то есть http://bar.com/test будем переадресовывать наhttp://foo.com/test.
на Route53, вам нужно создать A запись Не a CNAME запись, и создать псевдоним под этим.
из комментария @ewalshe к ответу Александру Куку, если вы пришли сюда, пытаясь настроить API Gateway с пользовательским доменным именем и иметь url-адрес распространения Cloudfront.
вы должны использовать DNAME вместо CNAME. Запись CNAME может только перенаправить метку на другую метку.
когда вы говорите о перенаправлении доменных имен вместо меток, вы должны использовать DNAME
$ORIGIN bar.com IN DNAME foo.com
Это также означает, что все a, NS и любые другие записи должны быть удалены. Это должно быть настроено в foo.com домен.
tldr; вы должны передать полное доменное имя в качестве имени ResourceRecordSet.
у меня была такая же проблема, используя этот оператор c# snip:
private static void RegisterHostWithDns(IAmazonRoute53 ec2,SynoviaImage image) { var changeBatch = new ChangeBatch(); var rRs = new ResourceRecordSet(image.Name, RRType.CNAME) {TTL=60,ResourceRecords = new List<ResourceRecord>() { new ResourceRecord(image.PublicDns)} }; var change = new Change(ChangeAction.UPSERT, rRs); changeBatch.Changes.Add(change); var request = new ChangeResourceRecordSetsRequest(ConfigurationManager.AppSettings["DnsZoneId"], changeBatch); var response = ec2.ChangeResourceRecordSets(request); Console.WriteLine("Updated CNAME For {0} setting {1}",image.Name,image.PublicDns); }
в этом случае image.Name = = "слушатель"
Как только я изменил его на:
private static void RegisterHostWithDns(IAmazonRoute53 ec2,SynoviaImage image) { var changeBatch = new ChangeBatch(); var rRs = new ResourceRecordSet(string.Format("{0}.{1}",image.Name, "testing.foo.bar.com"), RRType.CNAME) {TTL=60,ResourceRecords = new List<ResourceRecord>() { new ResourceRecord(image.PublicDns)} }; var change = new Change(ChangeAction.UPSERT, rRs); changeBatch.Changes.Add(change); var request = new ChangeResourceRecordSetsRequest(ConfigurationManager.AppSettings["DnsZoneId"], changeBatch); var response = ec2.ChangeResourceRecordSets(request); Console.WriteLine("Updated CNAME For {0} setting {1}",image.Name,image.PublicDns); }
теперь передается значение: "Listener.fully.qualified.com"
Он работает сейчас.