linux通过无线网卡建立无线AP

在linux下建立无线AP的方法有多种,不同的发行版也会在系统内置一些基本的功能来方便的建立无线AP。下面介绍两种方法来在系统中建立无线AP。

一、ubuntu下使用系统自带的工具建立无线热点的方法。


具体步骤如下:

1. 点击有上角网络标志,点开编辑链接。

2. 选择 WiFi ,添加一个网络。

3.设置这个网络 做如下编辑:

  • 编辑wifi的名字:SSID,
  • 选择 Hotspot (热点)模式.
  • 在 Wifi Security(wifi安全性) 页, 选择 WPA & WPA2 Personal(WPA & WPA2 个人)选项并输入你要创建的wifi密码,8位以上.
  • 在 IPv4 设置页面, 选择 “Share to other computers”(与其他计算机共享)

4. 点击 save ,然后再点击右上角网络选项中的 Connect to Hidden Wi-Fi network (连接到隐藏的WIFI网络),在连接选择框里,选择你刚刚创建的网络。


5.完成,你可以用手机等连接了


最后,如果出现“Connection 'xxx' is not available on the device wlp3s0 at this time”问题

主要因为你使用了Broadcom Corporation网卡驱动,换过来就好了。 解决方案:系统设置-->软件和更新-->附加驱动-->将Broadcom Corporation....那一项选择“不使用设备”-->应用更改-->重新启动。

此教程出处:ubuntu 16.04 设置位wifi热点 方法(手机可链接)亲测可用

如果不能连接或者出现问题请参考:ubunt14.04无线AP设置方法

其它系统下如何用系统自带工具建立AP,请自行百度。


二、这种方法比较烦琐一些,但是它能让你透析很多的网络知识,并且在调试各个网络配置方面进入到细微处。

原理上一共分三步:

第一步、使用hostapd建独立的无线AP热点。
第二步、建立dhcp服务器,使连接到AP热点的设备能自动获得IP地址。
第三步、开启NAT功能让AP能借助本地网络连接外网。

1、使用hostapd建立热点。

没有hostapd就安装一下:(ubuntu等debian类系统命令,其它系统命令自查)

sudo  apt   install    hostapd

使用如下命令编辑配置文件

gedit   /etc/hostapd/hostapd.conf  

输入如下内容:

driver=nl80211
ssid=37lab #这里是你建立ap的名称,自己起一个。不要用汉字最好。
channel=10
interface=wlan0 #这个地方不一定是wlan0,你要看你一下你系统里你的无线网卡叫什么名wpa=3
wpa_passphrase=12345678 #这里输入你要建立的无线网的连接密码。8位及以上。
wpa_key_mgmt=WPA-PSK #区分大小写
wpa_pairwise=TKIP #区分大小写

保存并退出编辑。

使用如下命令来启动建立的热点。

sudo   hostapd    /etc/hostapd/hostapd.conf -B(-B用于后台运行,可不加)

如果启动失败大部分原因是因为此时无线网卡被NetworkManager接管了。 编辑一下/etc/netword/interfaces文件,在其中加入无线网卡的配置来取消NetworkManager的管理即可。

/etc/NetworkManager/NetworkManager.conf中使用下述配置,你可以快速轻松地按照MAC或者接口名忽略设备。

[keyfile]
unmanaged-devices=mac:00:22:68:1c:59:b1;mac:00:1E:65:30:D1:C4;interface-name:eth0

填入上述内容后,使用命令sudo systemctl restart NetworkManager来重启NetworkManager服务。

2、建立dhcp服务器,来为连接到AP的设备来自动分配IP地址。

使用如下命令安装dhcp服务程序

sudo apt install isc-dhcp-server

建立如下配置文件:dhcpd_my.conf

authoritative;
subnet 10.5.5.0 netmask 255.255.255.0 {
 range 10.5.5.3 10.5.5.37;               //这个范围表示你可以连接的终端数

 option domain-name-servers 8.8.8.8;    //这里填DNS服务器地址,可以是你家路由器的IP。

 option domain-name "internal.example.org";

 option routers 10.5.5.1; //设置无线网卡的IP地址

 option broadcast-address 10.5.5.255;

 default-lease-time 600;

 max-lease-time 7200;

}

保存退出。

用如下命令为无线网卡添加地址。

sudo ip addr add  10.5.5.1/24 dev  wlan0    (不一定wlan0,看你的无线网卡名称)

用如下命令启动DHCP服务

sudo dhcpd -cf ./dhcpd_my.conf -d

如果有错误一般是多了一个/var/run/dhcpd.pid文件,把这个文件用rm命令删除即可。

3、开启NAT功能和路由转发(eth0是你能连外网的网卡,wlan0是你建立AP的网卡,根据自己情况调整)

使用如下五条命令开启路由转发和NAT

sudo sysctl  -w net.ipv4.ip_forward=1

加上如下几条规则:
sudo iptables -P FORWARD DROP
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state STABLISHED,RELATED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

也可直接只使用一条:
sudo iptables -t nat -A POSTROUTING -s 10.5.5.1/24 -o eth0 -j MASQUERADE




补充一点:

1、我们可以使用dnsmasq来做dhcp服务器,安装dnsmasq然后使用如下命令开启dhcp服务:

sudo dnsmasq -i wlan0 --dhcp-range=10.5.5.100,10.5.5.200,2h   #--dhcp-range选项除了指定ip分配范围,更是一个打开dhcp功能的开关!2h表示ip租期为2小时

执行后显示(必须加上-d选项才能看到)


2、使用nftables的同学可以这样设置:

建立规则文件nftable_nat文件内容如下:

table ip nat {
  chain prerouting {
    type nat hook prerouting priority 0;
  }
  chain postrouting {
    type nat hook postrouting priority 0;
    oifname "eth0" masquerade
  }
}

然后使用nft -f nftable_nat命令导入即实现的源路由nat。如果使用命令建立的话命令如下;

nft  add table nat
nft add chain nat prerouting  { type nat hook prerouting priority 0 \; }
nft add chain nat postrouting  { type nat hook postrouting priority 0 \; }
nft add rule nat postrouting oifname "eth0" masquerade

注意刚安装的nftables程序要重启才能加载nat链。

编辑于 2018-11-08