树莓派开启wifi热点


树莓派搭建WiFi热点

有幸入手Rpi 4B,结合之前的捣腾经历记录一二

一、下载并烧录系统

进入Linux系统 然后通过 fdisk -l 命令查看内存卡挂载点,通常情况下是sdb或者sdd 此处务必谨慎,因为选择错误的挂载点会导致对应的磁盘数据被覆盖。同时为了系统的流畅 应该使用高速内存卡。例如三星EVO Plus

dd if =kali-linux-2020.1a-rpi3-nexmon-64.img of=/dev/sdd bs=4M #此命令会把镜像文件烧录进系统

烧录完毕,等待读卡器停止闪烁,弹出设备后将内存卡插入树莓派,连接网线并上电启动。第一次上电启动需要等待一段时间,树莓派会将内存卡的剩余空间扩容,以便使用。通常需要5-10min,通过观察树莓派指示灯(绿色)来确定扩容的进度。当绿色指示灯熄灭并且不再闪烁时说明内存卡扩容完毕。此时将树莓派断电并再次上电启动,即可正常使用。

二、安装基础软件

进入路由器配置,找到树莓派的IP地址。 通过ssh登陆树莓派。 电脑端推荐使用putty,手机端推荐JuiceSSH。

1、更改源并更新系统。

root@kali:~# nano /etc/apt/sources.list    #修改如下  Ctrl+x 退出 y保存

# deb http://http.kali.org/kali kali-rolling main non-free contrib
# deb-src http://http.kali.org/kali kali-rolling main non-free contrib   #注释官方源
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib   #替换为中科大镜像源
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib

更改源可以使系统就近获取更新,节省下载更新所需要的时间。

root@kali:~# apt-get update   #获取最新软件列表
root@kali:~# apt-get upgrade   #仅更新软件 
root@kali:~# reboot   #重启系统,使更新完全生效。

apt-get upgradeapt-get dist-upgrade的不同之处是:前者仅更新软件,如果发现某个软件的依赖产生变化,则不会更新该软件.而后者则会连同依赖一起更新,期间可能会卸载不需要的依赖项.

2、安装中文输入法和WiFi搭建软件

root@kali:~# apt-get install fcitx fcitx-googlepinyin dnsmasq hostapd

3、修改系统语言为中文

root@kali:~# apt-get install fonts-wqy-microhei   #安装中文字体
root@kali:~# dpkg-reconfigure locales   #重新配置区域设置

弹出的界面中 空格选中 zh_CN GB2312、zh_CN.GB18030、zh_CN.GBK、zh_CN.UTF-8 ,Table键选择 OK 回车后再选中zh_CN.UTF-8 确认后稍等片刻系统即完成配置。 这时候系统里面的中文就能正常显示了。 如果还存在乱码等现象重启下树莓派即可。

4、校准区域和时间

root@kali:~# systemctl enable ntp.service     #设置ntp服务开机启动
root@kali:~# systemctl restart ntp.service     #重启ntp服务
root@kali:~# dpkg-reconfigure tzdata     #配置区域和时区
root@kali:~# timedatectl set-ntp true     #启用ntp自动校时
root@kali:~# ntpd -s -d     #校准时间
root@kali:~# date     #查看时间是否校准成功

选中地区Asia时区shanghai以便树莓派可以获取精确的时间。如果经过上述操作,date仍然显示错误的时间那就需要修改ntp配置文件,增加本地ntp服务器。随后重启ntp服务并更新时间

树莓派时间不正确会在更新时提示Relese文件过期,导致无法更新。

E: Release file for http://http.kali.org/kali/dists/kali-rolling/InRelease is not valid yet (invalid for another 40d 5h 23min 33s). Updates for this repository will not be applied.
E: http://mirrors.ustc.edu.cn/kali/dists/kali-rolling/InRelease 的 Release 文件已经过期(已经过期了 40天 5小时 23分 33秒)。该仓库的更新将不会应用。

三、配置dnsmasq和hostapd

dnsmasq给接入WiFi的设备提供DHCP地址分配和DNS域名解析服务,hostapd驱动无线网卡发射WiFi信号。

1、配置dnsmasq

root@kali:~# nano /etc/dnsmasq.conf  #编辑dnsmasq配置文件

