openWRT-usb wifi AP 上网

配置dnsmasq

DNSmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络,它提供了DNS功能和可选择的DHCP功能。它服务那些只在本地适用的域名,这些域名是不会在全球的DNS服务器中出现的。DHCP服务器和DNS服务器结合,并且允许DHCP分配的地址能在DNS中正常解析,而这些DHCP分配的地址和相关命令可以配置到每台主机中,也可以配置到一台核心设备中(比如路由器),DNSmasq支持静态和动态两种DHCP配置方式。

首先你需要在make menuconfig 上面将dnsmasq package添加,编译好后在/etc/init.d/rcS中启动dnsmasp服务

/etc/init.d/dnsmasq start

启动不了,提示的erro是

cant't open /var/run/dnsmasq.pid

所以需要touch /var/run/dnsmasq.pid

mkdir -p /var/run
cd /var/run      
touch dnsmasq.pid
cd /

当你将无线网卡挂载好,接入wifi热点就会自动分配一个ip地址了。

ifconfig ra0 192.168.1.1 netmask 255.255.255.0 up

桥接ra0和eth0

eth0连接上级路由,可以上网。而ra0通过eth0也能上网,这样连接到ra0的设备就都可以上网了。这个功能是通过iptable的nat桥接功能实现。

iptable 和 NAT桥接功能需要在linux 内核开启相关的配置,主要是Netfilter。下面是我们的Network 模块的配置: Networking support -> Networking options将IP字段的开头的都选上,还有WAN router。同个界面找到Netfilter进入,把里面的都选上。都选用[*]

在openWRT的make menuconfig需要选择iptable工具和libip4tc依赖库。

openWRT并没有将iptable 桥接功能独立开来,而是将其整合到系统的firewall配置里面,所以我们需要找到openWRT firewall的配置原理. wiki

简单的说,我们这个桥接功能是属于转发的功能,我们只需如何配置使其生效即可。在/etc/config/firewall.我的配置如下:

//这个zone区是lan
config 'zone'                    
        option 'name' 'lan'      
        option 'network' 'lan'   
        option 'input' 'ACCEPT'
        option 'output' 'ACCEPT'
        option 'forward' 'ACCEPT'
//这个zone区是wan
                                 
config 'zone'                    
        option 'name' 'wan'      
        option 'network' 'wan'   
        option 'input' 'REJECT'
        option 'output' 'ACCEPT'
        option 'forward' 'REJECT'
        option 'masq' '1'        
        option 'mtu_fix' '1'     
   
//这个是转发,src是源头,dest是目的                              
config 'forwarding'              
        option 'src' 'lan'  
        option 'dest' 'wan'

下面看我的/etc/config/network的配置是如何的:

config interface loopback
        option ifname   lo
        option proto    static
        option ipaddr   127.0.0.1
        option netmask  255.0.0.0
//这个是我的有线网卡,作为wan
config interface wan
        option ifname 'eth0'
        option proto 'dhcp'
        option peerdns '0'
        option dns '114.114.114.114 8.8.8.8'

//这个是我的无线wifi口,作为lan
config interface lan
        option ifname 'ra0'
        option proto 'static'
        option ipaddr   192.168.1.1
        option netmask  255.255.255.0


然后启动firewall 服务,就可以转发了。
echo 1 >/proc/sys/net/ipv4/ip_forward
/etc/init.d/firewall restart

连接wifi热点,ping 8.8.8.8试试。