Loading... # 使用 Linux 设备自制路由器指南 # 一、概述 ## 1. 简介 ### A. 是什么 本文介绍如何使用任意 Linux 设备(如迷你 PC、旧笔记本、单板计算机等)搭建功能完整的家用路由器。通过配置网络接口、防火墙、DHCP 和 DNS 服务,将一台普通计算机转变为具有路由、NAT、无线接入等功能的网络设备。 ### B. 为什么要学 - 硬件自由:不受商业路由器限制,可使用任意闲置设备 - 功能可控:完全掌握网络配置,可按需定制功能 - 安全透明:基于开源软件,避免固件后门风险 - 教育价值:深入理解网络原理和 Linux 系统管理 ### C. 学完能做什么 - 使用旧电脑或迷你 PC 搭建家用路由器 - 配置有线网络桥接和无线接入点 - 设置 DHCP、DNS 服务和防火墙规则 - 通过串口进行远程管理 ## 2. 前置知识 ### A. 必备技能 - 基本 Linux 命令操作 - 网络基础知识(IP 地址、子网掩码、网关) - 文本编辑器使用(vim 或 nano) ### B. 推荐知识 - Debian Linux 基础 - 网络接口配置经验 # 二、硬件选择 ## 1. 设备要求 ### A. 核心需求 - 处理器:任意 x86 或 ARM 架构处理器(老旧 CPU 即可) - 内存:最低 512MB,推荐 1GB 以上 - 网络接口:至少 2 个以太网接口(可通过 USB 扩展) - 存储:8GB 以上存储空间(mSATA 或 SSD) ### B. 推荐硬件 | 设备类型 | 优点 | 缺点 | |---------|------|------| | 迷你 PC(被动散热) | 静音、稳定、体积小 | 成本稍高 | | 旧笔记本 | 屏幕键盘齐全 | 体积大、功耗高 | | 树莓派等 SBC | 功耗极低 | 性能有限 | | 台式机/服务器 | 性能强大 | 噪音、功耗高 | ## 2. 网络接口配置 ### A. 接口规划 | 接口名称 | 网络角色 | 说明 | |---------|---------|------| | eth0 | WAN | 连接 ISP 或上级路由器 | | eth1 | LAN(有线) | 连接交换机或直连设备 | | wlan0 | LAN(无线) | 提供 Wi-Fi 接入 | ### B. 接口扩展 - USB 网卡:可通过 USB 网卡扩展网络接口 - 性能考虑:USB 网卡稳定性不如板载接口 - 多接口:可接入多个 USB 网卡并桥接 # 三、系统架构 ## 1. 网络拓扑 ```mermaid graph TB ISP[ISP/WAN] -->|eth0| Linux[Linux 路由器] Linux -->|br0 桥接| Switch[有线 LAN] Linux -->|wlan0| WiFi[无线 AP] Switch --> Client1[PC1] Switch --> Client2[PC2] WiFi --> Mobile[移动设备] Linux -->|dnsmasq| DNS[DNS/DHCP 服务] Linux -->|nftables| FW[防火墙/NAT] ```  ## 2. 系统组成 ### A. 核心组件 - Debian Linux:基础操作系统 - hostapd:无线接入点服务 - dnsmasq:DNS 和 DHCP 服务器 - bridge-utils:网络桥接工具 - nftables:防火墙和 NAT ### B. 数据流向 - 流量进入:从 WAN(eth0)接收外部网络数据 - 流量转发:通过内核 IP 转发功能在接口间传递 - NAT 处理:使用 nftables 进行地址转换 - 流量输出:向 LAN(br0)分发内部网络数据 # 四、系统安装 ## 1. Debian 安装配置 ### A. 安装前准备 禁用 PXE 网络启动: ``` BIOS/UEFI 设置中关闭 PXE Boot 选项 ``` 设置电源管理: - 设置最低时钟速度以降低功耗 - 禁用 USB 或 PCI 设备的电源管理 - 启用断电恢复自动开机功能 显示处理: - 部分设备需要连接显示器才能正常启动 - 可插入 HDMI 假负载欺骗系统 ### B. 安装非自由固件 启用 non-free-firmware 仓库以支持更多硬件: Intel 无线网卡: ``` sudo apt install firmware-iwlwifi ``` Realtek 无线网卡: ``` sudo apt install firmware-ath9k-htc ``` Atheros 老旧网卡: ``` sudo apt install firmware-atheros ``` ## 2. 安装核心软件包 ``` sudo apt install bridge-utils hostapd dnsmasq ``` 安装完成后系统约包含 250 个软件包。 # 五、网络配置 ## 1. 持久化接口命名 现代 Linux 使用基于物理位置的接口命名(如 enp0s31f6),为便于管理,可重命名为传统格式(ethX)。 为每个接口创建配置文件:/etc/systemd/network/10-persistent-ethX.link ``` [Match] MACAddress=AA:BB:CC:DD:00:11 [Link] Name=ethX ``` 替换 MACAddress 为实际网卡 MAC 地址,Name 为 desired 接口名称。 ## 2. 无线网络配置 创建无线接入点配置文件:/etc/hostapd/hostapd.conf ``` interface=wlan0 bridge=br0 hw_mode=g channel=11 ieee80211d=1 country_code=US ieee80211n=1 wmm_enabled=1 ssid=My Cool and Creative Wi-Fi Name auth_algs=1 wpa=2 wpa_key_mgmt=WPA-PSK rsn_pairwise=CCMP wpa_passphrase=mysecurepassword ``` 启用并启动 hostapd 服务: ``` sudo systemctl unmask hostapd sudo systemctl enable --now hostapd ``` ## 3. 网络接口配置 配置文件:/etc/network/interfaces ``` allow-hotplug eth0 allow-hotplug eth1 auto wlan0 auto br0 iface eth0 inet dhcp iface br0 inet static bridge_ports eth1 wlan0 address 192.168.1.1/24 ``` 配置完成后重启系统,验证桥接状态: ``` sudo brctl show br0 ``` 预期输出: ``` bridge name bridge id STP enabled interfaces br0 8000.xxxxx no eth1 wlan0 ``` # 六、路由与防火墙 ## 1. 启用 IP 转发 创建配置文件:/etc/sysctl.d/10-forward.conf ``` net.ipv4.ip_forward=1 ``` 应用配置: ``` sudo systemctl restart systemd-sysctl.service ``` ## 2. 配置防火墙规则 配置文件:/etc/nftables.conf ``` #!/usr/sbin/nft -f flush ruleset table inet filter { chain input { type filter hook input priority 0; policy drop; ct state { established,related } counter accept ip protocol icmp counter accept iifname "br0" tcp dport { 22, 53 } counter accept iifname "br0" udp dport { 53, 67, 68 } counter accept counter } chain forward { type filter hook forward priority 0; policy drop; iifname "eth0" oifname "br0" ct state { established,related } counter accept iifname "br0" oifname "eth0" ct state { new,established,related } counter accept counter } chain output { type filter hook output priority 0; policy accept; counter } } table ip nat { chain postrouting { type nat hook postrouting priority 100; policy accept; oifname "eth0" counter masquerade } } ``` 启用防火墙服务: ``` sudo systemctl enable nftables.service ``` ## 3. 防火墙规则说明 ### A. input 链 - 默认策略:丢弃所有入站流量 - 已建立连接:允许已建立的连接流量 - ICMP:允许 ping 协议 - 管理端口:允许 SSH(22)、DNS(53) - DHCP:允许 DHCP 服务端口(67、68) ### B. forward 链 - WAN 到 LAN:允许已建立连接的回程流量 - LAN 到 WAN:允许所有新建和已建立连接 ### C. NAT 表 - 出站 NAT:对从 eth0 出去的流量进行地址伪装 # 七、DHCP 和 DNS 服务 ## 1. dnsmasq 配置 配置文件:/etc/dnsmasq.conf ``` interface=br0 listen-address=0.0.0.0 dhcp-range=192.168.1.50,192.168.1.250,255.255.255.0,6h dhcp-option=option:router,192.168.1.1 dhcp-option=option:dns-server,192.168.1.1 cache-size=10000 ``` 配置说明: - interface:监听的网络接口 - dhcp-range:DHCP 地址分配范围和租期 - dhcp-option:网关和 DNS 服务器地址 - cache-size:DNS 缓存大小 启用服务: ``` sudo systemctl enable dnsmasq ``` ## 2. 验证服务状态 查看 DHCP 租约: ``` sudo less /var/lib/misc/dnsmasq.leases ``` 查看服务日志: ``` sudo journalctl -eu dnsmasq.service ``` 查看防火墙规则: ``` sudo nft list ruleset ``` # 八、串口管理 ## 1. 配置串口控制台 如果设备带有串口,可配置为管理终端。 修改 /etc/default/grub: ``` GRUB_CMDLINE_LINUX='console=tty0 console=ttyS0,115200n8' GRUB_TERMINAL=serial GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1" ``` 启用串口 Getty 服务: ``` sudo systemctl enable [email protected] ``` 更新 GRUB 配置: ``` sudo update-grub ``` # 九、验证与测试 ## 1. 基本连通性测试 ### A. 从 LAN 客户端测试 - 获取 IP 地址:确认设备通过 DHCP 获取到 192.168.1.x 地址 - ping 网关:ping 192.168.1.1 应正常响应 - ping 外网:ping 8.8.8.8 应正常响应 - DNS 解析:nslookup google.com 应返回正确 IP ### B. 防火墙规则测试 验证配置文件语法: ``` sudo nft -c -f /etc/nftables.conf ``` 查看流量统计: ``` sudo nft list ruleset ``` ### C. DHCP 服务测试 检查已分配的 IP: ``` sudo cat /var/lib/misc/dnsmasq.leases ``` ## 2. 重启测试 多次重启设备,确认所有服务能自动启动并正常工作。 # 十、扩展功能 ## 1. 可选增强功能 - 流量日志和规则命中统计 - VLAN 配置和网络分段 - 监控告警集成 - IPv6 支持 - 端口转发到 DMZ 主机 - VPN 远程访问和站点隧道 - 动态路由协议(OSPF、BGP 等) - 网络过滤和访问控制 - 入侵检测和防御系统 ## 2. 部署建议 - 最小化路由器软件安装,保持系统简洁 - 将额外服务部署到 DMZ 或独立 VLAN - 定期备份配置文件 - 使用版本控制管理配置变更 # 十一、常见问题 ## 1. 安装问题 ### 问题:设备无法正常启动 解决方法: - 检查是否需要连接显示器或 HDMI 假负载 - 确认 BIOS 设置中已禁用 PXE 启动 - 检查存储设备是否正确识别 ### 问题:无线网卡不工作 解决方法: - 安装对应的固件包(firmware-iwlwifi、firmware-atheros 等) - 检查网卡是否被正确识别(ip link show) - 确认 hostapd 配置文件语法正确 ## 2. 配置问题 ### 问题:桥接接口未正常创建 解决方法: - 验证 /etc/network/interfaces 配置语法 - 确认 bridge-utils 已安装 - 检查网络接口日志(journalctl -u networking) ### 问题:DHCP 不分配地址 解决方法: - 确认 dnsmasq 服务运行状态 - 检查配置文件语法 - 验证桥接接口已获取 IP 地址 ## 3. 性能问题 ### 问题:网络速度较慢 解决方法: - 使用板载网卡而非 USB 网卡 - 检查 CPU 使用率(top 或 htop) - 考虑升级硬件性能 ### 问题:无线信号弱 解决方法: - 使用专用无线 AP 设备 - 调整 hostapd 中的频道和发射功率 - 确认天线连接正常 # 十二、参考资料 *** ## 参考资料 1. [How to turn anything into a router - Noah Bailey](https://nbailey.ca/post/router/) 2. [Debian Network Bridge Configuration](https://wiki.debian.org/BridgeNetworkConnections) 3. [nftables Wiki](https://wiki.nftables.org/wiki-nftables/index.php/Main_Page) 4. [hostapd Documentation](https://w1.fi/hostapd/) 5. [dnsmasq Documentation](http://www.thekelleys.org.uk/dnsmasq/doc.html) 最后修改:2026 年 03 月 31 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