配置选项如下:

#这个文件包含外网的DNS服务器地址
resolv-file=/etc/resolv.conf
#强制把所有后缀为.net的域名解析到地址 127.0.0.1
#address=/.net/127.0.0.1
#dnsmasq服务监听的网卡
interface=wlan0
#dnsmasq服务监听的地址
listen-address=192.168.3.1
#DHCP服务提供的可用IP区间以及有效期
dhcp-range=192.168.3.6,192.168.3.99,12h
#接入设备的网关地址
dhcp-option=3,192.168.3.1
#接入设备的DNS服务器地址
dhcp-option=6,192.168.3.1

通过对dnsmasq.conf文件进行配置,我们可以让接入的设备自动弹出网页。

原理如下:

设备接入热点后会自动查询是否可以连接网络 通常这种查询是通过HTTP访问某个地址,不同厂商使用的地址不同。一旦获取到指定的反馈内容即可判断此网络可以访问外网。问题就出在这里,当dnsmasq把地址强制解析到本地后,如果本地web服务没有请求所需要的资源 就会返回404. 此时只需要在server(apache、nginx等)上配置404地址,终端设备便会以为此网络需要认证,从而自动打开404页面。

2、配置hostapd

root@kali:~# cp /usr/share/doc/hostapd/examples/hostapd.conf /etc/hostapd/
root@kali:~# nano /etc/hostapd/hostapd.conf

配置选项如下:

#树莓派4B 2.4GWiFi hostapd.conf
interface=wlan0
driver=nl80211
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
#WiFi名字
ssid=wifi
hw_mode=g
#不同国家和地区的频道以及发射功率不同
#ieee80211d=1
#country_code=CN
channel=6
beacon_int=100
dtim_period=2
max_num_sta=255
rts_threshold=-1
fragm_threshold=-1
macaddr_acl=0
auth_algs=3
# 如果需要隐藏热点 修改ignore_broadcast_ssid=1
ignore_broadcast_ssid=0
wmm_enabled=1
wmm_ac_bk_cwmin=4
wmm_ac_bk_cwmax=10
wmm_ac_bk_aifs=7
wmm_ac_bk_txop_limit=0
wmm_ac_bk_acm=0
wmm_ac_be_aifs=3
wmm_ac_be_cwmin=4
wmm_ac_be_cwmax=10
wmm_ac_be_txop_limit=0
wmm_ac_be_acm=0
wmm_ac_vi_aifs=2
wmm_ac_vi_cwmin=3
wmm_ac_vi_cwmax=4
wmm_ac_vi_txop_limit=94
wmm_ac_vi_acm=0
wmm_ac_vo_aifs=2
wmm_ac_vo_cwmin=2
wmm_ac_vo_cwmax=3
wmm_ac_vo_txop_limit=47
wmm_ac_vo_acm=0
ieee80211n=1
#要求客户端支持HT模式 否则拒绝连接
require_ht=1
#HT模式 用于提高WiFi速率 通过iw list 命令查看支持的模式
ht_capab=[DSSS_CCK-40][SHORT-GI-20]
eapol_key_index_workaround=0
eap_server=0
own_ip_addr=127.0.0.1
wpa=2
# 如需要设置开放热点 需设置wpa=0 同时注释接下来的四行配置内容
#WiFi密码  要求至少8位
wpa_passphrase=12345678
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
rsn_pairwise=CCMP

附:腾达U12 2.4g和5G WiFi hostapd配置文件 Tenda_U12_2.4G_hostapd.conf Tenda_U12_5G_hostapd.conf

如果开启hostapd后能看到wifi信号但是点击连接无反应,则需要检查ht_capab和vht_capab配置选项。该选项要求客户端必须支持对应的模式,否则不予连接。

3、修改hostapd服务默认配置文件

root@kali:~# nano /etc/default/hostapd     #去掉DAEMON_CONF前面的注释并指向hostapd.conf文件
DAEMON_CONF="/etc/hostapd/hostapd.conf"
root@kali:~# nano /etc/init.d/hostapd     #修改DAEMON_CONF选项如下
DAEMON_CONF=/etc/hostapd/hostapd.conf

4、配置Network Manager 和network

