把树莓派变成家庭路由器:从双网口到 DHCP、DNS 的完整配置
树莓派除了运行容器和家庭服务,也能承担家庭网络的网关。本文用 Raspberry Pi OS Lite 配置一台 IPv4 有线路由器:一侧接上级网络,另一侧接交换机或无线 AP,由树莓派向家中设备分配地址、转发流量并提供 DNS 解析。
这套方案适合想自己掌控网络服务的家庭实验室。它需要你维护 Linux 系统、备份配置并处理断电与存储故障;如果只想要一台开箱即用的路由器,专用路由系统通常更省事。
一、先确定设备与网络结构
建议准备树莓派 4 或更新机型、可靠的电源、microSD 卡或 SSD,以及两个网口。树莓派 4 自带一个千兆网口,另一个可以用 USB 3.0 千兆网卡补足。以下示例约定:
| 接口 | 用途 | 示例配置 |
|---|---|---|
eth0 |
WAN,连接光猫或上级路由器 | 由上级 DHCP 获取地址 |
eth1 |
LAN,连接交换机或无线 AP | 192.168.10.1/24 |
互联网 → 光猫/上级路由器 → eth0 [树莓派] eth1 → 交换机/AP → 家庭设备
先核对实际网口名称。 USB 网卡未必叫 eth1,后文的接口名和网段都要按你的设备调整。如果上级网络也是 192.168.10.0/24,先换一个不同的 LAN 网段,否则路由无法正确区分两侧网络。
以下步骤以 Raspberry Pi OS 使用 NetworkManager 的版本为前提。修改网络或启用防火墙可能中断 SSH,首次配置最好连接显示器和键盘,或确保有其他本地恢复方式。
二、安装系统并确认 WAN 连通
用 Raspberry Pi Imager 写入 Raspberry Pi OS Lite(64 位),按需预先设置用户与 SSH。启动后先更新系统:
sudo apt update
sudo apt full-upgrade -y
sudo reboot
重新登录,确认网口、连接配置和默认路由:
nmcli device status
nmcli connection show
ip -4 route
确认 eth0 已获得上级网络地址,默认路由指向上级网关。后续示例假设 LAN 对应的 NetworkManager 配置名为 Wired connection 2;请用实际输出中的名称替换。
三、给 LAN 设置固定地址
如果 eth1 已有连接配置,直接修改它:
sudo nmcli connection modify "Wired connection 2" \
ipv4.method manual \
ipv4.addresses 192.168.10.1/24 \
ipv4.gateway "" \
ipv4.never-default yes
sudo nmcli connection up "Wired connection 2"
ip -4 addr show dev eth1
如果 eth1 没有连接配置,先创建,再执行后续步骤:
sudo nmcli connection add type ethernet ifname eth1 con-name LAN \
ipv4.method manual ipv4.addresses 192.168.10.1/24 \
ipv4.never-default yes
sudo nmcli connection up LAN
LAN 应显示 192.168.10.1/24。这一侧不填写默认网关;树莓派的默认路由应继续走 WAN。本文只配置 IPv4,若上级网络提供 IPv6,需要另行设计 IPv6 地址分配和防火墙规则。
四、开启 IPv4 转发
让内核允许数据包从一个网口转向另一个网口:
printf 'net.ipv4.ip_forward=1\n' | sudo tee /etc/sysctl.d/60-router.conf
sudo sysctl --system
cat /proc/sys/net/ipv4/ip_forward
最后一条命令应输出 1。写入 /etc/sysctl.d/ 后,重启仍会保留该设置。
五、用 UFW 配置转发和 NAT
LAN 使用私有地址,访问互联网时需要将源地址转换为 WAN 地址。先安装 UFW,并在启用前放行管理连接:
sudo apt install ufw
sudo ufw allow in on eth1 from 192.168.10.0/24 to any port 22 proto tcp
如果你目前只能从 WAN 远程登录,应先为当前管理来源增加相应的 SSH 放行规则,确认可恢复连接后再启用 UFW。
编辑 /etc/ufw/before.rules,在现有的 *filter 段之前加入下面的 NAT 段,不要覆盖文件原有内容:
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE
COMMIT
然后只允许 LAN 到 WAN 的转发,并放行后续 DHCP、DNS 服务所需端口:
sudo ufw route allow in on eth1 out on eth0 from 192.168.10.0/24
sudo ufw allow in on eth1 to any port 67 proto udp
sudo ufw allow in on eth1 to any port 53 proto udp
sudo ufw allow in on eth1 to any port 53 proto tcp
sudo ufw enable
检查 UFW 与 NAT 状态:
sudo ufw status verbose
sudo iptables -t nat -S POSTROUTING
后者应包含针对 192.168.10.0/24、出口为 eth0 的 MASQUERADE 规则。若修改了 before.rules,运行 sudo systemctl restart ufw 重新载入。这里不需要给上级网络整体放行双向转发。
六、用 dnsmasq 给 LAN 分配地址
原文使用 ISC DHCP Server;该项目已停止维护。家庭网络可以用 dnsmasq 负责 DHCP,再由 Unbound 单独负责 DNS,两者不会争用 53 端口。
sudo apt install dnsmasq
sudo tee /etc/dnsmasq.d/lan-dhcp.conf >/dev/null <<'CONF'
port=0
interface=eth1
except-interface=eth0
dhcp-range=192.168.10.100,192.168.10.200,255.255.255.0,12h
dhcp-option=option:router,192.168.10.1
dhcp-option=option:dns-server,192.168.10.1
CONF
sudo dnsmasq --test
sudo systemctl enable --now dnsmasq
sudo systemctl restart dnsmasq
port=0 关闭 dnsmasq 的 DNS 功能,避免与 Unbound 冲突。DHCP 客户端将获得 192.168.10.100–200 的地址、192.168.10.1 的默认网关和 DNS 地址。LAN 上只能有一个计划中的 DHCP 服务器;若连接旧路由器作为 AP,应关闭它的 DHCP 功能。
七、用 Unbound 提供 DNS
只安装 Unbound 还不足以让 LAN 客户端查询。必须让它监听 LAN 地址,并允许该网段访问:
sudo apt install unbound
sudo tee /etc/unbound/unbound.conf.d/lan-router.conf >/dev/null <<'CONF'
server:
interface: 127.0.0.1
interface: 192.168.10.1
access-control: 192.168.10.0/24 allow
CONF
sudo unbound-checkconf
sudo systemctl enable --now unbound
sudo systemctl restart unbound
在树莓派上执行 dig @192.168.10.1 example.com,或在 LAN 客户端上查询域名。若系统没有 dig,可安装 dnsutils。Unbound 可以缓存查询结果;是否使用递归解析以及具体的 DNSSEC 行为,还应以实际配置和查询结果核验。
八、从客户端验证整条链路
将电脑接到 eth1 后面的交换机,或接入桥接到 LAN 的 AP,依次检查:
- 客户端是否拿到
192.168.10.100–200的地址,网关和 DNS 是否均为192.168.10.1。 - 能否 ping 通
192.168.10.1。 - 能否访问外部 IP,例如
ping 1.1.1.1。 - 能否解析域名,例如
nslookup example.com 192.168.10.1。
如果第 2 步失败,优先检查接线、LAN IP 和 DHCP;第 3 步失败,检查 ip -4 route、转发开关、UFW 路由规则及 NAT;只有第 4 步失败,则检查 Unbound 服务、53 端口与客户端收到的 DNS 地址:
systemctl status dnsmasq unbound ufw
sudo journalctl -u dnsmasq -u unbound -b --no-pager
sudo ss -lntup | grep ':53'
九、可选扩展与选型
无线网络: 最省心的做法是把现有无线路由器切到 AP 模式,LAN 口接树莓派的 eth1,让树莓派统一负责 DHCP 和路由。也可以让树莓派内置无线网卡承担 AP,但需要单独处理热点配置、无线接口与 LAN 的桥接或路由,不是安装 hostapd 后就能直接完成。
VPN、广告过滤和入侵检测: WireGuard、AdGuard Home、Suricata 等服务可以逐项增加。VPN 网关还需要按实际隧道接口调整路由、转发和 NAT,不能只添加一条伪装规则。每增加一种服务,都应检查端口冲突和 CPU、内存占用。
性能: 实际吞吐量受树莓派型号、USB 网卡、供电、NAT/防火墙规则以及 VPN 加密影响。不要把某个型号的宣传或单次测试数字当作保证。上线前可用 iperf3 在 WAN/LAN 两侧测吞吐,再持续观察温度、丢包和系统负载。
若你需要同时运行 Docker、DNS 或家庭自动化,Raspberry Pi OS 的通用 Linux 环境很灵活;若核心诉求是专用路由设备、Web 管理界面和更集中的网络功能,OpenWrt 更符合这个方向。
FAQ
1. 客户端拿到了 IP 地址,却无法上网,先查哪里?
先看客户端的网关是否为 192.168.10.1,再在树莓派上检查 WAN 默认路由和 /proc/sys/net/ipv4/ip_forward。如果客户端能访问外部 IP 却打不开域名,问题通常在 DNS;如果外部 IP 也无法访问,则重点检查 UFW 的 LAN→WAN 转发规则和 NAT 伪装规则。
2. 可以只用树莓派自带的一个网口吗?
可以设计 VLAN 或 Wi-Fi 上联等单网口方案,但需要交换机、网卡和网络拓扑配合,排错也更复杂。本文的配置要求独立的 WAN 与 LAN 接口;初次搭建建议使用第二块 USB 网卡,把两侧网络清楚地分开。
3. 已有无线路由器,还要在树莓派上装 hostapd 吗?
不需要。将现有无线路由器切换为 AP 模式,关闭其 DHCP 和路由功能,再把它接到树莓派 LAN 侧即可。这样无线设备仍通过原设备接入,但由树莓派分配地址并负责上网转发。
参考资料
© 版权信息:
作者:PANGSHARE
发布平台:PANGSHARE | 文章链接:https://www.pangshare.com/raspberry-pi-os-home-router/
本文内容仅限非商业性使用,如需商用(包括但不限于广告投放、付费专栏、企业宣传等),请邮件联系原作者获得独家授权,违者将依法追究法律责任。
微信扫一扫