这篇教程教你如何把树莓派改造成一个无线路由器,适用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
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>
参考资料
---------------------
在树莓派上,安装 Arch Linux ARM系统
这是我在树莓派上安装 Arch Linux ARM 和简单配置的过程,仅供参考。
所需配件
- 树莓派B型
- Micro-USB 连接线
- SD 卡
- 5V 电源
- 网线
下载最新的系统
SD 卡分区
把 SD 卡插在电脑上,分区表设为 MBR,创建三个分区
分区 | 大小 | 文件系统 |
---|---|---|
sdb1 | 100MiB | FAT32 |
sdb2 | 7GiB | ext4 |
sdb3 | 1GiB | swap |
复制相关文件
首先挂载相应的分区
sudo mount /dev/sdb2 -o noatime,discard /mnt
sudo mkdir /mnt/boot
sudo mount /dev/sdb1 -o noatime /mnt/boot
解压文件到指定位置
sudo bsdtar -xpf /path/to/root.tar.xz -C /mnt
sudo bsdtar -xpf /path/to/boot.tar.xz -C /mnt/boot
做一些必要的修改:
- 编辑
/mnt/etc/fstab
# /etc/fstab: static file system information # #
/dev/mmcblk0p2 / ext4 noatime,discard 0 1 /dev/mmcblk0p1 /boot vfat noatime 0 0 /dev/mmcblk0p3 none swap defaults,discard 0 0 - 编辑
/mnt/boot/cmdline.txt
avoid_safe_mode=1 selinux=0 plymouth.enable=0 smsc95xx.turbo_mode=Y dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
最后卸载分区
sync
sudo umount /mnt/boot
sudo umount /mnt
sync
此时,SD卡中就安装好了 Arch Linux ARM 最小启动环境了。
通过 ssh 连接树莓派
树莓派的以太网接口默认配置成 DHCP 自动获取 IP 地址,开启 sshd 服务,
root
密码为 root
。- 将电脑的以太网接口配置为局域网网关(假设接口名称为 enp7s0)
- 安装
dnsmasq
sudo pacman -S dnsmasq
- 编辑
/etc/dnsmasq
,写入以下内容interface=enp7s0 bind-interfaces dhcp-range=192.168.1.1,192.168.1.254,255.255.255.0,24h dhcp-option=option:router,192.168.1.1
- 执行下面的命令
sudo ip link set up dev enp7s0 sudo ip addr add 192.168.1.1/24 broadcast 192.168.1.255 dev enp7s0 sudo systemctl start dnsmasq.service
- 将树莓派和电脑用网线连接起来,接通树莓派电源。此时,树莓派应该自动配置好 IP,和电脑处于同一个局域网了。用下面的命令查看树莓派的 IP 地址
ip neigh show dev enp7s0
- 假设树莓派地址为
192.168.1.3
,用ssh
登陆到树莓派ssh root@192.168.1.3
配置树莓派
上面只是做了一些最基本的配置,还有许多工作要做。
配置 pacman
编辑
/etc/pacman.d/mirrorlist
,改为以下内容Server = http://mirrors.ustc.edu.cn/archlinuxarm/$arch/$repo
编辑
/etc/pacman.conf
CacheDir = /tmp/pacman/pkg
更新系统
pacman -Syyu
安装
base
,base-devel
pacman -S --needed base base-devel
配置 makepkg
编辑
/etc/makepkg.conf
CFLAGS="-mcpu=arm1176jzf-s -march=armv6zk -mtls-dialect=gnu2 -mfloat-abi=hard -mfpu=vfp -O2 -pipe"
CXXFLAGS="-mcpu=arm1176jzf-s -march=armv6zk -mtls-dialect=gnu2 -mfloat-abi=hard -mfpu=vfp -O2 -pipe"
BUILDDIR=/tmp/makepkg
更新 linux内核
树莓派的 Arch Linux ARM 默认使用的不是最新的内核,可以更新成最新的
pacman -S linux-raspberrypi-latest
用户管理
新建用户组
sudo
groupadd sudo
新建一个用户 pi
useradd -m -g users -s /bin/bash pi
passwd pi
gpasswd -a pi sudo
编辑
/etc/sudoers
以便新用户可以执行 sudo
,将下面的行取消注释%sudo ALL=(ALL:ALL) ALL
禁用
root
sudo passwd -l root
注销
root
并以用户 pi
登陆exit
ssh pi@192.168.1.3
Locale
编辑
/etc/locale.gen
,将下面的行取消注释en_US.UTF-8 UTF-8
zh_CN.GB18030 GB18030
zh_CN.GBK GBK
zh_CN.UTF-8 UTF-8
zh_CN GB2312
然后执行
sudo locale-gen
设置系统语言为
zh_CN.UTF-8
,编辑 /etc/locale.conf
,写入以下内容LANG=zh_CN.UTF-8
时区
设置时区为
Shanghai
sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
时间
树莓派没有硬件时钟,每次关机时间都会丢失,因此需要设置自动联网对时。安装
ntp
,并启用自动对时sudo pacman -S ntp
sudo systemctl enable ntpd.service
随机数生成器
安装
rng-tools
sudo pacman -S rng-tools
编辑
/etc/conf.d/rng
RNGD_OPTS="-o /dev/random -r /dev/hwrng"
启动服务
sudo systemctl enable rngd.service
超频
编辑
/boot/config.txt
,将下面的行取消注释arm_freq=900
core_freq=333
sdram_freq=400
over_voltage=2
启用硬件看门狗
编辑
/etc/modules-load.d/watchdog.conf
bcm2708_wdog
安装
watchdog
sudo pacman -S watchdog
编辑
/etc/watchdog.conf
watchdog-device = /dev/watchdog
temperature-device = /sys/class/thermal/thermal_zone0/temp
max-temperature = 75000
开机启动watchdog daemon
sudo systemctl enable watchdog.service
安装无线网卡驱动
买来的无线网卡用的芯片是 RTL8188CUS,需要自行安装驱动
sudo pacman -S dkms-8192cu
安装过程中需要编译内核模块,比较耗时,耐心等待即可。
安装常用的软件
sudo pacman -S bash-completion vim yaourt goagent \
youtube-dl transmission-cli bc tree \
axel pkgfile git
yaourt -S tengine-dev
关机/重启
关机
sudo shutdown -h now
重启
sudo reboot
No comments:
Post a Comment