计算机:acer4739Z——ubuntu12.04-LTS
手机:T619——Android-2.3.5
现在不少朋友都在使用Android手机,链接wifi来上网确实很方便。但是当没有无线路由的时候,就不得不想另外一个办法了。比较流行和实用的就是,利用笔记本电脑共享AP(wifi)给Android手机。使用过WIN7的朋友都知道,WIN7系统中利用几条命令就可以创建AP,或者更为方便的是利用Connectify这样的软件,可以轻轻松松就创建好AP。但是使用ubuntu的朋友,就没这么幸运了。为了共享AP,不得不折腾一番。下面,我们就一起来分析一下,在ubuntu下有哪些方法可以共享AP。
方法一:利用系统自带的功能创建AP
首先,最简单的莫过于使用系统自带的功能去创建AP了,不需要下载任何软件,而且是在UI界面下进行操作,非常的简单。但是首先要说明的是,按照这样的方法创建AP,大部分手机都不能扫描到PC所发射出来的wifi信号。我用华为的一款手机(具体型号忘了)可以成功的检测到这种wiifi信号,但是使用三星,天语(T619)的手机都检测不到这种wifi信号。还有朋友说,他的是小米的手机,可以检测到这种wifi信号。不知你的手机是否可以检测到呢?下面我们就先试一下吧。
1,在系统的有上角,有个链接管理的图标,点击见下拉菜单。
2,在上述菜单中,点击“启动无线”了启动无线功然后点击“编辑连接...",在弹出的“网络连接”窗体中,选择“无线”,如下所示:
3,点击“添加(A)”按键来创建一个网络。选中“无线”这个选项,然后“连接名称”和SSID中都填写“MyWifi”,其他选项都按照图中的设置去选择,如下图所示:
4,点击“无线安全性”,填写认证的密码。如下图所示。
5,点击“IPv4设置”,设置如下(如果默认就是如此,就不用改了):
6,点击“IPv6设置”,“方法”选择“忽略”,其他不用管。完了后点击“保存”:
7,回到桌面,再次点击网络链接的图标,选择“链接到隐藏的无线连接(C)...”,在“连接(N)”选项里,选择刚才所创建的wifi——“MyWifi”,然后点击”连接(O)“。
8,到此,一个AP就创建成功了。拿你的手机出来,打开wifi,看能不能扫描到刚才所创建的wifi信号?如果可以的话,恭喜你,不用往下看了;如果不行,那也别着急下面还有更好的方法。
方法二,ubuntu版的”Connectify“
在Windows中有”Connetify”,ubuntu中有什么呢?不错,那就是“wifi-hostapd-ap”,是一位俄罗斯的朋友写的。可到http://code.google.com/p/wifi-hostapd-ap/downloads/list进行下载。网站的截图如下:
从截图可见,共有4种版本的供你选择。首先是源码,喜欢自己编译的或者研究里面是怎么实现的朋友可以下载这个。其次是可执行文件,下载解压就行了。最后一个是.deb格式的安装包,使用dpkg命令即可安装。
在安装的过程中,可能会出现一些问题,主要是这个软件依赖很多的库。那么,这个软件依赖于哪些库或者要使用的工具有那些呢?简单列举一下:wireless——tools,bridge—utils,hostapd,dnsmasq,libqtgui4,gambas3-runtime...具体的你可以根据安装过程中的提示去下载。我在安装的过程中就因为缺少适合版本的gambas3-runtime,从而导致安装失败。因此也没有能够进行下一步的测试。所以,下面
将引用另外一位朋友的对这个软件的介绍《ubuntuAP》。希望你可以安装成功。
如果你安装成功了,那恭喜你;如果很不幸,你也和我一样,找不到适合版本的gambas-runtime3,怎么办呢?
针对在这一块的缺失,本人写了一款针对ubuntu-12.04-LTS的“Connectify”,现在正处于测试阶段。在推出这一款软件之前,先向大家介绍一些其他的方法,以便缓解“燃眉之急”。请继续往下看。
方法三:hostapd+dnsmasq
利用方法一所创建出来的wifi,为什么大多数Android手机都搜索不到它的信号呢?那是因为Android一般都是不支持Ad-hoc模式的WiFi的。为了在ubuntu中创建一个Android手机能够识别的AP,下面将向大家介绍另外一种方法。
1,要安装两个软件。hostapd和dnsmasq。执行sudo apt-getinstall hostapd dnsmasq 即可安装。至于这两个软件的详细说明,我另外有文章进行详细的描述,有兴趣的可以看我的《Hostapd》。这里就不深入介绍,仅仅达到成功建立AP的目的即可。
2,关于网路端口的配置。网上有文章说,要将有线网卡配置为静态ip。但是本人经过测试,其实不用将有线网卡配置为静态ip也行。由于本人使用的是校园网,链接网络要利用锐捷认证,所获得的ip是变化的,如果使用静态ip,则很难认证成功,或者认证成功之后上网很慢(这里涉及到DNS的配置,不详细介绍)或者打不开一些网页。总之,使用静态IP带了很大的不便。不过如果你喜欢,可以按照下面的方法去设置静态IP。
打开/etc/network/interfaces文件,添加以下内容:
autoeth0
ifaceeth0 inet static
address 172.16.40.1 #ip地址,自己修改
netmask 255.255.255.0 #子网掩码,自己修改
gateway 172.16.40.1 # 网关,自己修改
配置好后,如下图所示意:
3,配置hostapd。打开/etc/hostapd.conf,里面有很多的可配置选项,其中大部分都已经用#来注释了。为了使得一些配置有效。我们要将一些配置前的#去掉,然后根据我们的需要去进行参数设置。要配置的选项和参数如下所示。每个选项的具体意思,有另外的博客专门说明,限于篇幅这里不做详细的介绍。
interface=wlan0
driver=nl80211
ssid=LiyihaiWifi #ssid可以改成你喜欢的名字,你的手机将会搜索到这个名字的wifi
hw_mode=g
channel=11
dtim_period=1
rts_threshold=2347
fragm_threshold=2346
macaddr_acl=0
auth_algs=3
ieee80211n=0
#以下是加密方法的设置,当然你可以选择不要密码(不用设置以下内容),这样的话就只要能够扫描到你的wifi信号的都可以连接。
wpa=3
wpa_passphrase=12345678 #自行设置密码,有文章说设置好后要留空格,但是经本人测试,不留空格也是可以的。
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
4,配置dnsmasq。打开/etc/dnsmasq.conf。如果没有这个文件,可以自己创建一个,添加以下内容:
interface=wlan0
bind-interfaces#这个是只监听wlan0,没有之会检测所有卡
except-interface=lo
dhcp-range=192.168.1.100,192.168.1.254,12h#设置dhcp地址范围,即租借时间6小时
#address=/#/10.0.0.1#如果你的配置中有这个,请注释掉,应为这个会把#(代表所有网址)的dns到10.1.1.1这个地址
dhcp-option=3,192.168.1.1#为手机配置网关,要和dhcp-arange对应,这涉及网络的知识,不详细介绍。
dhcp-option=6,202.114.128.2#为手机配置dns,你可以根据实际情况去修改
5,AP是需要路由规则的,为了添加路由规则,可以使用iptalbes命令。你可以用命令行的方式去添加路由规则,但是这里推荐使用
脚本的方式。
创建一个文件myap,里面添加如下内容:
#!/bin/sh
#为无线添加路由规则
iptables-F
iptables-X
iptables -t nat -F
iptables -t nat-X
iptables -t nat -APOSTROUTING -s 192.168.1.0/24 -o eth0 -jMASQUERADE
iptables -A FORWARD-s 192.168.1.0/24 -o eth0 -jACCEPT
iptables -A FORWARD -d 192.168.1.0/24-m conntrack --ctstateESTABLISHED,RELATED -i eth0 -jACCEPT
添加完后如图所示:
添加完后,保存文件。为了使得文件具有可执行的属性,我们可以利用一下的命令去修改(注:你传创建的myap应该在当前目录下,否则要添加路径):sudo chmod a+x myap
说明:由于在上面我们将dhcp-range设置为192.168.1.100,192.168.1.254,也就是指定了wifi动态分配的地址范围为192.168.1.100至192.168.1.254,所以这里要配置路由规则的时候使用192.168.1.0。如果上面你的dhcp-range不是192.168.1.100,192.168.1.254,那么你的路由规则也要修改。
6,为了确保打开了转发的功能,还要修改一个文件/etc/sysctl.conf。打开文件/etc/sysctl.conf,找到net.ipv4.ip_forward=1,如果被注释了,要将其前面的注释去掉,以便使其生效。如图所示:
7,现在以启动AP啦。流程如下。(#号后面的是说明)
killallnamed #一般情况下bind的named会占了53端口,从而导致dnsmasq启动不了,所以要用killallnamed来杀了named再启动dnsmasq。
killallhostapd
ifconfig wlan0 192.168.1.1 #由于上面我们将dhcp-range设置为192.168.1.100,192.168.1.254,所以这里我们要将wlan0的ip设置为同一网段的ip。
hostapd-B/etc/hostapd.conf
/etc/init.d/dnsmasq restart #使用静态ip的朋友注意了,dnsmasq启动后会出现电脑突然上不了网,因为dnsmasq更了/etc/resolv.conf的原因。可以在/etc/resolv.conf加一行,执行命令echo"nameserver202.114.128.2">>/etc/resolv.conf即可。202.114.128.2是dns服务器,你可以根据你的当地的实际情况去修改。
echo1>/proc/sys/net/ipv4/ip_forward #启动转发功能。
sudo./myap#如果你的myap不在当前路径下,要加路径。
至此,AP创建已经完成。打开手机扫描一下wifi,是不是可以上网了了?如果还不可以,建议重启一下电脑,再操作一次第7步。注意:手机不要设置为静态ip了。
备注:在测试的过你可以会遇到:“SIOCSIFFLAGS: Operation not possible due to RF-kill”这样的错误。这时不要害怕,有个很简单的解决方法,请看我的博客《SIOCSIFFLAGS: Operation not possible due to RF-kill》。
最后的总结
除此之外,ubuntu下还有其他的方法去创建AP,但是限于篇幅,这里就不再添加更过的方法了。在上面的3种方法中,第一种最简单,但是适用性很差。第二种方法很方便,很是暂时还不大可行。第三种方法最复杂,但是适用性最好。至于选择那一种,看你喜欢啦。
参考文档
《Ubuntu_Ubuntu12.04下设置笔记本成为wifi热点》
http://blog.csdn.net/jiguanghoverli/article/details/8110283
《Ubuntu共享WiFi(AP)给Android方法》
http://xgwdy06.blog.163.com/blog/static/190718352201223093522365/
《Ubuntu共享WiFi(AP)给Android方法【修正版】》
http://hi.baidu.com/gbthereisaway/item/9073a2e4ab2d8a374ddcafad
《UbuntuAP》
http://hi.baidu.com/lexiangtaotao/item/5d4e87f22db132c70cd1c86f