树莓派3B+ 无线路由(hostapd)

树莓派3B+ 无线路由(hostapd)


该教程只是将Wi-Fi设置成热点模式,非安装OpenWrt教程。


1.显示无线模块设备

在新的raspian版本(Stretch基于Debian9),接口配置会自动启动wlan0设备,而且会默认处理dhcpcd。我们需要停止它自动开启,并配置一个静态IP地址。

参考:https://github.com/harryallerston/RPI-Wireless-Hotspot

对于旧版系统(Jessie基于Debian8),请转至这里:https://elinux.org/RPI-Wireless-Hotspot

// 现在打开接口配置文件
sudo vim /etc/network/interfaces
// 添加如下内容

# 允许热插拔
allow-hotplug wlan0  
# 手动管理 wlan0
iface wlan0 inet manual

// 现在编辑dhcpcd
sudo vim /etc/dhcpcd.conf
// 添加如下行
interface wlan0  
    static ip_address=192.168.0.1/24

2.安装并配置hostapd

hostapd 是 Host Access Point 守护进程,提供对基于 Linux 的无线接入点的强 WPA2 加密和身份验证。配置 hostapd 非常简单,它支持 WPA2-Personal 和 Enterprise,提供了对 WPA2-Personal 的独特修改,可让管理它变得更复杂或更简单。

// 安装hostapd
sudo apt-get install -y hostapd
// 配置hostapd
sudo vim /etc/hostapd/hostapd.conf
// 基本信息
# 无线网卡的名称
interface=wlan0
# 网卡对应的驱动名  
driver=nl80211
# 无线网络的名称是Pi-wifi  
ssid=Pi-wifi
# 无线路由器工作模式为802.11g(2.4G)  
hw_mode=g
# 无线网卡使用的信道
channel=10
# 支持 802.11n
ieee80211n=1
# 采用WPA2配置  
wpa=2
# 无线网络密码是123456789  
wpa_passphrase=123456789  
# 认证方式为WPA-PSK  
wpa_key_mgmt=WPA-PSK
# 开启 WMM
wmm_enabled=1
# 开启 40MHz channels 和 20ns guard interval
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]
# 接受所有 MAC 地址
macaddr_acl=0
# 使用 WPA 认证
auth_algs=1
# 需连接者知道ssid
ignore_broadcast_ssid=0
# 使用 WPA2
wpa=2
# 使用预先共享的 key
wpa_key_mgmt=WPA-PSK
# 使用 AES, 而非 TKIP
rsn_pairwise=CCMP

// 配置hostapd为自启动模式
sudo vim /etc/default/hostapd
// 找到“#DAEMON_CONF=”,去掉#注释,补全为
DAEMON_CONF="/etc/hostapd/hostapd.conf"

// 完成配置,检查是否配置成功
sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf
// 如果最后两行出现了如下,则为正常
wlan0: interface state UNINITIALIZED->ENABLE
wlan0: AP-ENABLED

// 重启hostapd
sudo service hostapd restart

3.安装并配置dnsmasq

dnsmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络,它提供了DNS功能和可选择的DHCP功能。主用适用于NAT的家庭网络,用modem,cable modem,ADSL设备连接到因特网。

// 配置
sudo vim /etc/dnsmasq.conf

// 添加如下内容
interface=wlan0
bind-interfaces
server=218.2.2.2
server=114.114.114.114
server=8.8.8.8
domain-needed
bogus-priv
dhcp-range=192.168.0.2,192.168.0.254,12h

4.设置IPv4转发

完成以上操作后,你会发现即使你连接上了Wi-Fi,可无法上网,因为我们连接到无线网卡wlan0上,设备传输进来的数据并没有转发到 eth0 上。因此,我们需要配置相应的IPv4的转发规则,来打通数据的传输。

// 打开sysctl.conf文件
sudo vim /etc/sysctl.conf
// 去掉“#net.ipv4.ip_forward=1”前的#注释

// 立即生效
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
// 在WiFi的配置接口eth0接口wlan0之间建立NAT,分享有线网到无线上

#sudo iptables -A INPUT -p tcp --dport 139 -j ACCEPT
#sudo iptables -A OUTPUT -p tcp --sport 139 -j ACCEPT
#sudo iptables -A INPUT -p tcp --dport 445 -j ACCEPT
#sudo iptables -A OUTPUT -p tcp --sport 445 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

// 将这些规应用于我们的每一次启动PI
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
sudo vim /etc/rc.local
// 添加如下行,在 exit 0 之前
iptables-restore < /etc/iptables.ipv4.nat

5.重启服务

sudo service dhcpcd restart
sudo service hostapd start
sudo service dnsmasq start
sudo reboot

对于dnsmasq经常会出现问题,原因是wlan0还没热启动完成,而dnsmasq先启动了,所以出现了启动失败的现象。
这里的解决方案就是采用延时启动。

// 打开管理启动
sudo vim /etc/rc.local
// 添加如下行,在 exit 0 之前
sudo bash /etc/dnsmasq_delayinit.sh

// 然后编辑dnsmasq_delayinit.sh
sudo vim /etc/dnsmasq_delayinit.sh
#!/bin/sh
sleep 10
sudo service dnsmasq restart

// 再设置成可执行
sudo chmod +x /etc/dnsmasq_delayinit.sh

现在就可以愉快的上网了。只是在树莓派开机后要稍微等一下。

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值