首先介绍一下系统环境,笔者用的是树莓派2B (Raspberry Pi 2 Model B)系统是 Arch Linux。另外购得了一个无线网卡,Tenda W311M,RT5370 芯片,支持 Soft-AP。无线网卡是否支持 AP,这点大家购买前一定要确认一下。

​ 大家知道,配置无线 AP 有很多种方法,本文使用 hostapd + dnsmasq 进行配置,如果你不太习惯这两个工具,也可以使用其他方案。

一、确认无线网卡支持 AP 模式

1.执行 lsusb 查看接入的 USB 信息。
#  @ RaspberryPi in ~ [3:36:02]
$ lsusb
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
2.执行 iw list 查看无线网卡支持的模式。(如果没有请使用 pacman 安装)
$ iw list
........
        Supported interface modes:
                 * IBSS
                 * managed
                 * AP
                 * P2P-client
                 * P2P-GO
.........

请注意 supported interface modes 这一项:

如果包含 AP 则说明是网卡是支持的,可以继续下一步,否则说明网卡硬件不支持或者驱动不支持。

如果硬件不支持那就没有办法,如果只是驱动不支持可以 Google 相关的驱动,再此就不赘述了。

二、配置无线热点

1.安装hostapd
$ sudo pacman -Sy hostapd
$ sudo yum install -y hostapd
2.新建(修改) hostapd.conf , 检查以下配置
$ sudo vi /etc/hostapd/hostapd.conf
# 无线网卡名称,这里应该与无线网卡对应
interface=wlan0
driver=nl80211
# WIFI 名称
ssid=Pi.Server
# 模式:a/b/g
hw_mode=g
# 信道
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
# WIFI 密码
wpa_passphrase=**********
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
# 最大支持的 station 数量
max_num_sta=5
logger_stdout=-1
logger_stdout_level=2
3.启动ap
$ sudo systemctl start hostapd

三、配置DNS和DHCP服务器

1.为无线网卡配置 IP 地址
$ sudo ifconfig wlan 10.1.1.1/24

或者

$ sudo ip link set up dev wlan0
$ sudo ip addr add 192.168.0.1/24 dev wlan0
2.安装dnsmasq
$ sudo pacman -Sy dnsmasq
$ sudo yum install -y dnsmasq
3.修改 dnsmasq.conf
$ sudo vim /etc/dnsmasq.conf
# dnsmasq 的 dns 配置
resolv-file=/etc/resolv.dnsmasq.conf
# 无线网卡设备名
interface=wlan0
# ipconfig 配置的无线网卡地址
listen-address=10.1.1.1
bind-interfaces
dhcp-range=10.1.1.100,10.1.1.150,12h

# Google DNS
server=8.8.8.8
server=8.8.4.4
4.修改(新建) resolv.dnsmasq.conf
$ sudo vim /etc/resolv.dnsmasq.conf

增加如下内容:

nameserver 127.0.0.1
5.启动DNS
$ sudo systemctl start dnsmasq

四、启用包转发和NAT

1.检查当前 转发设置
$ sudo sysctl -a | grep forward
2.临时启用包转发
$ sudo sysctl net.ipv4.ip_forward=1
3.编辑 /etc/sysctl.d/30-ipforward.conf 使每次启动时生效
$ sudo vi  /etc/sysctl.d/30-ipforward.conf 

修改或新增如下项:

net.ipv4.ip_forward=1 net.ipv6.conf.default.forwarding=1 net.ipv6.conf.all.forwarding=1

4.启用NAT
$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
$ sudo iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
$ sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
5.导出 NAT 规则至文件
iptables-save > /etc/iptables/ap.rules

五、编后

原文在这

如果网速不稳定,请确认是否安装了 haveged

上面配置完成后,每次重启后运行以下脚本即可:

ifconfig wlan0 10.1.1.124 systemctl start dnsmasq iptables-restore < /etc/iptables/ap.rules sysctl net.ipv4.ip_forward=1 systemctl start hostapd