须知:该脚本启用AP模式时Station模式会关闭,关闭脚本时又自动连上wifi
1、确定网卡是否有AP模式
1.1确定方法:
使用指令iw list ,找到下面这一部分,有看到如下所示有AP被列出来,说明设置AP模式
Supported interface modes:
* IBSS
* managed
* AP
* AP/VLAN
* monitor
* P2P-client
* P2P-GO
* P2P-device
iw list
2.使用hostapd、dnsmasq配置
2.1软件安装
sudo apt-get install hostapd dnsmasq
2.2hostapd文件编写
sudo gedit /etc/hostapd/hostapd.conf
编写内容如下:其中ssid和wpa_passphrase分别是wifi名称和wifi密码,记得改成自己的,其它的可以根据需求自行更改。
interface=wlan0
driver=nl80211
ssid=Alang
channel=6
auth_algs=1
hw_mode=g
ignore_broadcast_ssid=0
wpa=3
wpa_passphrase=987456321
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP#interface 参数定义了无线接口的名称
#driver 参数定义了使用的驱动程序
#ssid 参数定义了无线网络的名称
#channel 参数定义了网络所在的频道
#auth_algs 参数定义了用于身份验证的算法
#hw_mode 参数定义了硬件模式
#ignore_broadcast_ssid 参数决定是否忽略广播的 SSID
#wpa 参数定义了是否使用 WPA 加密
#wpa_passphrase 参数定义了 WPA 的密码
#wpa_key_mgmt 参数定义了 WPA 的密钥管理方式
#wpa_pairwise 参数定义了 WPA 的对等加密方式
#rsn_pairwise 参数定义了 RSN 的对等加密方式
2.3修改/etc/dhcp/dhcpd.conf
sudo gedit /etc/dhcp/dhcpd.conf
末尾添加如下内容,用于配置ip地址池,路由网关,dns等
subnet 192.168.20.0 netmask 255.255.255.0
{
range 192.168.20.2 192.168.20.10;
option routers 192.168.20.1;
option domain-name-servers 192.168.20.1,114.114.114.114,8.8.8.8;
}
这里配置我们的无线网卡ap地址为 192.168.20.1, 连接该热点的可分配ip地址池为 192.168.20.(2~10),dns使用公用和网关ip。
2.4编写服务启动脚本 ap-start.sh
sudo gedit ap-start.sh
添加如下内容:
#!/bin/bash
# 开启内核IP转发
bash -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
# 开启防火墙NAT转发(如果本机使用eth0上网,则把wlan0改为eth0)
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE# 关闭NetworkManager对无线网卡的控制
#nmcli nm wifi off
nmcli device set wlan0 managed no# 设置并启动无线网卡
ifconfig wlan0 192.168.20.1 netmask 255.255.255.0
# 解锁无线设备,可以用rfkill list查看解锁结果.
rfkill unblock wlan#####################################################
#dhcpd.pid start
chmod 777 /var/lib/dhcp/dhcpd.leases
dhcpd wlan0 -pf /var/run/dhcpd.pid
#####################################################
sleep 1s
# 启动dhcpd和hostapd,如果hostapd无法启动请查看日志hostapd.log,查看这两个进程ps -ef|egrep "dhcpd|hostapd"
nohup hostapd /etc/hostapd/hostapd.conf > /var/log/hostapd.log 2>&1 &
dhcpd wlan0 -pf /var/run/dhcpd.pid
ps -ef|head -n1 && ps -ef|egrep "dhcpd|hostapd"
#route add -net 192.168.20.0/24 dev wlan0
route add -net 192.168.20.0 netmask 255.255.255.0 gw 192.168.20.1 dev wlan0#以下是该脚本的直接翻译
#!/bin/bash:这是一个shebang,告诉系统用bash来执行这个脚本。
#bash -c "echo 1 > /proc/sys/net/ipv4/ip_forward":开启IP转发,使得通过该机器的数据包可以被转发到其他网络。
#iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE:设置防火墙规则,使得从wlan0接口出去的数据包进行源地址伪装(NAT)。
#nmcli device set wlan0 managed no:关闭NetworkManager对wlan0的管理。。
#ifconfig wlan0 192.168.30.1 netmask 255.255.255.0:为wlan0设置IP地址和子网掩码。
#rfkill unblock wlan:解锁无线设备。
#chmod 777 /var/lib/dhcp/dhcpd.leases:更改dhcpd.leases文件的权限。
#dhcpd wlan0 -pf /var/run/dhcpd.pid:启动dhcpd服务,为连接到wlan0的设备分配IP地址。
#nohup hostapd /etc/hostapd/hostapd.conf > /var/log/hostapd.log 2>&1 &:以后台方式启动hostapd服务,提供无线接入点功能,并将日志输出到hostapd.log文件。
#dhcpd wlan0 -pf /var/run/dhcpd.pid:再次启动dhcpd服务。
#ps -ef|head -n1 && ps -ef|egrep "dhcpd|hostapd":查看dhcpd和hostapd进程的状态。
#route add -net 192.168.20.0/24 dev wlan0:手动添加路由表项,指定192.168.20.0/24网络的数据包通过wlan0接口路由。
编写完保存即可启动
使用命令:
sudo bash ap-start.sh
2.5编写关闭脚本 ap-stop.sh
sudo gedit ap-stop.sh
添加以下内容:
#!/bin/bash
killall hostapd dhcpd
bash -c "echo 0 > /proc/sys/net/ipv4/ip_forward"
#ifconfig wlan0 down
nmcli device set wlan0 managed yes
#restart network
################################################
sudo systemctl restart NetworkManager
################################################
使用命令:
sudo bash ap-stop.sh