··

用树莓派搭建旁路由

Tip

通过本文,你将了解:

  • 如何在树莓派上安装OpenWRT
  • 如何使用树莓派搭建旁路由
Note

  • 本文使用的树莓派型号为Raspberry Pi 4 Model B,内存为8G。
  • 本文采用的是openwrt的变种immortalwrt,版本为21.02.0-rc3。相比于openwrtimmortalwrt的优势在于它的软件源更加丰富、功能更加强大。

前言

为了连接进入一个在寝室楼间的自治网络,我需要一个能运行birdwireguard的路由器。 而我手头上的路由器并不支持birdwireguard,所以我决定使用树莓派搭建一个旁路由。

何为旁路由

旁路由,顾名思义,就是在原有的路由器旁边再搭建一个路由器,用于连接其他网络。

具体来说,旁路由就是将原有路由器和你的软路由用lan口互相连接,或者用wan口连接,然后将原有路由器的lan口接入你的软路由的lan口,并进行一些配置,让你的软路由成为原有路由器的一个旁系网络,从而分担原有路由器的部分功能。下方是一个很典型的旁路由拓扑图: 202311100834036

为了实现这一功能,我们需要在树莓派上依次进行以下操作:

  1. 安装openwrt
  2. 配置openwrt
  3. 配置原有路由器

安装openwrt

下载openwrt镜像

首先,我们需要下载openwrt的镜像。 在这里,我选择了immortalwrt,因为它的软件源更加丰富、功能更加强大。

你可以在这里找到immortalwrt的镜像。 对于Raspberry Pi 4 Model B,我们选择bcm27xx/bcm2711,然后选择ext4的完整镜像。

Note

通常你会看到:

  • rpi-4-ext4-factory.img.gz
  • rpi-4-ext4-sysupgrade.img.gz 这样两个文件,但是我建议你下载rpi-4-ext4-factory.img.gz,因为它是一个完整的镜像,可以直接烧录到SD卡中。而rpi-4-ext4-sysupgrade.img.gz是一个升级包,需要在已经安装了openwrt的树莓派上进行升级。

烧录镜像

接下来,我们需要将镜像烧录到SD卡中。

你可以使用balenaEtcher或者Raspberry Pi Imager来烧录镜像,这里我选择了官方提供Raspberry Pi Imager

选择你下载的镜像,点击烧录,等待几分钟即可完成烧录。

配置openwrt

将插入SD卡的树莓片通电,它就会自动启动。
如果烧录正常,等待几秒你会发现一个名为openwrt的开放WiFi。

连接该WiFi,访问192.168.1.1并立即按照提示修改密码,这也将会是你的root密码。

配置旁路由

所谓旁路由,是网络中绕过主要路由或默认路径的一种通信方式。在本方案中,我将会保留原始路由器的DHCP功能,因此旁路由的配置将会非常简单。

1. 配置网络接口

首先,我们需要将树莓派的网络配置为旁路由模式。

  1. 登录OpenWRT管理界面(192.168.1.1
  2. 进入NetworkInterfaces
  3. 编辑LAN接口

将LAN接口的配置修改为:

  • Protocol: Static address
  • IPv4 address: 与主路由器同网段的IP地址(例如主路由器是192.168.1.1,则可设置为192.168.1.2
  • IPv4 netmask: 255.255.255.0
  • IPv4 gateway: 主路由器的IP地址(例如192.168.1.1
  • Use custom DNS servers: 填入DNS服务器地址(例如114.114.114.1148.8.8.8

2. 关闭DHCP服务

因为我们要保留主路由器的DHCP功能,所以需要关闭树莓派的DHCP服务:

  1. 进入NetworkDHCP and DNS
  2. Server Settings选项卡中,找到LAN接口
  3. 勾选Ignore interface,禁用LAN接口的DHCP服务
  4. 点击Save & Apply

3. 配置防火墙

为了让旁路由正常工作,我们需要配置防火墙规则:

  1. 进入NetworkFirewall
  2. 编辑lan区域的防火墙规则
  3. 确保以下设置:
    • Input: Accept
    • Output: Accept
    • Forward: Accept
    • 勾选MasqueradingMSS clamping

4. 重启系统

完成以上配置后,重启树莓派以应用所有设置:

Terminal window
reboot

配置主路由器

1. 设置静态路由

在主路由器的管理界面中,我们需要添加静态路由规则,将特定的流量导向旁路由:

  1. 登录主路由器管理界面
  2. 找到路由表静态路由设置
  3. 添加路由规则:
    • 目标网络: 你想要通过旁路由访问的网络段
    • 子网掩码: 对应的子网掩码
    • 网关: 树莓派的IP地址(例如192.168.1.2

2. 设置客户端网关(可选)

如果你希望某些设备的所有流量都通过旁路由,可以在这些设备上手动设置网关为树莓派的IP地址。

或者,在支持的路由器上,可以通过DHCP预留的方式为特定设备分配旁路由作为网关。

安装和配置额外软件

现在旁路由已经搭建完成,我们可以在树莓派上安装需要的软件了。

安装BIRD

BIRD是一个功能强大的路由守护进程,支持多种路由协议:

Terminal window
# 更新软件包列表
opkg update
# 安装BIRD
opkg install bird2 bird2c
# 启用BIRD服务
/etc/init.d/bird enable
/etc/init.d/bird start

安装WireGuard

WireGuard是一个现代化的VPN解决方案:

Terminal window
# 安装WireGuard
opkg install wireguard-tools kmod-wireguard
# 生成密钥对
wg genkey | tee privatekey | wg pubkey > publickey

配置示例

创建WireGuard配置文件/etc/config/network,添加以下接口配置:

config interface 'wg0'
option proto 'wireguard'
option private_key '你的私钥'
list addresses '10.0.0.2/24'
config wireguard_wg0
option description '对等节点'
option public_key '对等节点的公钥'
option endpoint_host '对等节点的IP地址'
option endpoint_port '51820'
list allowed_ips '10.0.0.0/24'
option persistent_keepalive '25'

测试和验证

1. 检查网络连通性

在旁路由上ping外网,验证网络连接:

Terminal window
ping 8.8.8.8
ping baidu.com

2. 检查路由表

查看路由表确认配置正确:

Terminal window
ip route show

3. 检查服务状态

确认安装的服务正常运行:

Terminal window
# 检查BIRD状态
/etc/init.d/bird status
# 检查WireGuard状态
wg show

故障排除

常见问题

  1. 无法访问外网

    • 检查DNS配置是否正确
    • 确认防火墙规则没有阻止流量
    • 验证主路由器的网关设置
  2. 设备无法通过旁路由上网

    • 检查静态路由配置
    • 确认旁路由的IP地址设置正确
    • 验证DHCP设置
  3. VPN连接失败

    • 检查WireGuard配置文件
    • 确认防火墙允许VPN端口
    • 验证密钥对是否匹配

调试命令

Terminal window
# 查看系统日志
logread
# 查看网络接口状态
ip addr show
# 查看防火墙规则
iptables -L -n

总结

通过本文的配置,你已经成功搭建了一个基于树莓派的旁路由系统。这个系统可以:

  • 与现有网络环境和谐共存
  • 支持BIRD路由协议
  • 支持WireGuard VPN连接
  • 提供灵活的网络路由控制

旁路由的优势在于它不会影响现有的网络结构,同时又能提供额外的网络功能。你可以根据实际需求继续扩展更多功能,比如广告过滤、流量分析等。

Tip

建议定期备份OpenWRT的配置文件,以防意外情况下需要快速恢复系统。