基于Arch Linux ARM打造高性能路由器固件:从零开始的极客指南与常见问题解析

引言:为什么选择Arch Linux ARM作为路由器固件?
在当今网络设备高度商品化的时代,大多数用户习惯于使用厂商提供的固件或OpenWrt等成熟的开源解决方案。然而,对于追求极致性能、完全控制权和最新软件包的极客用户而言,Arch Linux ARM提供了一个无与伦比的平台。它不仅仅是一个操作系统,更是一个可以让你从底层构建整个网络栈的画布。
Arch Linux ARM继承了Arch Linux的”KISS”(Keep It Simple, Stupid)哲学,这意味着系统本身极其精简,没有多余的抽象层或臃肿的预装软件。对于路由器这种资源受限的嵌入式设备来说,这种简洁性至关重要。你可以精确控制每一个运行的服务,每一个内核模块,甚至每一个系统调用,从而将硬件性能发挥到极致。
与OpenWrt相比,Arch Linux ARM提供了:
最新的软件包
:Arch的滚动更新模型让你能够第一时间获得最新的内核、网络工具和安全补丁
完全的定制性
:从内核配置到系统初始化,一切都在你的掌控之中
庞大的软件仓库
:Arch User Repository (AUR) 提供了数以万计的软件包,远超任何嵌入式Linux发行版
标准的Linux环境
:无需学习特定的构建系统或特殊配置,使用标准的Linux工具和知识
硬件选择与准备
理想的硬件平台
要打造一台高性能的Arch Linux ARM路由器,硬件选择至关重要。以下是几个推荐的平台:
1. 树莓派4B/5
四核Cortex-A72/A76处理器
千兆以太网(通过USB3.0或原生接口)
USB3.0接口支持高速存储
丰富的社区支持
2. Orange Pi
5
⁄
5
Plus
八核Cortex-A76/A55处理器
原生2.5G以太网(5 Plus型号)
PCIe接口支持NVMe SSD
性价比极高
3. NanoPi R4S/R6S
专为路由器设计的硬件
双网口设计(R6S有2.5G+1G)
优秀的散热设计
开箱即用的网络性能
4. x86_64架构迷你主机
如Intel N100/N305平台
可能是最强大的选择
功耗依然很低(10-15W)
完全兼容标准x86_64 Arch Linux
必需的外设和配件
存储
:至少32GB的高速microSD卡(用于引导)或USB3.0/SSD(用于系统)
网络
:USB3.0千兆网卡(如果设备只有一个原生网口)
散热
:主动散热风扇或大型散热片(路由器通常24/7运行)
电源
:稳定5V/3A电源(树莓派官方电源推荐)
串口调试
:USB转TTL模块(用于早期调试,可选但强烈推荐)
安装Arch Linux ARM
第一步:准备引导介质
首先,从Arch Linux ARM官网下载适合你设备的最新镜像:
# 示例:为树莓派4B下载镜像
wget http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-aarch64-latest.tar.gz

# 或者为Orange Pi 5下载
wget http://os.archlinuxarm.org/os/ArchLinuxARM-orangepi5-latest.tar.gz
使用
dd
命令将镜像写入SD卡(
注意:确保目标设备正确,否则可能导致数据丢失
):
# 查找你的SD卡设备(通常是/dev/sdb或/dev/mmcblk0)
lsblk

# 写入镜像(替换sdX为你的设备)
sudo dd if=ArchLinuxARM-rpi-aarch64-latest.tar.gz of=/dev/sdX bs=1M status=progress

# 或者对于tar.gz格式,需要先解压并使用更复杂的步骤
# 对于树莓派,通常需要先分区并格式化
sudo fdisk /dev/sdX
# 创建两个分区:第一个FAT32(100MB),第二个ext4(剩余空间)
# 然后格式化
sudo mkfs.vfat -F 32 /dev/sdX1
sudo mkfs.ext4 /dev/sdX2

# 挂载并解压系统
sudo mkdir /mnt/root
sudo mount /dev/sdX2 /mnt/root
sudo tar -xpf ArchLinuxARM-rpi-aarch64-latest.tar.gz -C /mnt/root
sudo sync

