话说软路由这次折腾的差不多到最后,是无线路由器出了问题。正为之发愁,师兄拿来一个USB无线网卡想试一下,插上去可以直接用,其实和有线网差不多,只是多了一步,就是安装hostapd,把无线网卡当作AP发射信号。

但是发现了一个问题,就是wlan0和eth1两个设备发生了冲突,用单无线的时候很好,速度也很快,单用有线的时候也很好,但是两者一起用就出现问题了,先打开的那个设备有效,后打开的设备不能使用。
原因应该是NAT转发的时候出了问题,应该是iptables配置的问题,联想到路由器,和这个情况差不多,一个wan,几个lan,一个wlan,于是翻开openwrt路由器的网络表,里面有个br的网络设备,就是网桥,的确,利用网桥可以把eth1和wlan0连接到一起,然后NAT把包转发到这个网桥上去,再由网桥去继续转发包,这样子,有线网和无线网就成了一个局域网,正式想要的结果。
在网上搜罗了一些关于网桥的资料,验证通过。
1安装网桥控制程序 sudo apt-get install bridge-utils
2新建网桥 sudo brctl addbr br0
3设置网桥地址并开启 sudo ifconfig br0 192.168.0.1/24 up
4向网桥里添加接口 sudo brctl addif br0 eth1
5开启无线开关 sudo hostapd -d /etc/hostapd/hostapd.conf -B
6向网桥里添加接口 sudo brctl addif br0 wlan0
然后把dnsmasq的dhcp interface改为 br0
配置NAT转发到br0网桥上
sudo iptables -A FORWARD -s 192.168.0.0/24 -i br0 -o eth0 -m conntrack –ctstate NEW -j ACCEPT
sudo iptables -A FORWARD conntrack –ctstate RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A POSTROUTING -o eth0 -j MASQUERADE
接下来又研究了开机启动的问题
开机需要按步骤做以下事情
1启动无线信号发射hostapd
2建立网桥br0
3设置iptables
4启动锐捷
其实用interfaces文件即可实现前3个步骤,最后一个步骤因为经常失效,所以需要一个后台程序监听运行
在interfaces文件里声明br0
auto br0
iface br0 inet static
    address 192.168.0.1
    netmask 255.255.255.0
    gateway 192.168.0.1
    network 192.168.0.0
    boardcast 192.168.0.255
    bridge_ports eth1 wlan0
    pre-up sudo hostapd ……
    post-up sudo iptables-restore < ……
    pre-down sudo iptables -F || sudo iptables -F -t nat
    post-down sudo kill `cat …`
锐捷监听程序
检查日志文件,里面是否有“Success”字样,若没有,则杀掉锐捷,然后重启认证,把认证日志写到文件里。
#!/bin/sh
rjsucc=`cat /tmp/rj.log | grep “Success”`
if [ -z "$rjsucc" ] ;then
    date “+%H:%M:%S Auth” >> /tmp/rj.log
    sudo …… -q
    sudo …… >> /tmp/rj.log &
fi
用了一段时间发现无线信号不太稳定,手机基本上连不上去,看看hostapd.conf文件
模式改了一下
country_code=CN
ieee80211d=1
hw_mode=g
channel=3
dtim_period=2
信号稍微稳定了一点,也不知道是什么原因
想把自己的常用的设备DHCP分配地址时设置为静态IP,这个是可以由dnsmasq实现的,打开dnsmasq的配置文件,找到
dhcp-host=xx:xx:xx:xx:xx:xx,192.168.0.5
dhcp-host=xx:xx:xx:xx:xx:xx,192.168.0.6
dhcp-host=xx:xx:xx:xx:xx:xx,192.168.0.7
dhcp-host=xx:xx:xx:xx:xx:xx,192.168.0.8
然后给装上php,以及解析cgi脚本,修改/etc/apache2/sites-available/default
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
allow from all
AddHandler cgi-script .cgi
</Directory>
暂时就折腾到这里吧~~~
 祝2014新年快乐!
参考

Leave a reply