这篇教程教你如何把树莓派改造成一个无线路由器,适用Arch Linux、Arch Linux ARM。
目标
树莓派B型自带一个以太网口,作为WAN;USB无线网卡,作为WLAN。
- IPv4 无线局域网配置为10.11.11.0/24,通过NAT连接互联网
- IPv6 配置IPv6-only网桥,通过桥接连接互联网
需求
- 硬件
- 树莓派B型(安装Arch Linux ARM,能通过ssh连接)
- USB无线网卡(芯片为RTL8188CUS)
- 软件
用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
,根据需要修改SSID
和PASSWORD
。
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>