ubuntu14.04开启wifi热点
首先说一下,这次开启wifi热点的过程有些曲折,很多教程在写的过程中没有提到作者遇到的问题,这里和大家一起分享。
这次我们使用的工具主力是hostapd用来开启wifi热点的,其次是isc-dhcp-server,它是一个DHCP服务器,用来自动分配ip地址。
总路线:1.安装配置hostapd(阶段成果:安卓手机和电脑能搜索到热点名称,并且能连接上)-->2.安装配置dhcp服务器(阶段成果:安卓手机和电脑能自动获取ip地址)-->3.iptables配置转发规则(阶段成果:安卓手机和电脑访问互联网)
提示:教程主要讲有线共享给无线,无线共享给无线也可以的,参考最后的进一步说明就可以了
一.安装配置hostapd
安装hostapd
- sudo apt-get install hostapd
sudo apt-get install hostapd编辑hostapd.conf
- sudo gedit /etc/hostapd.conf
sudo gedit /etc/hostapd.conf添加以下内容,如果存在可以直接覆盖即可
- interface=wlan0
- driver=nl80211
- hw_mode=g
- channel=1
- ssid=360WIFI-0517
- wpa=2
- wpa_key_mgmt=WPA-PSK
- wpa_pairwise=CCMP
- wpa_passphrase=12345678
interface=wlan0 driver=nl80211 hw_mode=g channel=1 ssid=360WIFI-0517 wpa=2 wpa_key_mgmt=WPA-PSK wpa_pairwise=CCMP wpa_passphrase=12345678----------------------------分割线-----------------------------
部分教程采用下列方式启动
测试配置是否可用:
- sudo hostapd -d /etc/hostapd/hostapd.conf
sudo hostapd -d /etc/hostapd/hostapd.conf启动hostapd:
- sudo /etc/rc.d/hostapd start
sudo /etc/rc.d/hostapd start但是笔者测试不好用
----------------------------分割线--------------------------
启动hostapd
- sudo hostapd -B /etc/hostapd.conf
sudo hostapd -B /etc/hostapd.conf报错
- Configuration file: /etc/hostapd.conf
- nl80211: Could not configure driver mode
- nl80211 driver initialization failed.
- hostapd_free_hapd_data: Interface wlan0 wasn't started
Configuration file: /etc/hostapd.conf nl80211: Could not configure driver mode nl80211 driver initialization failed. hostapd_free_hapd_data: Interface wlan0 wasn't started解决方法
#改变NetworkManager里的状态,关闭wifi,同时软锁定
- sudo nmcli nm wifi off
sudo nmcli nm wifi off#启用wifi设备,不同于网络状态中的启用wifi(后者改变NetworkManager里的状态)
- sudo rfkill unblock wlan
sudo rfkill unblock wlan一般这个情况下可以启动hostapd了
- sudo hostapd -B /etc/hostapd.conf
sudo hostapd -B /etc/hostapd.conf但是如果是重新开启热点的话还是会报错
原因是hostapd进程占用了这个网卡,关闭这个进程就好了
- sudo killall hostapd
sudo killall hostapd再运行
- sudo hostapd -B /etc/hostapd.conf
sudo hostapd -B /etc/hostapd.conf成功
- Configuration file: /etc/hostapd.conf
- Using interface wlan0 with hwaddr c0:f8:da:59:6a:ec and ssid "360WIFI-0517"
- wlan0: interface state UNINITIALIZED->ENABLED
- wlan0: AP-ENABLED
Configuration file: /etc/hostapd.conf Using interface wlan0 with hwaddr c0:f8:da:59:6a:ec and ssid "360WIFI-0517" wlan0: interface state UNINITIALIZED->ENABLED wlan0: AP-ENABLED
二.安装配置dhcp服务器
这里用的是isc-dhcp-server,你也可以使用其它的dhcp服务器程序
安装isc-dhcp-server
- sudo apt-get install isc-dhcp-server
sudo apt-get install isc-dhcp-server编辑/etc/default/isc-dhcp-server指定网卡为wlan0
- sudo gedit /etc/default/isc-dhcp-server
sudo gedit /etc/default/isc-dhcp-server把
- INTERFACES=""
INTERFACES=""改为
- INTERFACES="wlan0"
INTERFACES="wlan0"编辑/etc/dhcp/dhcpd.conf修改租约DNS等信息/etc/dhcp/dhcpd.conf
- sudo gedit /etc/dhcp/dhcpd.conf
sudo gedit /etc/dhcp/dhcpd.conf把
- option domain-name "example.org";
- option domain-name-servers ns1.example.org, ns2.example.org;
option domain-name "example.org"; option domain-name-servers ns1.example.org, ns2.example.org;改为
- option domain-name "example.org";
- option domain-name-servers 8.8.8.8, 114.114.114.114;
option domain-name "example.org"; option domain-name-servers 8.8.8.8, 114.114.114.114;参考
- #subnet 10.254.239.32 netmask 255.255.255.224 {
- # range dynamic-bootp 10.254.239.40 10.254.239.60;
- # option broadcast-address 10.254.239.31;
- # option routers rtr-239-32-1.example.org;
- #}
#subnet 10.254.239.32 netmask 255.255.255.224 { # range dynamic-bootp 10.254.239.40 10.254.239.60; # option broadcast-address 10.254.239.31; # option routers rtr-239-32-1.example.org; #}改成
- subnet 192.168.201.0 netmask 255.255.255.0 {
- range dynamic-bootp 192.168.201.100 192.168.201.150;
- option broadcast-address 192.168.201.255;
- option routers 192.168.201.1;
- }
subnet 192.168.201.0 netmask 255.255.255.0 { range dynamic-bootp 192.168.201.100 192.168.201.150; option broadcast-address 192.168.201.255; option routers 192.168.201.1; }注意:这里192.168.201.0不能写成192.168.201.1
启动dhcp服务器
启动前先配置网卡的IP和子网掩码
- sudo ifconfig wlan0 192.168.201.1 netmask 255.255.255.0 up
sudo ifconfig wlan0 192.168.201.1 netmask 255.255.255.0 up重启DHCP服务器
- sudo /etc/init.d/isc-dhcp-server restart
sudo /etc/init.d/isc-dhcp-server restart如果报错,用cat命令打印系统日志
check syslog for diagnostics.
- cat /var/log/syslog
cat /var/log/syslog最后发现INTERFACES="wlan0"写成了"waln0"
三.iptables配置转发规则
配置转发前需要打开linux转发功能
临时改变,重启后恢复
- sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -w net.ipv4.ip_forward=1文件位于/etc/sysctl.conf
#清除所有规则
- sudo iptables -F
sudo iptables -F#转发到eth0网卡
- sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE#查看转发规则
- sudo iptables -L
sudo iptables -L
附:
1.关于启动hostapd报错的进一步说明
报错
- Configuration file: /etc/hostapd.conf
- nl80211: Could not configure driver mode
- nl80211 driver initialization failed.
- hostapd_free_hapd_data: Interface wlan0 wasn't started
Configuration file: /etc/hostapd.conf nl80211: Could not configure driver mode nl80211 driver initialization failed. hostapd_free_hapd_data: Interface wlan0 wasn't started最终的解决方案
https://wiki.archlinux.org/index.php/Software_Access_Point#NetworkManager_is_interfering
最下面
NetworkManager is interfering
hostapd may not work, if the device is managed by NetworkManager. You can mask the device:
/etc/NetworkManager/NetworkManager.conf
[keyfile] unmanaged-devices=mac:<hwaddr>大致意思是放弃NetworkManager对无线热点网卡的管理,具体做法是在/etc/NetworkManager/NetworkManager.conf最后添加
[keyfile]
unmanaged-devices=mac:00:87:36:08:01:c6
mac:后面是你的无线网卡mac地址
然后重启NetworkManager
具体操作如下
打开/etc/NetworkManager/NetworkManager.conf
- sudo gedit /etc/NetworkManager/NetworkManager.conf
sudo gedit /etc/NetworkManager/NetworkManager.conf添加
- [keyfile]
- unmanaged-devices=mac:00:87:36:08:01:c6
[keyfile] unmanaged-devices=mac:00:87:36:08:01:c6保存,其中mac地址可以通过ifconfig命令查出来
重启NetworkManager
- sudo service network-manager stop;sudo service network-manager start
sudo service network-manager stop;sudo service network-manager start
经过N次测试上面的更改方法不靠谱。应该在/etc/NetworkManager/nm-system-settings.conf 这个文件中更改才能生效
具体方法如下
- sudo gedit /etc/NetworkManager/nm-system-settings.conf
sudo gedit /etc/NetworkManager/nm-system-settings.conf添加
- [keyfile]
- unmanaged-devices=mac:00:87:36:08:01:c6
[keyfile] unmanaged-devices=mac:00:87:36:08:01:c6并且将
- [ifupdown]
- managed=true
[ifupdown] managed=true改为
- [ifupdown]
- managed=false
[ifupdown] managed=false保存
在官方给出的文档中nm-system-settings.conf和NetworkManager.conf的作用/格式是一样的,并且nm-system-settings.conf是属于过时的,已经不建议使用了,但是最后测试发现改未托管的设备只能通过nm-system-settings.conf这个文件来改,NetworkManager.conf添加和删除都是一样的结果。如果想还原状态,把nm-system-settings.conf改回去就行了。
2.启动脚本
再顺便写个启动脚本吧,shell刚开始用,不足之处多多指教
输入命令
- sudo gedit /usr/bin/myap
sudo gedit /usr/bin/myap编写以下内容保存
- #! /bin/sh
- #设置默认转发的网卡eth0
- defautIface=eth0
- #从路由表查询当前使用外网的网卡,如果有讲数据转发到这个网卡,如果没有,默认转发到eth0
- result=`netstat -r|grep default|awk '{print $8}'`
- if [ "$result" = "" ]
- then
- echo 当前没有使用外网的网卡,数据默认转发到$defautIface网卡上
- else
- defautIface=$result
- echo 当前使用外网的网卡$result,数据转发到$defautIface网卡上
- fi
- #关闭hostapd这个进程
- killall hostapd
- #运行hostapd这个进程
- hostapd -B /etc/hostapd.conf
- #配置dhcp服务器
- #启动前先配置网卡的IP和子网掩码
- ifconfig wlan1 192.168.201.1 netmask 255.255.255.0 up
- #重启DHCP服务器
- sudo /etc/init.d/isc-dhcp-server restart
- #iptables配置转发规则
- #配置转发前需要打开linux转发功能
- #临时改变,重启后恢复
- sudo sysctl -w net.ipv4.ip_forward=1
- #iptables转发规则
- iptables -F
- iptables -X
- iptables -t nat -F
- iptables -t nat -X
- iptables -t nat -A POSTROUTING -o $defautIface -j MASQUERADE
#! /bin/sh #设置默认转发的网卡eth0 defautIface=eth0 #从路由表查询当前使用外网的网卡,如果有讲数据转发到这个网卡,如果没有,默认转发到eth0 result=`netstat -r|grep default|awk '{print $8}'` if [ "$result" = "" ] then echo 当前没有使用外网的网卡,数据默认转发到$defautIface网卡上 else defautIface=$result echo 当前使用外网的网卡$result,数据转发到$defautIface网卡上 fi #关闭hostapd这个进程 killall hostapd #运行hostapd这个进程 hostapd -B /etc/hostapd.conf #配置dhcp服务器 #启动前先配置网卡的IP和子网掩码 ifconfig wlan1 192.168.201.1 netmask 255.255.255.0 up #重启DHCP服务器 sudo /etc/init.d/isc-dhcp-server restart #iptables配置转发规则 #配置转发前需要打开linux转发功能 #临时改变,重启后恢复 sudo sysctl -w net.ipv4.ip_forward=1 #iptables转发规则 iptables -F iptables -X iptables -t nat -F iptables -t nat -X iptables -t nat -A POSTROUTING -o $defautIface -j MASQUERADE修改/usr/bin/myap权限:
- sudo chmod a+x /usr/bin/myap
sudo chmod a+x /usr/bin/myap运行
- sudo myap
sudo myap