把树莓派改造成无线路由器

日期: 04 月 16日, 2014
标签:

这篇教程教你如何把树莓派改造成一个无线路由器,适用Arch Linux、Arch Linux ARM。

目标

树莓派B型自带一个以太网口,作为WAN;USB无线网卡,作为WLAN。

  • IPv4 无线局域网配置为10.11.11.0/24,通过NAT连接互联网
  • IPv6 配置IPv6-only网桥,通过桥接连接互联网

需求

用ssh连入树莓派,下面的操作均在树莓派上执行。

安装相关软件

安装软件

sudo pacman -S hostapd dnsmasq bridge-utils ebtables iptables iproute2 dhcpcd

注意: 官方的hostapd不支持RTL8188CUS芯片的无线网卡,需要编译安装Realtek提供的hostapd才行,可安装AUR中的hostapd-8192cu

yaourt -S hostapd-8192cu

树莓派编译比较慢,耐心等待即可。

配置网卡接口名称

很多发行版将以太网接口命名为ethX,无线网接口命名为wlanX。这样做有个明显的问题:当系统存在多个同类型的接口时,接口的名字可能是不固定的(如有时是eth0,有时是eth1)。为避免这样,下面给每个接口配置固定的名字。

编辑/etc/udev/rules.d/10-network.rules

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="net0"
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="ff:ee:dd:cc:bb:aa", NAME="ap0"

其中aa:bb:cc:dd:ee:ff替换为以太网卡的MAC地址,ff:ee:dd:cc:bb:aa替换为无线网卡的MAC地址。

注意: 重启树莓派之前必须修改网络配置,否则可能无法再连入树莓派。

配置IP地址

net0使用dhcp动态获取IP地址

sudo systemctl enable dhcpcd@net0.service

或者

sudo systemctl enable ifplugd@net0.service

配置hostapd

编辑/etc/hostapd/hostapd.conf,根据需要修改SSIDPASSWORD

interface=ap0
ctrl_interface=/var/run/hostapd
driver=rtl871xdrv
hw_mode=g
ieee80211n=1
wmm_enabled=1
ht_capab=[DSSS_CCK-40][MAX-AMSDU-7935][SMPS-STATIC][SHORT-GI-20][SHORT-GI-40][HT40-]
channel=6
supported_rates=480 540 720
basic_rates=480 540 720
ssid=SSID
wpa=2
wpa_passphrase=PASSWORD
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

配置dnsmasq

编辑/etc/dnsmasq.conf

interface=ap0
bind-interfaces
dhcp-range=10.11.11.1,10.11.11.254,1h
dhcp-option=option:router,10.11.11.1

配置网络共享

启用内核转发,编辑/etc/sysctl.d/10-net.conf

net.ipv4.ip_forward = 1

编辑/usr/lib/systemd/system/ap.service

[Unit]
Description=Access Poing
After=network.target
Wants=network.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStartPre=/usr/bin/sleep 2
ExecStart=/usr/bin/ip link set up dev ap0
ExecStart=/usr/bin/ip addr add 10.11.11.1/24 broadcast 10.11.11.255 dev ap0
ExecStart=/usr/bin/brctl addbr br0
ExecStart=/usr/bin/ip link set up dev br0
ExecStart=/usr/bin/ebtables -t broute -A BROUTING -p ! ipv6 -j DROP
ExecStart=/usr/bin/brctl addif br0 net0
ExecStart=/usr/bin/brctl addif br0 ap0
ExecStart=/usr/bin/systemctl start hostapd.service
ExecStart=/usr/bin/systemctl start dnsmasq.service
ExecStop=/usr/bin/systemctl stop dnsmasq.service
ExecStop=/usr/bin/systemctl stop hostapd.service
ExecStop=/usr/bin/ip link set down dev br0
ExecStop=/usr/bin/brctl delbr br0
ExecStop=/usr/bin/ebtables -t broute -D BROUTING -p ! ipv6 -j DROP
ExecStop=/usr/bin/ip addr flush dev ap0
ExecStop=/usr/bin/ip link set down dev ap0

[Install]
WantedBy=multi-user.target

开机启动

sudo systemctl enable ap.service

开启 NAT,可以把下面的指令加入到自启动里

sudo iptables -t nat -A POSTROUTING -s 10.11.11.0/24 -j MASQUERADE

绑定MAC地址

绑定MAC地址可以有效的防止蹭网。在/etc/hostapd/hostapd.conf中添加

macaddr_acl=1
accept_mac_file=/etc/hostapd/hostapd.accept

然后在 /etc/hostapd/hostapd.accept 中添加允许连接的设备,例如

01:23:45:67:89:01
ab:cd:ef:ab:cd:ef

联网设备管理

查看已连接的设备

cat /var/lib/misc/dnsmasq.leases

或者

sudo hostapd_cli all_sta

断开某个设备

首先查看设备的 MAC 地址,然后

sudo hostapd_cli disassociate <MAC addr>

参考资料

  1. Software Access Point