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
编辑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
----------------------------分割线-----------------------------

部分教程采用下列方式启动
测试配置是否可用:

sudo hostapd -d /etc/hostapd/hostapd.conf
启动hostapd:

sudo /etc/rc.d/hostapd start
但是笔者测试不好用
----------------------------分割线--------------------------

启动hostapd

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
解决方法

#改变NetworkManager里的状态,关闭wifi,同时软锁定

sudo nmcli nm wifi off 
#启用wifi设备,不同于网络状态中的启用wifi(后者改变NetworkManager里的状态)
sudo rfkill unblock wlan
一般这个情况下可以启动hostapd了

sudo hostapd -B /etc/hostapd.conf
但是如果是重新开启热点的话还是会报错
原因是hostapd进程占用了这个网卡,关闭这个进程就好了
sudo killall hostapd
再运行
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

二.安装配置dhcp服务器

这里用的是isc-dhcp-server,你也可以使用其它的dhcp服务器程序

安装isc-dhcp-server

sudo apt-get install isc-dhcp-server
编辑/etc/default/isc-dhcp-server指定网卡为wlan0
sudo gedit /etc/default/isc-dhcp-server

INTERFACES=""
改为
INTERFACES="wlan0"
编辑/etc/dhcp/dhcpd.conf修改租约DNS等信息/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 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 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
重启DHCP服务器
sudo /etc/init.d/isc-dhcp-server restart
如果报错,用cat命令打印系统日志
check syslog for diagnostics.
cat /var/log/syslog
最后发现INTERFACES=" wlan0"写成了"waln0"

三.iptables配置转发规则

配置转发前需要打开linux转发功能
临时改变,重启后恢复

sudo sysctl -w net.ipv4.ip_forward=1
文件位于/etc/sysctl.conf
#清除所有规则
sudo iptables -F
#转发到eth0网卡
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
#查看转发规则
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
最终的解决方案

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
添加

[keyfile]
unmanaged-devices=mac:00:87:36:08:01:c6
保存,其中mac地址可以通过ifconfig命令查出来

重启NetworkManager

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
添加
[keyfile]
unmanaged-devices=mac:00:87:36:08:01:c6
并且将

[ifupdown]
managed=true
改为

[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
编写以下内容保存

#! /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 myap


你可能感兴趣的:(ubuntu,wifi)