# 配置引导分区
sudo mkdir /mnt/root/boot
sudo mount /dev/sdX1 /mnt/root/boot
sudo cp /mnt/root/boot/* /mnt/root/boot/

# 卸载
sudo umount /mnt/root/boot
sudo umount /mnt/root
第二步:首次启动和基本配置
将SD卡插入设备并启动。通过串口或SSH连接(默认IP通常为192.168.1.2),使用默认凭据(root/root)登录。
立即更改root密码:
passwd
更新系统:
pacman -Syu
创建普通用户(用于日常管理):
useradd -m -G wheel -s /bin/bash username
passwd username
# 安装sudo
pacman -S sudo
# 编辑sudoers文件
visudo
# 取消注释: %wheel ALL=(ALL) ALL
网络接口配置
识别网络接口
首先,识别你的网络接口名称:
ip link show
# 或
ls /sys/class/net/
现代系统使用可预测的接口名称,如
enp1s0
、
wlan0
等。
配置有线网络(作为WAN和LAN)
假设我们有两个网口:
enp1s0
连接到调制解调器(WAN)
enp2s0
连接到内部网络(LAN)
使用systemd-networkd配置:
启用systemd-networkd和systemd-resolved:
sudo systemctl enable systemd-networkd
sudo systemctl enable systemd-resolved
sudo systemctl start systemd-networkd
sudo systemctl start systemd-resolved
WAN接口配置(DHCP客户端):
创建
/etc/systemd/network/10-wan.network
:
[Match]
Name=enp1s0

[Network]
DHCP=yes
IPForward=yes
NTP=pool.ntp.org

[DHCP]
UseDNS=yes
UseRoutes=yes
LAN接口配置(静态IP):
创建
/etc/systemd/network/20-lan.network
:
[Match]
Name=enp2s0

[Network]
Address=192.168.1.1/24
IPForward=yes
IPMasquerade=yes
DHCPServer=yes
DNS=1.1.1.1 8.8.8.8

[DHCPServer]
PoolOffset=100
PoolSize=150
DefaultLeaseTimeSec=3600
MaxLeaseTimeSec=7200
配置无线网络(如果设备支持)
安装无线工具和固件:
sudo pacman -S wireless-regdb wpa_supplicant iw
# 对于树莓派:sudo pacman -S raspberrypi-firmware
# 对于其他设备,可能需要安装特定固件包
创建无线AP(使用hostapd):
安装hostapd:
sudo pacman -S hostapd
创建
/etc/hostapd/hostapd.conf
:
interface=wlan0
driver=nl80211
ssid=MyGigaRouter
hw_mode=g
channel=6
ieee80211n=1
wmm_enabled=1
ht_capab=[HT40+][SHORT-GI-20][SHORT-GI-40]
country_code=US

# WPA2/WPA3配置
wpa=2
wpa_passphrase=SuperSecurePassword123
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

# 高级安全选项
ignore_broadcast_ssid=0
auth_algs=1
wpa_group_rekey=600
启用hostapd:
sudo systemctl enable hostapd
sudo systemctl start hostapd
内核优化与性能调优
自定义内核配置
对于极致性能,建议编译自定义内核:
安装编译工具:
sudo pacman -S base-devel git
获取内核源码:
git clone –depth 1 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
cd linux
# 或者使用Arch的内核包作为基础
sudo pacman -S linux-aarch64-headers
配置内核:
make menuconfig
关键优化选项:
网络栈优化:
Networking support → Networking options
[*] TCP/IP networking
[*] IP: multicasting
[*] IP: advanced router
[*] IP: policy routing
[*] IP: equal cost multipath
[*] IP: verbose route monitoring
[*] IP: kernel level autoconfiguration
[*] IP: DHCP support
[*] IP: BOOTP support
[*] IP: RARP support
网络性能增强:
“`
Device Drivers → Network device support
[
] Ethernet driver support (选择你的网卡芯片)
[
] Intel devices (例如)
[
] Intel® PRO/1000 Gigabit Ethernet support
[
] Intel® PRO/1000 PCI-Express Gigabit Ethernet support
Networking support → Networking options → TCP/IP networking
[
] TCP: aggressive congestion control
[
] TCP: low latency mode
[*] TCP: high throughput mode
3. **NAT和防火墙支持:**
Networking support → Networking options → IP: Netfilter Configuration
[
] IP: NAT
[
] IP: NAT of incoming connections
[
] IP: NAT of locally generated traffic
[
] IP: NAT of locally generated traffic
[*] IP: NAT of locally generated traffic
4. **中断负载均衡:**
Kernel hacking → IRQ subsystem
[
] IRQ affinity procfs interface
[
] IRQ affinity procfs interface (default)
**编译和安装内核:**
“`bash
# 对于aarch64架构
make -j$(nproc) Image.gz modules dtbs
sudo make modules_install
sudo cp arch/arm64/boot/Image.gz /boot/Image.gz
sudo cp arch/arm64/boot/dts/your-board.dtb /boot/dtbs/
# 更新引导配置
# 对于树莓派,编辑 /boot/config.txt
echo “kernel=Image.gz” >> /boot/config.txt
系统级性能调优
1. 内核参数优化(/etc/sysctl.d/99-router.conf):
# 网络栈优化
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
net.ipv4.tcp_fastopen=3
net.ipv4.tcp_sack=1
net.ipv4.tcp_window_scaling=1
net.ipv4.tcp_timestamps=1
net.ipv4.tcp_mtu_probing=1
net.ipv4.tcp_low_latency=1

# 缓冲区大小
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
net.core.netdev_max_backlog=30000

# 连接跟踪优化
net.netfilter.nf_conntrack_max=2000000
net.netfilter.nf_conntrack_tcp_timeout_established=86400
net.netfilter.nf_conntrack_tcp_timeout_close_wait=60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait=120

# 端口范围和TIME_WAIT处理
net.ipv4.ip_local_port_range=1024 65535
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_fin_timeout=15

# 禁用IPv6(如果不需要)
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
应用配置:
sudo sysctl –system
2. CPU频率调节:
# 安装cpupower
sudo pacman -S cpupower

# 设置性能模式
sudo cpupower frequency-set -g performance

# 创建systemd服务自动设置
sudo tee /etc/systemd/system/cpu-performance.service < /proc/irq/XX/smp_affinity’
sudo bash -c ‘echo 3 > /proc/irq/YY/smp_affinity’

# 创建自动化脚本 /usr/local/bin/set-irq-affinity.sh
#!/bin/bash
INTERFACE=”enp2s0″
IRQ_LIST=$(grep $INTERFACE /proc/interrupts | awk ‘{print $1}’ | sed ‘s/://’)
CPU_MASK=”c” # CPU2和CPU3 (二进制1100)

for IRQ in $IRQ_LIST; do
echo $CPU_MASK > /proc/irq/$IRQ/smp_affinity
done
防火墙与NAT配置
使用nftables构建高性能防火墙
安装nftables:
sudo pacman -S nftables
sudo systemctl enable nftables
创建配置文件
/etc/nftables.conf
:
#!/usr/sbin/nft -f

# 清空现有规则
flush ruleset

# 定义表
table inet filter {
# 链定义
chain input {
type filter hook input priority 0; policy drop;

# 允许本地回环
iif “lo” accept

# 允许已建立的连接
ct state established,related accept

# 允许ICMP
ip protocol icmp accept
ip6 nexthdr icmpv6 accept

# 允许SSH(限制速率)
tcp dport 22 ct state new limit rate 5/minute accept

# 允许来自LAN的管理访问
ip saddr 192.168.1.0/24 tcp dport { 22, 80, 443 } accept

# 日志未匹配的数据包
log prefix “Dropped: ” counter drop
}

chain forward {
type filter hook forward priority 0; policy drop;

# 允许已建立的连接
ct state established,related accept

# 允许从LAN到WAN
ip saddr 192.168.1.0/24 oifname “enp1s0” accept

# 允许端口转发(示例:将外部8080转发到内部192.168.1.100的80)
tcp dport 8080 dnat to 192.168.1.100:80

# 日志
log prefix “Forward-Dropped: ” counter drop
}

chain output {
type filter hook output priority 0; policy accept;
# 输出通常允许所有
}
}

# NAT表
table ip nat {
chain prerouting {
type nat hook prerouting priority -100; policy accept;
# 端口转发规则在这里定义
tcp dport 8080 dnat to 192.168.1.100:80
}

chain postrouting {
type nat hook postrouting priority 100; policy accept;
# MASQUERADE规则(WAN接口)
oifname “enp1s0” masquerade
}
}
应用配置:
sudo nft -f /etc/nftables.conf
高级NAT优化
1. 连接跟踪优化:
# 增大连接跟踪表
sudo sysctl -w net.netfilter.nf_conntrack_max=2000000

# 减少TIME_WAIT时间
sudo sysctl -w net.ipv4.tcp_fin_timeout=15
sudo sysctl -w net.ipv4.tcp_tw_reuse=1

# 禁用不需要的conntrack模块
sudo modprobe -r nf_conntrack_ftp
sudo modprobe -r nf_conntrack_h323
# 等等…
2. 硬件卸载(如果网卡支持):
# 检查支持
ethtool -k enp1s0

# 启用TCP Segmentation Offload (TSO)
sudo ethtool -K enp1s0 tso on
sudo ethtool -K enp2s0 tso on

# 启用Generic Receive Offload (GRO)
sudo ethtool -K enp1s0 gro on
sudo ethtool -K enp2s0 gro on

# 启用Large Receive Offload (LRO) – 谨慎使用
sudo ethtool -K enp1s0 lro on
DNS与DHCP服务
DNS缓存与转发(unbound)
安装unbound:
sudo pacman -S unbound
配置unbound
/etc/unbound/unbound.conf
:
server:
# 日志(生产环境注释掉)
verbosity: 1

# 网络接口
interface: 192.168.1.1
interface: ::1

# 访问控制
access-control: 192.168.1.0/24 allow
access-control: ::1 allow

# 性能优化
num-threads: 4
msg-cache-size: 256m
rrset-cache-size: 512m
outgoing-range: 8192

# 缓存优化
cache-min-ttl: 300
cache-max-ttl: 86400
infra-cache-numhosts: 10000

# 隐私和安全
hide-identity: yes
hide-version: yes
harden-glue: yes
harden-dnssec-stripped: yes
use-caps-for-id: yes
private-address: 192.168.1.0/24

# 转发配置(使用多个上游DNS)
forward-zone:
name: “.”
forward-addr: 1.1.1.1@853
forward-addr: 1.0.0.1@853
forward-addr: 8.8.8.8@853
forward-addr: 8.8.4.4@853
forward-tls-upstream: yes

# 根提示(可选,如果使用转发则不需要)
# root-hints: “/var/lib/unbound/root.hints”
启用unbound:
sudo systemctl enable unbound
sudo systemctl start unbound
DHCP服务器(dnsmasq)
虽然systemd-networkd有内置DHCP服务器,但dnsmasq更灵活:
安装dnsmasq:
sudo pacman -S dnsmasq
配置dnsmasq
/etc/dnsmasq.conf
:
# 基本接口配置
interface=enp2s0
bind-interfaces

# DHCP范围
dhcp-range=192.168.1.100,192.168.1.250,255.255.255.0,24h

# DHCP选项
dhcp-option=option:router,192.168.1.1
dhcp-option=option:dns-server,192.168.1.1

# 静态分配
dhcp-host=AA:BB:CC:DD:EE:FF,192.168.1.10,client-name

# DNS配置
server=1.1.1.1
server=1.0.0.1
no-resolv
cache-size=1000

# 日志
log-queries
log-dhcp

# 安全
stop-dns-rebind
rebind-localhost-ok
domain-needed
bogus-priv
禁用systemd-networkd的DHCP服务器(如果使用):
编辑
/etc/systemd/network/20-lan.network
,移除
DHCPServer=yes
启用dnsmasq:
sudo systemctl enable dnsmasq
sudo systemctl start dnsmasq
QoS与流量控制
使用tc进行流量整形
安装工具:
sudo pacman -S iproute2
创建QoS脚本
/usr/local/bin/qos.sh
:
#!/bin/bash

# 接口
WAN=”enp1s0″
LAN=”enp2s0″

# 带宽限制(根据你的实际带宽调整)
DOWN_SPEED=”800mbit” # 下载速度
UP_SPEED=”200mbit” # 上传速度

# 清除现有规则
tc qdisc del dev $WAN root 2>/dev/null
tc qdisc del dev $LAN root 2>/dev/null

# WAN接口(上传控制)
tc qdisc add dev $WAN root handle 1: htb default 30
tc class add dev $WAN parent 1: classid 1:1 htb rate $UP_SPEED ceil $UP_SPEED
tc class add dev $WAN parent 1:1 classid 1:10 htb rate 50mbit ceil $UP_SPEED prio 1
tc class add dev $WAN parent 1:1 classid 1:20 htb rate 30mbit ceil $UP_SPEED prio 2
tc class add dev $WAN parent 1:1 classid 1:30 htb rate 20mbit ceil $UP_SPEED prio 3

# LAN接口(下载控制)
tc qdisc add dev $LAN root handle 1: htb default 30
tc class add dev $LAN parent 1: classid 1:1 htb rate $DOWN_SPEED ceil $DOWN_SPEED
tc class add dev $LAN parent 1:1 classid 1:10 htb rate 100mbit ceil $DOWN_SPEED prio 1
tc class add dev $LAN parent 1:1 classid 1:20 htb rate 40mbit ceil $DOWN_SPEED prio 2
tc class add dev $LAN parent 1:1 classid 1:30 htb rate 20mbit ceil $DOWN_SPEED prio 3

# 连接分类(使用iptables标记)
# 需要安装iptables并标记数据包
# 优先级1:VoIP、游戏
iptables -t mangle -A POSTROUTING -p udp –dport 5060 -j MARK –set-mark 10
iptables -t mangle -A POSTROUTING -p udp –dport 3478 -j MARK –set-mark 10
# 优先级2:视频流
iptables -t mangle -A POSTROUTING -p tcp –dport 443 -j MARK –set-mark 20
# 优先级3:普通流量
iptables -t mangle -A POSTROUTING -j MARK –set-mark 30

# 将标记与tc过滤器关联
tc filter add dev $WAN protocol ip parent 1:0 prio 1 handle 10 fw flowid 1:10
tc filter add dev $WAN protocol ip parent 1:0 prio 2 handle 20 fw flowid 1:20
tc filter add dev $WAN protocol ip parent 1:0 prio 3 handle 30 fw flowid 1:30

tc filter add dev $LAN protocol ip parent 1:0 prio 1 handle 10 fw flowid 1:10
tc filter add dev $LAN protocol ip parent 1:0 prio 2 handle 20 fw flowid 1:20
tc filter add dev $LAN protocol ip parent 1:0 prio 3 handle 30 fw flowid 1:30

echo “QoS配置已应用”
使脚本可执行并创建systemd服务:
sudo chmod +x /usr/local/bin/qos.sh

sudo tee /etc/systemd/system/qos.service < 1400 mark set 20

# 默认标记(低优先级)
mark set 30
}
}
VPN集成(WireGuard)
安装和配置WireGuard
安装:
sudo pacman -S wireguard-tools
生成密钥:
# 生成私钥
wg genkey | sudo tee /etc/wireguard/private.key
# 生成公钥
sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key
创建配置
/etc/wireguard/wg0.conf
:
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <服务器私钥>
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o enp1s0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o enp1s0 -j MASQUERADE

# 客户端1
[Peer]
PublicKey = <客户端公钥>
AllowedIPs = 10.0.0.2/32

# 客户端2
[Peer]
PublicKey = <客户端公钥2>
AllowedIPs = 10.0.0.3/32
启用WireGuard:
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
高级WireGuard配置
使用nftables集成:
table inet wireguard {
chain input {
type filter hook input priority -300; policy drop;

# 允许WireGuard UDP端口
udp dport 51820 accept

# 允许来自VPN接口的流量
iifname “wg0” accept
}

chain forward {
type filter hook forward priority -300; policy drop;

# 允许VPN到LAN
iifname “wg0” oifname “enp2s0” accept

# 允许已建立的连接
ct state established,related accept
}

chain postrouting {
type nat hook postrouting priority 100; policy accept;

# VPN流量的NAT
oifname “enp1s0” masquerade
}
}
监控与日志
系统监控
安装监控工具:
sudo pacman -S htop iotop iftop nethogs
实时网络监控:
# 显示每个连接的带宽
iftop -i enp1s0 -n -P

# 显示每个进程的带宽
sudo nethogs enp1s0

# 显示磁盘I/O
sudo iotop
日志管理
使用systemd journal:
# 查看最近的网络日志
journalctl -u systemd-networkd -f

# 查看内核网络消息
journalctl -k -f | grep -i network

# 持久化日志
sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles –create –prefix3 /var/log/journal
sudo systemctl restart systemd-journald
配置日志级别:
# 临时提高网络日志级别
sudo dmesg -n 7

# 永久配置
echo ‘kernel.printk = 7 4 1 7’ | sudo tee -a /etc/sysctl.conf
性能监控脚本
创建
/usr/local/bin/router-monitor.sh
:
#!/bin/bash

while true; do
clear
echo “=== Router Performance Monitor ===”
echo “Timestamp: $(date)”
echo

# CPU使用率
echo “CPU Usage:”
top -bn1 | grep “Cpu(s)” | awk ‘{print $2}’ | xargs -I {} echo ” {}”

# 内存使用
echo “Memory Usage:”
free -h | grep Mem | awk ‘{print ” Total: ” $2 “, Used: ” $3 “, Free: ” $4}’

# 网络接口状态
echo “Network Interfaces:”
ip -s link show enp1s0 | grep -E “RX|TX” | head -4

# 连接数统计
echo “Connection Stats:”
echo ” TCP: $(ss -tan | grep ESTAB | wc -l) established”
echo ” UDP: $(ss -uan | wc -l) active”

# 当前带宽使用
echo “Current Bandwidth (last 2 seconds):”
ifstat -i enp1s0,enp2s0 1 1 2>/dev/null | tail -2

sleep 2
done
常见问题解析
问题1:网络接口名称不一致
症状
:重启后接口名称从
eth0
变为
enp1s0
或类似。
原因
:systemd的可预测网络接口命名规则。
解决方案
:
# 查看当前接口
ip link show

# 创建自定义udev规则(如果需要固定名称)
sudo tee /etc/udev/rules.d/70-persistent-net.rules </dev/null

# 4. 使用tmpfs减少写入
# 编辑 /etc/fstab
tmpfs /tmp tmpfs defaults,noatime,size=2G 0 0
tmpfs /var/log tmpfs defaults,noatime,size=100M 0 0

# 5. 使用overlayfs减少SD卡磨损
# 对于只读系统部分,考虑使用overlayfs
高级主题
1. 使用Btrfs进行快照管理
# 安装Btrfs工具
sudo pacman -S btrfs-progs

# 创建Btrfs文件系统(在外部SSD上)
sudo mkfs.btrfs /dev/sda1

# 创建子卷
sudo btrfs subvolume create /mnt/root/@root
sudo btrfs subvolume create /mnt/root/@home
sudo btrfs subvolume create /mnt/root/@var

# 创建快照脚本
#!/bin/bash
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
sudo btrfs subvolume snapshot / /snapshots/root-$TIMESTAMP
# 保留最近5个快照
ls -t /snapshots | tail -n +6 | xargs -I {} sudo btrfs subvolume delete /snapshots/{}
2. 构建自定义initramfs
# 安装mkinitcpio
sudo pacman -S mkinitcpio

# 编辑 /etc/mkinitcpio.conf
MODULES=(ext4 btrfs usb_storage)
HOOKS=(base udev autodetect modconf block filesystems keyboard fsck)

# 重建initramfs
sudo mkinitcpio -P
3. 使用systemd-nspawn容器隔离服务
# 创建容器目录
sudo mkdir -p /var/lib/machines/router-services

# 安装基础系统到容器
sudo pacstrap -c /var/lib/machines/router-services base

# 启动容器
sudo systemd-nspawn -D /var/lib/machines/router-services

# 在容器内安装服务
# 然后使用systemd-nspawn@.service管理
性能基准测试
测试网络性能
使用iperf3测试吞吐量:
# 在另一台机器上启动iperf3服务器
iperf3 -s

# 在路由器上测试
iperf3 -c -t 60 -P 10
# -P 10 使用10个并行连接
使用pktgen测试PPS(数据包每秒):
# 加载pktgen模块
sudo modprobe pktgen

# 配置
echo “add_device eth0” > /proc/net/pktgen/kpktgend_0
echo “count 1000000” > /proc/net/pktgen/eth0
echo “pkt_size 64” > /proc/net/pktgen/eth0
echo “rate 1000000” > /proc/net/pktgen/eth0
echo “start” > /proc/net/pktgen/pgctrl
使用hping3测试防火墙性能:
# 安装
sudo pacman -S hping

# 测试SYN洪水防御
sudo hping3 -S -p 80 -i u10000
安全加固
1. 系统级安全
# 禁用root SSH登录
sudo sed -i ‘s/#PermitRootLogin yes/PermitRootLogin no/’ /etc/ssh/sshd_config

# 使用密钥认证
sudo mkdir -p /home/username/.ssh
# 将公钥添加到 /home/username/.ssh/authorized_keys

# 配置fail2ban
sudo pacman -S fail2ban
sudo systemctl enable fail2ban

# 创建fail2ban配置 /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
2. 网络级安全
# 在nftables中添加
table inet security {
chain input {
type filter hook input priority -50; policy drop;

# 限制连接速率
ct state new limit rate 10/second accept

# 丢弃无效数据包
ct state invalid drop

# 丢弃碎片数据包(除非需要)
ip frag-off & 0x1fff != 0 drop

# 丢弃带有错误校验和的数据包
meta nftrace set 1
}
}
3. 审计和监控
# 安装auditd
sudo pacman -S audit
sudo systemctl enable auditd

# 配置审计规则
sudo tee /etc/audit/rules.d/audit.rules <