陈灿坚

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

使用buildroot编译bind DNS服务器

buildroot来制作文件系统很方便,编译出来的文件系统是直接可用的,不用添加脚本等麻烦的工作,很多的库和app都可以
直接添加到文件系统里边,如常用的udhcpc,tftp,apache,lighttpd,php..

1、 到buildroot目录下执行make ARCH=arm menuconfig

1)配置CPU参数

 

little endian 指的是小端存储;

二进制格式是ELF

CPUCortex-A5

交叉工具支持eabihf

浮点书处理采用VFP-v4

采用精简指令集Thumb2

2)指定交叉编译工具

 

3)勾选要编译的开源软件

 

4)保存退出,执行make进行编译;

2、将编译好的二进制执行文件和需要的库文件拷贝到开发板上

 /usr/local/sbin  /usr/local/bin  /usr/local/include  /usr/local/lib  /usr/local/share/man 下新生成的与 bind 有关的文件拷贝到目标机的相同目录下。

3bind这个DNS域名解析服务器移植好后,执行下面的语句实现开启服务

named -c named.conf &

-c指配置脚本named.conf的文件地址

named.conf主要有下面几个内容

zone "localhost" IN { 
type master; 
file "localhost.zone"; 
allow-update { none; }; 
};
zone "0.0.127.in-addr.arpa" IN { 
type master; 
file "named.local"; 
allow-update { none; }; 
};
zone "test.com" IN { 
type master; 
file "test.zone"; 
allow-update { none; }; 
};

zone "." { 
type master; 
file "rtk.zone"; 
allow-update { none; }; 
};

 

最后一个zone "."是我写的,表示所有的任何域名都要用这个进行解析,解析文件放在rtk.zone里面;

rtk.zone主要内容如下:

@ IN SOA ns.domain.com. hostmaster.domain.com. (

1053891162
3H
15M
1W
1D )
IN NS 10.1.1.1

* IN A 10.1.1.1

上面*号表示所有域名, 10.1.1.1RTK的本机IP,也就是把所有的域名都解析为RTK的本机IP

经过上面的折腾,现在手机连上RTKwifi后就能够实现DNS拦截了,把手机访问的所有域名都强制解析为RTKIP地址,如果这时候RTK上有web服务器,那么就会显示web网页。

但是要实现自动弹窗功能,还有一个步骤需要做,那就是配置web服务器,实现HTTP重定向,使得HTTP头变成302,这样,手机就会自动弹窗了。原理图如下所以:

 

 

实现HTTP的重定向其实非常的简单,只要在服务器的配置脚本中加入这样一条语句就可以了,

url.redirect = ("^/(.*)" => "http://10.1.1.1/rtk",)

这条语句的意思就是将所有的url都重新指定一个地址,指定到rtk目录下。这样就实现了简单的重定向功能了。

这个时候,手机连上wifi后,就是自动弹出rtk目录下的一个index.html的网页,该网页就是RTK的首页。

 

扩展:如果这个时候要访问外网怎么办,其实也很简单,只要把访问的外网的域名url解析的IP地址写在named.conf 域名配置脚本里面。

ccj@ccj-ZHD:host www.baidu.com

www.baidu.com is an alias for www.a.shifen.com.

www.a.shifen.com has address 112.80.248.73

www.a.shifen.com has address 112.80.248.74

 

Ubuntu上通过host查看该域名或者URL的正确IP地址,然后把这个IP地址写入到DNS的配置文件里面,这样,一旦用户访问这个url就会变解析成对应的IP地址。假设用户访问了www.baidu.com,那么就会被解析成112.80.248.73这个IP。其实这就是本地局域网DNS的原理。

假设我们有一个wifi网卡wlan03G网卡ppp0。那么拨号成功后,ppp0将有自己的IP,可以连接外网。wifi作为热点,所有接入它的设备将在同一局域网内,但明显和ppp0不在同一个网段。

那么我们需要把从wlan0接收到的目的地址是112.80.248.73数据包都转发到ppp0,并且把自己伪装成从ppp0发出的数据。

明确了数据流的流向,就等于知道了这个链路上的有哪些表和链。那么我们首先选择nat表,因为只有它能做网址转换,然后更深入,我们知道这个过程中,nat表的PREROUTING这个链是具体实现“伪装”功能的。

具体做法:

1、使能转发功能

echo 1 > /proc/sys/net/ipv4/ip_forward

2、设置转发表nat

iptables -t nat -A POSTROUTING -d 112.80.248.73 -p tcp -j MASQUERADE -o ppp0

 

iptables -t nat -A POSTROUTING -d 112.80.248.73 -p udp -j MASQUERADE -o  ppp0

 

-t后面的参数指定哪个表格进行修改,我们选择nat

-A说明规则添加的方式,append“追加”

POSTROUTING,说明修改的chain

-d是匹配规则中的一种,表示目的IP

-p 是网络协议

-j jump,指跳转哪个target进行处理

    MASQUERADE是伪装,它自动检测出口的ip,然后将数据伪装成从ppp0发出的数据请求

-o 出口网卡

 

通过这个方法,我们就可以访问外网的一个url了,比如百度地图的API,中海达官网等。

 

posted on 2016-10-26 11:34  卧似长剑  阅读(2035)  评论(0编辑  收藏  举报