在Ubuntu中使用BIND9和Apache托pipe子域

我有一个域名betasquirrel.com从GoDaddy购买和VPS与Ubuntu 16.04。 我使用BIND9成功托pipe域名如下:

在Apache中为betasquirrel.com创build虚拟主机并放置这些文件。 接下来通过指向VPS IP地址在GoDaddy中创build了两个主机ns1.betasquirrel.comns2.betasquirrel.com

接下来configurationBIND9,

/etc/bind/zones/master/db.betasquirrel.com

 ; ; BIND data file for betasquirrel.com ; $TTL 3h @ IN SOA ns1.betasquirrel.com. admin.betasquirrel.com. ( 1 ; Serial 3h ; Refresh after 3 hours 1h ; Retry after 1 hour 1w ; Expire after 1 week 1h ) ; Negative caching TTL of 1 day ; @ IN NS ns1.betasquirrel.com. @ IN NS ns2.betasquirrel.com. betasquirrel.com. IN MX 10 mail.betasquirrel.com. betasquirrel.com. IN A 144.217.163.139 ns1 IN A 144.217.163.139 ns2 IN A 144.217.163.139 www IN CNAME betasquirrel.com. mail IN A 144.217.163.139 ftp IN CNAME betasquirrel.com. 

/etc/bind/zones/master/db.144.217.163

 ; ; BIND reverse data file for 163.217.144.in-addr.arpa ; $TTL 604800 163.217.144.in-addr.arpa. IN SOA ns1.betasquirrel.com. admin.betasquirrel.com. ( 1 ; Serial 3h ; Refresh after 3 hours 1h ; Retry after 1 hour 1w ; Expire after 1 week 1h ) ; Negative caching TTL of 1 day ; 163.217.144.in-addr.arpa. IN NS ns1.betasquirrel.com. 163.217.144.in-addr.arpa. IN NS ns2.betasquirrel.com. 139.163.217.144.in-addr.arpa. IN PTR betasquirrel.com. 

/etc/bind/named.conf.local

 zone "betasquirrel.com" { type master; file "/etc/bind/zones/master/db.betasquirrel.com"; }; zone "163.217.144.in-addr.arpa" { type master; file "/etc/bind/zones/master/db.144.217.163"; }; 

named.conf.options

 forwarders { 213.186.33.99; }; 

/etc/init.d/bind9 restart

接下来在GoDaddy中添加了名称服务器ns1.betasquirrel.comns2.betasquirrel.com ,网站开始工作。

现在我怎么能主办像demo.betasquirrel.com这样的子域名。 我刚刚创build虚拟主机,它不工作。

/etc/resolv.conf

 # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN search demo.betasquirrel.com search betasquirrel.com nameserver 213.186.33.99 search local 

/etc/apache2/sites-available/betasquirrel.com.conf

 <VirtualHost *:80> ServerName betasquirrel.com ServerAlias www.betasquirrel.com DocumentRoot /var/www/html/betasquirrel.com/htdocs DirectoryIndex index.php index.html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> 

/etc/apache2/sites-available/demo.betasquirrel.com.conf

 <VirtualHost *:80> ServerName demo.betasquirrel.com ServerAlias www.demo.betasquirrel.com DocumentRoot /var/www/html/demo.betasquirrel.com/htdocs DirectoryIndex index.php index.html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> 

根据之前的疑难解答,即使服务器本身正在运行,授权也是正确的,您的域区域根本不在您的BIND中提供服务。

根据您的评论 ,您已经删除了demo条目 ,而您的域名的其他部分又开始工作,这导致我们删除了实际的条目,这些条目都是错误的:

 -demo.betasquirrel.com. IN A 144.217.163.139 -demo IN A 144.217.163.139 -demo IN CNAME demo.betasquirrel.com. 
  1. 首先,前两个条目是相同的 – 扩展后,左右两边是相同的,这可能会导致错误,因为相同的相同条目有效地出现两次。

  2. 但是,最有问题的问题来自同时存在ACNAMEloggingCNAMElogging意味着此名称引用不同的主机; 因此,名称不能同时包含任何其他logging,因为它只是一个别名。

    为了把它放在文件系统的术语中, Alogging就像文件中的一行,并且可以和其他任何logging(同一个文件中的行)几乎共存。 但是, CNAME就像一个符号link – 如果一个给定的文件是一个符号链接,它本身也不能包含任何其他的随机行。

  3. 而且,仔细观察你的CNAME,它实际上是一个从自身到扩展的链接,这本身也是完全错误的。

解:

可以添加CNAMElogging或Alogging; 区别在语义上,这里没有“正确”或“错误”的解决scheme。 但是,您不能同时添加两者。 此外,如果添加CNAMElogging,则必须指向包含所需Alogging的现有logging,而且绝对不能简单地指向自己。


选项0:

 +demo IN A 144.217.163.139 

