在企业网络与家庭实验室场景中,商业路由器往往存在功能锁定、隐私合规或成本控制等问题。将一台普通的 Linux 设备转变为功能完备的路由器,不仅是可行的工程实践,更是理解网络栈底层机制的绝佳途径。本文以 Debian Stable 为基础系统,提供一套可落地的完整配置方案,涵盖从内核参数调优到服务层编排的全链路工程参数。

硬件选型与系统初始化

路由器作为网络流量枢纽,对硬件有别于通用计算节点的独特要求。核心需求可归纳为四点:至少两个千兆以太网接口用于内外网隔离、双核以上 CPU 保证包转发效率、2 至 4 GiB 内存应对连接跟踪表、120 GiB 存储用于日志与 IDS 规则库。Fanless 设计能显著提升设备稳定性,避免机械硬盘故障导致的网络中断。系统层面建议使用 Debian Stable, 配合 nonfree 镜像解决网卡驱动问题,并在 BIOS 中开启 AC Recovery 功能确保断电后自动启动,满足 appliance 场景的无人值守需求。

内核网络栈配置

路由器与主机的根本差异在于内核是否允许数据包穿越自身,即启用 IP 转发。编辑 /etc/sysctl.conf 添加以下内核参数:

net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1

执行 sysctl --system 立即生效,无需重启。此参数是整个包转发的开关,未启用时 Linux 仅能作为终端节点,无法在不同网卡间传递流量。生产环境中建议将此参数写入 /etc/sysctl.d/99-router.conf, 确保系统升级后配置不丢失。

iptables 防火墙规则设计

防火墙规则是路由器的核心控制平面,采用「默认拒绝」策略最小化攻击面。以下规则实现了基础的 NAT 转换与包过滤:

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-unreachable

-A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -o eth0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-unreachable
COMMIT

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT

上述规则中,eth0 作为外部接口 (WAN),eth1 为内部接口 (LAN)。MASQUERADE 目标自动将内部 IP 映射为外部 IP, 是家庭宽带环境最实用的 NAT 方式。安装 iptables-persistent 包可使规则在重启后自动加载,规则文件保存于 /etc/iptables/rules.v4

网络接口与地址规划

Debian 使用 ifupdown2 管理网络接口。假设外部接口通过 DHCP 获取地址,内部接口使用静态 CIDR 段,可按以下方式配置 /etc/network/interfaces:

auto eth0
iface eth0 inet dhcp

auto eth1.76
iface eth1.76 inet static
    address 10.98.76.1/24
    vlan_raw_device eth1

此配置创建一个 VLAN 76 绑定的内部子网,网关地址为 10.98.76.1。重启网络服务后接口生效,远程 SSH 会话可能中断,建议通过本地终端或分步执行 ifdownifup 操作。

DHCP 服务配置

局域网设备通常依赖 DHCP 自动获取 IP, 使用 ISC DHCP Server 实现。核心配置如下:

option domain-name "internal.lan";
option domain-name-servers 10.98.76.1, 1.1.1.1;

default-lease-time 600;
max-lease-time 7200;

subnet 10.98.76.0 netmask 255.255.255.0 {
  authoritative;
  range 10.98.76.50 10.98.76.250;
  option routers 10.98.76.1;
}

租约时间设定为 600 秒 (最短) 与 7200 秒 (最长), 适配移动设备频繁进出网络的场景。地址池从 .50 到 .250 留出了静态分配空间,避免 IP 冲突。

DNS 转发服务

路由器同时可承担 DNS 解析职能,使用 BIND9 构建本地递归解析器:

acl "trusted" {
    10.98.76.0/24;
    localhost;
};

options {
    directory "/var/cache/bind";
    forwarders {
        1.1.1.1;
        8.8.8.8;
    };
    allow-recursion { trusted; };
    allow-query-cache { trusted; };
    allow-transfer { none; };
};

配置中的 forwarders 将本地无法解析的请求转发至公共 DNS,allow-recursion 仅允许内网段与本机发起递归查询,防止 DNS 放大攻击。

入侵检测系统 (可选)

作为进阶功能,可部署 Suricata 实现网络流量监控:

sudo apt install suricata suricata-update

配置 suricata.yaml 中的网络变量:

vars:
  address-groups:
    HOME_NET: "[10.98.76.0/24]"

启用自动化规则更新 cron 任务:

00 0,6,12,18 * * * root (suricata-update && kill -USR2 $(pidof suricata))

IDS 日志输出至 /var/log/suricata/eve.json, 可通过 Filebeat 采集至 Elasticsearch 进行可视化分析,实现网络威胁的实时告警。

工程要点总结

组件 关键参数 建议值
IP 转发 net.ipv4.ip_forward 1
NAT 方式 iptables MASQUERADE 出接口 eth0
防火墙默认策略 INPUT/FORWARD DROP
DHCP 租约 default-lease-time 600s
DNS 转发 forwarders 1.1.1.1, 8.8.8.8
存储需求 日志 + 规则库 ≥120GB

该方案完全基于开源组件,硬件成本可控制在 300 加元以内,适用于家庭网络、小型办公室或实验室环境。通过 Ansible 角色可实现配置的版本化与自动化部署,确保多节点环境的一致性管理。掌握 Linux 路由器的构建逻辑,既是实用的基础设施技能,也是深入理解 TCP/IP 协议栈的必由之路。


参考资料: Linux Router, Firewall and IDS Appliance - Noah Bailey