Linux文件系统域名解析实现

2019-07-13 08:45发布

http://blog.csdn.net/water_cow/article/details/6901981 简介
本文旨在为以龙芯1B开发板为平台,文件系统添加解析域名功能提供技术文档。
系统环境:龙芯1B开发板(mips32指令)Linux2.6.21 / Linux3.0.0内核、busybox1.19.2
编译环境:ubuntu10.04、gcc-3.4.6-2f

问题描述
文件系统udhcpc获取ip,能pingip,但ping域名时提示如"ping : bad address 'www.baidu.com' "
使用busybox构建文件系统,busybox中部分命令需要依赖库libnss*,如pingnslookup等命令,即使busybox选择了静态编译也是如此。因此文件系统实现域名解析功能,还需要配置一些必要的库与配置文件。

创建必须的配置文件:
1.创建/etc/resolv.conf

该文件是DNS域名解析的配置文件,它的格式很简单,每行以一个关键字开头,后接配置参数。resolv.conf的关键字主要有四个:
nameserver  #定义DNS服务器的IP地址
domain     #定义本地域名
search      #定义域名的搜索列表
sortlist      #对返回的域名进行排序
resolv.conf文件中,nameserver关键字必须存在,它用于指定DNS服务器,其它关键字可选。该文件也可通过执行udhcpc生成,生成文件内容如:

nameserver 221.5.88.88   #DNS地址
nameserver 210.21.4.130  #备用DNS地址
2.创建/etc/hosts
hosts是一个没有扩展名的系统文件,其作用就是将主机名映射到对应的ip地址。当用户执行一条ping命令时(ping www.baidu.com),系统会首先自动从hosts文件中寻找www.baidu.com对应的ip地址,一旦找到,系统会立即对相应的ip执行ping命令,否则系统将域名提交DNS域名解析服务器进行ip地址的解析。通常地,为方便快速连接,可把需要经常连接的域名与其ip记录在hosts文件。
#cat /etc/hosts
127.0.0.1  localhost:localdomain  localhost
3.创建/etc/host.conf
当系统中同时存在DNS域名解析与/etc/hosts主机表制时,host.conf用于确定主机名解析顺序。它每行含一个配置关键字,其后跟着合适的配置信息。系统识别的关键字有:order、trim、multi、nospoofreorder
#cat /etc/host.conf
order hosts,bind  #名称解析顺序
multi on  #允许主机拥有多个IP地址
nospoof on  #禁止IP地址欺骗
拷贝必要的库:
从交叉工具链的库目录(./gcc-3.4.6-2f/mipsel-linux/lib)拷贝需要的库文件到文件系统lib目录。
#cd ./gcc-3.4.6-2f/mipsel-linux/lib
#cp libc.so.6 ld.so.1 libdl.so.2 ./rootfs/lib
#cp libnss_dns.so libnss_dns.so.2 lib libnss_dns-2.3.6.so ./rootfs/lib
#cp libresolv.so libresolv.so.2 libresolv-2.3.6.so ./rootfs/lib
文件系统域名解析环境配置完成。