备选案文1a:

 +demo IN CNAME @ 

选项1b:

 +demo IN CNAME betasquirrel.com. 

选项2a:

 +demo IN CNAME www 

备选案文2b:

 +demo IN CNAME www.betasquirrel.com. 

你不能同时采取所有的select!

不,认真的,你不能! 它根本不会工作。 不要责怪我们。

请注意,选项ab是相同的 – 唯一的区别在于您在configuration文件中使用的语法,但是当它由服务器加载到代表DNS协议的结构中时,两个符号之间不应有任何区别。

PS还要注意,示例前面的+符号表示您必须添加的行,它不应该是文件的实际部分

您的问题似乎是因为您的BIND似乎没有正确configuration,所以您的区域内没有主机出现解决,至less不是外部。


您的胶水logging已正确configuration您的注册商,所以,没有什么需要改变:

 % dig @a.gtld-servers.net. ns1.BETASQUIRREL.COM. | egrep "^[[:alnum:]]" BETASQUIRREL.COM. 172800 IN NS ns2.BETASQUIRREL.COM. BETASQUIRREL.COM. 172800 IN NS ns1.BETASQUIRREL.COM. ns2.BETASQUIRREL.COM. 172800 IN A 144.217.163.139 ns1.BETASQUIRREL.COM. 172800 IN A 144.217.163.139 

您的服务器似乎在线,所以,这不是一个防火墙问题:

 % dig @144.217.163.139 version.bind txt chaos +short "9.10.3-P4-Ubuntu" 

但是,您的BIND似乎没有充当您的域区域的权威服务器:

 % dig @144.217.163.139 ns1.BETASQUIRREL.COM. a +short % 

比较正确configuration名称时发生的情况:

 % dig @216.218.131.2 ns2.he.net a +short 216.218.131.2 % 

请注意,域名中没有一台主机似乎可以正常工作。 如果有一些为你工作的话,那可能与从某些主机工作的时候caching早期的条目有关。


另外请注意,configuration反向区域163.217.144.in-addr.arpa. ,只有在您购买了至less256个IPv4地址(单个/ 24个)并且已经收到该区域的完整授权时才适用。 有时,提供商也支持“无类别”的授权,例如按照http://tools.ietf.org/html/rfc2317 ,价值和云提供商为OVH,可能最常见的是简单地使用他们的界面来build立在自己的服务器上进行反向录制,而不需要在您的末端运行任何额外的区域。


请注意,configurationforwarders { 8.8.4.4; }; forwarders { 8.8.4.4; }; 只有在您打算运行本地recursion DNS服务器时才是正确的。 它与您最初试图执行的权威 DNS服务器是分开的和独立的。 由于潜在的caching中毒问题,将两者作为同一守护进程的一部分运行通常是一个糟糕的主意。

而且,对于这个答案来说,使用8.8.4.4是一个糟糕的主意,因为你已经在/etc/resolv.conf使用了cdns.ovh.net.cdns.ovh.net. ),它必须是recursion服务器您的提供商,并可能是设置的最佳select。


build议的解决scheme:看来你正在试图解决多个独立的问题,一起砸了。 您可能应该从BIND中删除forwarders设置; 确定为什么它不作为你的权威服务器(查看它的日志,以查看可能发生的事情),如果没有这样做,只需委派给第三方运行名称服务器的工作。

大多数托pipe服务提供商已经很less或不收取费用(如果您是客户),并且拥有一个可以configuration事物的Web界面。 否则,也有很多免费提供商; 最常见的是http://dns.he.net/ – 它是免费的,非常快,他们让你在线编辑你的设置。

另外,我也可能build议报废你的BIND和Apache设置,并尝试使用NSD3和nginx 。

如果您想开始将demo用作子域名,则需要将A或CNAMElogging添加到您的区域文件,就像您对ns1ns2mail所做的一样。

所以你的区域文件应该看起来像这样:

 ; ; BIND data file for betasquirrel.com ; $TTL 3h @ IN SOA ns1.betasquirrel.com. admin.betasquirrel.com. ( 2 ; Serial 3h ; Refresh after 3 hours 1h ; Retry after 1 hour 1w ; Expire after 1 week 1h ) ; Negative caching TTL of 1 hour @ IN NS ns1 @ IN NS ns2 @ IN MX 10 mail @ IN A 144.217.163.139 ns1 IN A 144.217.163.139 ns2 IN A 144.217.163.139 www IN A 144.217.163.139 mail IN A 144.217.163.139 ftp IN CNAME www demo IN CNAME www 

注意最后一行的添加。 现在你的DNS服务器知道如何回应,当你要求demo.betasquirrel.com。

另外不要忘记在进行更改时增加序列号。

顺便说一句,在一个子域上使用CNAME来循环回顶端的域名是我不会做的…所以我也改变了这一点。 和@是捷径来源(即域名)。