Linx存在两套网络管理软件 分别位于/etc/network/etc/NetworkManager,其中NetworkManager是桌面右上角的网络管理软件,服务名称是 network-managernetwork为系统原生网络管理系统,支持无桌面环境,服务名称是 networking。两套软件相互配合共同为linux提供网络服务。

1、)配置NetworkManager

# nano /etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifupdown,keyfile

[ifupdown]
managed=true   #如果为false,则NetworkManager不托管网卡

[keyfile]
unmanaged-devices=interface-name:wlan0     #不托管wlan0以便让网卡闲置下来等待hostapd的调用
# unmanaged-devices=mac:<hwaddr>     #不托管的网卡MAC  这里不建议使用该选项 因为Kali会在某些情况下自动更换网卡MAC地址。

2、)配置network

# nano /etc/network/interfaces
auto lo
iface lo inet loopback

auto wlan0
allow-hotplug wlan0     #设置wlan0允许热插拔
iface wlan0 inet static     #设置wlan0为固定地址
address 192.168.3.1
netmask 255.255.255.0

#下边示例会让wlan0自动连接到名字为rpi密码为12345678的WiFi
# auto wlan0
# allow-hotplug wlan0
# iface wlan0 inet dhcp
# wpa-ssid rpi
# wpa-psk 12345678

hostapd正常工作的前提是使用的无线网卡未被其他程序占用,处于空闲状态。

四、检查并开启hostapd

1、重启树莓派后检查network中wlan0配置是否生效

# 通过`ifconfig`命令查看wlan0已获取到指定的IP地址

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.3.1  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::522b:73ff:fed5:5a80  prefixlen 64  scopeid 0x20<link>
        ether 50:2b:73:d5:5a:80  txqueuelen 1000  (Ethernet)

2、检查NetworkManage配置是否生效

本例5GWiFi配置使用的是TendaU12网卡,此时显示设备未托管,说明NetworkManage配置已生效.

3、检查dnsmasq配置是否生效

root@kali:~# systemctl start dnsmasq
root@kali:~# systemctl status dnsmasq.service
● dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server
     Loaded: loaded (/lib/systemd/system/dnsmasq.service; disabled; vendor preset: disabled)
     Active: active (running) since Fri 2020-02-07 18:30:00 UTC; 3s ago
    Process: 1766 ExecStartPre=/usr/sbin/dnsmasq --test (code=exited, status=0/SUCCESS)
    Process: 1767 ExecStart=/etc/init.d/dnsmasq systemd-exec (code=exited, status=0/SUCCESS)
    Process: 1776 ExecStartPost=/etc/init.d/dnsmasq systemd-start-resolvconf (code=exited, status=0/SUCCESS)
   Main PID: 1775 (dnsmasq)
      Tasks: 1 (limit: 4491)
     CGroup: /system.slice/dnsmasq.service
             └─1775 /usr/sbin/dnsmasq -x /run/dnsmasq/dnsmasq.pid -u dnsmasq -7 /etc/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new --local-service --trust-anchor=.,20326,8,2,e06d44b80b8f1d39a95c0b0d7c6>

Active: actived 说明dnsmasq跑的很欢撒

3、检查hostapd配置文件是否无误

root@kali:~# hostapd -B -d /etc/hostapd/hostapd.conf
...
wlan0: interface state COUNTRY_UPDATE->ENABLED
wlan0: AP-ENABLED
wlan0: Setup of interface done.

Ap-ENABLED 说明hostapd服务启动正常

4、设置开机自动启动WiFi

root@kali:~# systemctl enable hostapd.service
root@kali:~# systemctl enable dnsmasq.service

如果设置hostapd开机启动时提示 Failed to start hostapd.service: Unit hostapd.service is masked. 需要先运行systemctl unmask hostapd.service解除空文件链接。

5、开启内核转发建立转发规则使连接到WiFi的设备可以上网

root@kali:~# echo "1" > /proc/sys/net/ipv4/ip_forward     #临时开启内核转发 重启后失效
root@kali:~# nano /etc/sysctl.conf     #修改配置文件取消ntt.ipv4.ip_forward=1前面的注释 永久启用内核转发
root@kali:~# iptables -A FORWARD -i wlan1 -o eth0 -j ACCEPT     #iptables规则允许数据包转发
root@kali:~# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

文章作者: Rc4x
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Rc4x !