由于要共享无线给android,虽然cm6.1可以用ad-hoc,但感觉android连ad-hoc要比连ap耗电。本来想看看有什么usb无线网卡可以在linux下用软ap,顺便用来替换掉上网本的无线网卡,我的上网本在linux下的无线驱动太差劲(可恨的rtl8187),连ad-hoc都不支持。结果在http://linuxwireless.org上发现我台式机的无线网卡的ath5k驱动很完善,可以用软ap,ath5k太可爱了。回来搞了一个晚上加一个中午,终于用hostapd,dnsmasq实现了软ap。可怜的netmanager要报废咯~
首先,系统是U10.10,安装软件:
sudo apt-get install hostapd dnsmasq
(1)为无线添加路由规则:
sudo iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -o eth0 -j MASQUERADE sudo iptables -A FORWARD -s 10.1.1.0/24 -o eth0 -j ACCEPT sudo iptables -A FORWARD -d 10.1.1.0/24 -m conntrack --ctstate ESTABLISHED,RELATED -i eth0 -j ACCEPT
10.1.1.0/24是我设置的地址段,可以自己改。
若要记录下路由的情况可以加如下语句:
sudo iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 80 -j LOG --log-prefix "NEW_HTTP_CONN: "
其中NEW_HTTP_CONN是日记中的标识。
然后把现在iptables的规则写进/etc/iptables.rules:
sudo sh -c "iptables-save > /etc/iptables.rules"
配置interface文件,使每次eth0启动时自动写规则:
auto eth0 iface eth0 inet dhcp pre-up iptables-restore < /etc/iptables.rules post-down iptables-save > /etc/iptables.rulse
以上代码从https://help.ubuntu.com/community/WifiDocs/WirelessAccessPoint学来。
(2)配置hostapd.conf
interface=wlan0 bridge=br0 #貌似这个没有用 driver=nl80211 ssid=fortimefan hw_mode=g channel=11 dtim_period=1 rts_threshold=2347 fragm_threshold=2346 macaddr_acl=0 auth_algs=3 ieee80211n=0
详细hostapd.conf配置请看http://linuxwireless.org/en/users/Documentation/hostapd。
(3)配置/etc/dnsmasq.conf:
interface=wlan0 bind-interfaces #这个是只监听wlan0,没有之会检测所有卡 except-interface=lo dhcp-range=10.1.1.10,10.1.1.110,6h #设置dhcp地址范 #address=/#/10.1.1.1 #这个会把#(代表所有网址)的dns到10.1.1.1这个地址
(4)dnsmasq与named
一般情况下bind的named会占了53端口,然后dnsmasq会启动不了,所以我用killall named来杀了named再启动dnsmasq。
附自动链接代码:
#! /bin/sh case "$1" in start) killall named killall hostapd linux1x -k ifconfig wlan0 10.1.1.1 hostapd /home/fan/.hostapd.conf &>/dev/null & /etc/init.d/dnsmasq restart linux1x -d #校园网h3c,杀了named后好像会出问题,重连一下h3c ;; esac