昔我往矣

DNSv6和DNS64简单配置

2014年03月18日

上次说了下DHCPv6的部署方法,详见此处,这次说说DNSv6的哪些事儿!
Linux系统下的各类服务基本上都已经支持IPv6,DNS是一个常用而且重要的服务,可以算是互联网的入口了。根据通常需求,说说几个和IPv6相关的重要选项!

一、首先当然是安装Bind
主要讲解配置方法,所以选择最简单的安装--从源安装,bind本身已经支持了IPv6,所以还是一样的软件包!

yum -y install bind bind-utils

二、配置好IPv6地址及准备
此文不再讲解怎么配置IPv6地址,可以从DHCPv6那篇文章找到在Linux上配置动态和静态IPv6地址的方法。我们测试环境随便玩,就配置IPv6地址是1234:5678:890::88/64。如下图
ifconfig-eth0为了测试方便,还有一些准备工作:

  1. 设置系统的DNS服务器地址,
  2. 关闭iptables和ip6tables防火墙,
  3. 设置selinux为允许模式。
[root@localhost named]# cat /etc/resolv.conf 
nameserver 1234:567:890::88
[root@localhost named]# /etc/init.d/ip6tables stop
ip6tables:清除防火墙规则:                                [确定]
ip6tables:将 chains 设置为 ACCEPT 策略:filter            [确定]
:正在卸载模块:                                           [确定]
[root@localhost named]# /etc/init.d/iptables stop
iptables:清除防火墙规则:                                 [确定]
iptables:将链设置为政策 ACCEPT:filter                    [确定]
iptables:正在卸载模块:                                   [确定]
[root@localhost named]# setenforce 0

在线上服务环境最好把防火墙什么的都开起来啦,合理的配置就是了!

三、主配置文件
最核心的全局配置内容,为避免误导(其它配置和DNSv4保持一样就行),只给出最精简的配置文件/etc/named.conf,

[root@localhost named]# cat /etc/named.conf
options {
    listen-on-v6 port 53 { any; };  #监听端口,其实IPv4和v6的所有地址都监听了!
    directory     "/var/named";   #定义区域文件保存路径
};

zone "." IN {
    type hint;
    file "named.ca";
};

zone "lhzhi.com" IN {
    type master;
    file "lhzhi.com.host";
};

除了必备的根域外,此处我还创建了一个lhzhi.com域用作测试,编辑该域的区域配置文件:

[root@localhost named]# vim /var/named/lhzhi.com.host 
$TTL 3H
@    IN SOA    @ root.lhzhi.com. (
                    0    ; serial
                    1D    ; refresh
                    1H    ; retry
                    1W    ; expire
                    3H )    ; minimum
    IN      NS      ns.lhzhi.com.
ns      IN      AAAA    1234:567:890::88
www     IN      A       192.168.1.111
www     IN      AAAA    1234:4321::100
www2    IN      A       254.254.254.254    

指向的IP地址都比较随意,主要是为了方便计算和查看!
解释:首先定义了ns记录,然后建立了两个子域名www.lhzhi.com和www2.lhzhi.com!给www子域名配置了一个IPv4地址和一个IPv6地址,www2只配置了IPv4 地址!
这就算把lhzhi.com域配置完成,然后重启named服务,并测试:

[root@localhost named]# chmod +r /var/named/lhzhi.com.host  #授予读权限
[root@localhost named]# service named restart           #重启服务
停止 named:                                               [确定]
启动 named:                                               [确定]
[root@localhost named]# host www.lhzhi.com         #解析www.lhzhi.com域名
www.lhzhi.com has address 192.168.1.111
www.lhzhi.com has IPv6 address 1234:4321::100
[root@localhost named]# host www2.lhzhi.com
www2.lhzhi.com has address 254.254.254.254

结果完全和我们配置的一样,最基本的功能已经实现!

四、IPv6的固定前缀
在IPv4向IPv6的过渡期中,有一种技术是在IPv4的地址上加上固定的前缀,使其成为长度为128的IPv6地址。Bind有一种功能把获取到的IPv4地址转成固定前缀的IPv6地址。以添加well-known前缀64:FF9B::/64为例。向/etc/named.conf的options段中添加如下一句即可:

options {
    ...    
      dns64 64:FF9B::/96 {};   
};
...

重启named服务,然后测试解析www.lhzhi.com和www2.lhzhi.com,看看有什么不同:

[root@localhost named]# host www.lhzhi.com
www.lhzhi.com has address 192.168.1.111
www.lhzhi.com has IPv6 address 1234:4321::100
[root@localhost named]# host www2.lhzhi.com
www2.lhzhi.com has address 254.254.254.254
www2.lhzhi.com has IPv6 address 64:ff9b::fefe:fefe #这个IPv6地址就是DNS服务器通过IPv4地址计算来的

解释:因为www.lhzhi.com本来就配置了AAAA记录,所以,解析结果不变。但是www2.lhzhi.com原来只配置了一个IPv4的地址254.254.254.254,通过IPv4到IPv6的转换,再加上固定前缀就变成了64:ff9b::fefe:fefe(很显然,254转成16进制就是fe)。

五、转发DNSv6
有可能,你的网络和我的网络一样,只能访问IPv6的资源,不能和IPv4的DNS服务器通信。由于目前大多数域名服务器只有IPv4的地址,所以没法向他们查询!幸好,世界上有一部分IPv6已经和IPv4打通了,我们只需要把用户的解析请求发往这些连通了IPv4的IPv6网内的DNS服务器即可(好晕)!也就是说,把我们的DNSv6服务器配置成DNS转发服务器!向/etc/named.conf的options中添加两句,使其如下:

options {
    ...    
    forward only;
    forwarders { 2001:4860:4860::8888; } ;   #Google’s DNS
};
...

添加这两句话的意思是把所有的域名解析请求发往2001:4860:4860::8888这个地址,实际上,它是谷歌的DNSv6服务器,而且能和IPv4的DNS服务器通信,取得解析结果!
重启!此时,这台DNS服务器就能获取到DNSv4和DNSv6的域名服务器解析结果了,解析结果都是谷歌的DNSv6服务器返回的,哈哈!

在IPv6的运行初期,很多问题都是依靠过度办法解决的,真诚希望此文能够帮助到和我曾经一样迷茫的你!

当前暂无评论 »

添加新评论 »