树莓派变身路由器

最近在北海道大学参加HSI项目,由于宿舍没有无线网络,只有网线,而我又不想让笔记本24小时全天候开着当路由器,是时候折腾树莓派了!

因为最新的树莓派3板载了无线网络适配器,所以可以像手机一样开启热点,变身成一个路由器。


安装软件包

需要安装2个软件包

1
sudo apt-get install hostapd dnsmasq

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

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


设置静态IP

需要将无线接口wlan0的IP配置成静态地址
首先让dhcpcd不再管理wlan0,避免设置冲突
修改文件:

1
sudo vi /etc/dhcpcd.conf

在文件开头增加一行:

1
denyinterfaces wlan0

接下来设置wlan0的静态IP,修改文件:

1
sudo vi /etc/network/interfaces

把wlan0相关的内容改成为如下:

1
2
3
4
5
6
7
8
allow-hotplug wlan0
#iface wlan0 inet manual
# wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface wlan0 inet static
address 192.168.8.1
netmask 255.255.255.0
network 192.168.8.0
broadcast 192.168.8.255

192.168.8.1是给树莓派做路由器分配的网关IP,不能与局域网其他路由器网关IP重复,若重复此处可改成其他网关。

重启服务和wlan0

1
2
3
sudo service dhcpcd restart
sudo ifdown wlan0
sudo ifup wlan0

通过ifconfig可以看到wlan0的IP已经被修改

PS:当时本想着让树莓派接入笔记本的热点,然后在笔记本上登录树莓派并配置,但是固定完IP之后就无法连入笔记本的热点了,最后是用手机USB数据线连接树莓派,手机登录树莓派,然后再用笔记本来远程控制手机,把手机屏幕和输入交给笔记本来搞的,别提多蛋疼了。。


配置hostapd

新建配置文件:

1
sudo vi /etc/hostapd/hostapd.conf

添加如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# This is the name of the WiFi interface we configured above
interface=wlan0

# Use the nl80211 driver with the brcmfmac driver
driver=nl80211

# This is the name of the network
ssid=RaspberryPi

# Use the 2.4GHz band
hw_mode=g

# Use channel 6
channel=6

# Enable 802.11n
ieee80211n=1

# Enable WMM
wmm_enabled=1

# Enable 40MHz channels with 20ns guard interval
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]

# Accept all MAC addresses
macaddr_acl=0

# Use WPA authentication
auth_algs=1

# Require clients to know the network name
ignore_broadcast_ssid=0

# Use WPA2
wpa=2

# Use a pre-shared key
wpa_key_mgmt=WPA-PSK

# The network passphrase
wpa_passphrase=raspberry

# Use AES, instead of TKIP
rsn_pairwise=CCMP

上述代码中,ssidwpa_passphrase分别是无线网络的名字和密码(密码需8位以上)

然后测试配置是否正确,命令如下:

1
sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf

此时通过手机等设备已经可以搜到名字为RaspberryPi的WiFi,无需连接
如果没有问题,按Ctrl+C停止测试
使上述设置生效:

1
sudo vi /etc/default/hostapd

1
#DAEMON_CONF=""

修改为

1
DAEMON_CONF="/etc/hostapd/hostapd.conf"

安装DHCP服务

安装命令如下:

1
sudo apt-get install isc-dhcp-server

备份配置文件

1
sudo mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.config.bak

编辑新的配置文件

1
sudo vi /etc/dhcp/dhcpd.conf

修改成如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
default-lease-time 600;
max-lease-time 7200;
log-facility local7;

subnet 192.168.8.0 netmask 255.255.255.0 {
range 192.168.8.10 192.168.8.100;
option routers 192.168.8.1;
option broadcast-address 192.168.8.255;
option domain-name-servers 8.8.8.8,8.8.4.4;
default-lease-time 600;
max-lease-time 7200;
}

此处设置的IP与上面的IP网关对应

重启服务

1
sudo service  isc-dhcp-server restart

开启IPV4转发

修改文件:

1
sudo vi /etc/sysctl.conf

去掉net.ipv4.ip_forward=1前面的“#”号

通过iptables做NAT转发:

1
2
3
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

这些配置重启后就失效了,需要保存下来:

1
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

设为开机自动加载:

1
sudo vi /etc/rc.local

exit 0上方添加:

1
iptables-restore < /etc/iptables.ipv4.nat

启动服务并重启:

1
2
sudo service hostapd start
sudo reboot

等树莓派重启完成,就可以用手机等设备连接该WiFi上网了,名字和密码是之前在/etc/hostapd/hostapd.conf文件中设定的。
连接后设备会获取到192.168.8.10—-192.168.8.100之间的IP,并且可以通过树莓派连接的有线网络连上互联网,起到了无线路由器的功能。

如果遇到问题,可以通过以下命令检查服务情况。

1
sudo service hostapd status