树莓派小巧的体型当然不是为了固定放在桌子上, 更是为了做成可移动的智能设备, 例如智能小车. 当树莓派不在室内的 wifi 下时, 怎样方便地连接上它呢? 于是想要把树莓派变成 wifi 热点, 就能用我们的手机或者笔记本连接它了.
一. 修改 /etc/network/interfaces, 建议把旧的文件备份例如 interfaces-old
# 有线网卡, 普通上网方式
auto eth0
iface eth0 inet dhcp
# 无线网络, 用作 wifi 热点
auto wlan0
iface wlan0 inet static
address 192.168.11.1
netmask 255.255.255.0
gateway 192.168.11.1
192.168.11.0 是热点分配的网段, 可改成自己习惯的. 后面配置还会用到, 前后要一致.
二. 安装 hostapd, udhcpd
$ sudo apt-get install hostapd
$ sudo apt-get install udhcpd
三. 编辑 /etc/default/hostapd, 将#DAEMON_CONF=""修改为DAEMON_CONF="/etc/hostapd/hostapd.conf”
然后添加配置文件 /etc/hostapd/hostapd.conf
interface=wlan0
ssid=RPiWireless
channel=7
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=1234567890
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
ieee80211n=1
hw_mode=g
wmm_enabled=1
ssid 是 wifi 名字, wpa_passphrase 是连接时的密码, 别忘了改成自己的密码.
四. 配置 dhcp 服务. 打开 /etc/udhcpd.conf, 修改几个地方:
start 192.168.11.20 #default: 192.168.0.20
end 192.168.11.254 #default: 192.168.0.254
interface wlan0 #default: eth0
opt dns 192.168.11.1 192.168.8.1 # 192.168.8.1 是我路由器地址
option subnet 255.255.255.0
opt router 192.168.11.1
opt wins 192.168.11.1
option dns 114.114.114.114 # appened to above DNS servers for a total of 3
option domain local
option lease 864000 # 10 days of seconds
最后, 修改 /etc/default/udhcpd, 在 DHCPD_ENABLED=“no" 前面加上注释符#
重启.
到这里, 笔记本已经能连接热点发型指令给树莓派了, 作为操控智能车已经足够了. 但是还不能上网, 还需要配置路由转发.
五. (可选) 配置路由转发规则.
首先打开配置文件/etc/sysctl.conf,去掉net.ipv4.ip_forward=1前面的注释符#, 执行命令sysctl -p 使配置文件生效.
再执行如下命令配置防火墙规则:
$ 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
目前上网的问题解决了. 但是重启之后转发规则就会失效. 为了保证重启有效, 先把规则保存到文件
$ sudo iptables-save > /etc/iptables.rules
然后在 /etc/network/if-pre-up.d 创建一个脚本, 写入
#!/bin/bash
iptables-restore < /etc/iptables.rules
保存后退出. 每次重启脚本被执行加载 iptables 的规则.
后记: 一开始用旧的文章 ad hoc ( 特定网络, 即 ad hoc network, 是一个小型的计算机对计算机的网络. 假设你把树莓派跟笔记本直接用网线连起来, 就相当于建立了一个小型的有线 ad hoc network) 的配置方式, dhcp 服务用的是 isc-dhcp-server , 但总是分配不了 IP, 可能是软件太旧了. 感谢 CE653A, 按照 https://www.cnblogs.com/dgjnszf/p/10807056.html 的步骤最终配置成功.
假如这篇文章对你有所帮助, 请关注我公众号, 发现更多有用的文章