可选:系统优化脚本

在系统的 /etc/sysctl.d 下面新建如下文件:

参考内容如下:

# ==========================================
# OpenWrt 系统内核优化配置
# 适用于路由器/网关设备的性能与安全调优
# ==========================================
# --- 内核保护与稳定性 ---

kernel.panic = 3
# Linux 内核崩溃后3秒自动重启,避免设备长时间不可用

kernel.core_pattern = /tmp/%e.%t.%p.%s.core
# core dump文件存储路径和命名规则(进程名.时间.PID.信号)

fs.suid_dumpable = 2
# 允许SUID程序生成core dump,便于调试(安全环境下使用)

fs.protected_hardlinks = 1
# 保护硬链接,防止非所有者创建指向敏感文件的硬链接

fs.protected_symlinks = 1
# 保护符号链接,防止符号链接攻击

kernel.kptr_restrict = 1
# 限制内核指针地址暴露,增强安全性(普通用户无法读取)

kernel.dmesg_restrict = 1
# 限制非特权用户读取内核日志,防止信息泄露

# ==========================================
# CPU / 网络核心优化
# ==========================================

net.core.bpf_jit_enable = 1
# 启用BPF JIT编译器,提升eBPF程序执行效率

net.core.bpf_jit_kallsyms = 1
# 将JIT编译的BPF程序导出到/proc/kallsyms,便于调试

net.core.netdev_max_backlog = 16384
# 网络设备接收队列最大长度,防止突发流量丢包(默认1000)

net.core.somaxconn = 4096
# socket监听队列最大长度,提升高并发连接处理能力(默认128)

net.core.netdev_budget = 500
# 单次软中断最多处理的数据包数量,平衡延迟和吞吐量

net.core.dev_weight = 256
# 网络设备轮询权重,配合netdev_budget使用

net.core.dev_weight_tx_bias = 1
# 发送数据包时的权重偏向,优化发送性能

net.core.rmem_max = 8388608
# socket接收缓冲区最大值 8MB(适用于高带宽场景)

net.core.wmem_max = 8388608
# socket发送缓冲区最大值 8MB

net.core.optmem_max = 40960
# 辅助缓冲区大小(用于socket选项数据)

net.ipv4.tcp_rmem = 4096 87380 8388608
# TCP接收缓冲区:最小值 默认值 最大值(字节)

net.ipv4.tcp_wmem = 4096 65536 8388608
# TCP发送缓冲区:最小值 默认值 最大值(字节)

# ==========================================
# TCP 栈优化
# ==========================================

net.ipv4.tcp_congestion_control = bbr
# 启用BBR拥塞控制算法,提升弱网环境吞吐量
# 注意:iOS 设备可能出现耗电异常则关闭,需要 kmod-tcp-bbr 支持

net.ipv4.tcp_fastopen = 3
# 启用TCP Fast Open:1=客户端 2=服务端 3=双向,减少握手延迟

net.ipv4.tcp_window_scaling = 1
# 启用TCP窗口缩放,支持大于64KB的接收窗口

net.ipv4.tcp_timestamps = 1
# 启用TCP时间戳,提升RTT测量精度和PAWS防护

net.ipv4.tcp_sack = 1
# 启用选择性确认,提升丢包恢复效率

net.ipv4.tcp_dsack = 1
# 启用重复选择性确认,检测伪重传

net.ipv4.tcp_max_tw_buckets = 200000
# TIME_WAIT状态socket最大数量,防止资源耗尽(默认值较小)

net.ipv4.tcp_fin_timeout = 30
# FIN_WAIT_2状态超时时间(秒),加快连接回收

net.ipv4.tcp_syncookies = 1
# 启用SYN Cookies,防御SYN Flood攻击

net.ipv4.tcp_ecn = 1
# 启用显式拥塞通知,降低丢包率(部分老旧设备可能不兼容)

net.ipv4.tcp_keepalive_time = 600
# TCP keepalive探测间隔(秒),检测死连接(默认7200)

net.ipv4.tcp_keepalive_intvl = 15
# keepalive探测重试间隔(秒)

net.ipv4.tcp_keepalive_probes = 2
# keepalive探测次数,超过后断开连接

net.ipv4.tcp_low_latency = 1
# 降低TCP延迟,优先发送小数据包(适合交互式应用)

net.ipv4.tcp_autocorking = 0
# 禁用自动cork,减少延迟(默认启用会延迟发送以合并数据包)

# ==========================================
# Conntrack / NAT 优化
# ==========================================

net.netfilter.nf_conntrack_max = 262144
# 连接跟踪表最大条目数,防止高并发时溢出丢包(默认值较小)

net.netfilter.nf_conntrack_tcp_timeout_established = 7440
# TCP established状态超时时间(秒),默认432000(5天)这里设为约2小时

net.netfilter.nf_conntrack_udp_timeout = 60
# UDP连接跟踪超时时间(秒)

net.netfilter.nf_conntrack_udp_timeout_stream = 180
# UDP流式连接超时时间(秒)

net.netfilter.nf_conntrack_acct = 1
# 启用连接跟踪统计(流量计数),用于流量监控

# ==========================================
# IPv4 / IPv6 / ARP 基础配置
# ==========================================

net.ipv4.ip_forward = 1
# 启用IPv4数据包转发(路由器必需)

net.ipv4.conf.default.arp_ignore = 1
# ARP响应模式:1=仅响应目标IP配置在接收网卡的ARP请求

net.ipv4.conf.all.arp_ignore = 1
# 全局应用arp_ignore规则

net.ipv4.icmp_echo_ignore_broadcasts = 1
# 忽略广播ping请求,防止smurf攻击

net.ipv4.icmp_ignore_bogus_error_responses = 1
# 忽略无效的ICMP错误响应

net.ipv4.igmp_max_memberships = 100
# 单接口最大IGMP组播组成员数(默认20)

net.ipv4.conf.all.arp_announce = 2
# ARP通告模式:2=使用最佳本地地址,避免ARP污染

net.ipv6.conf.default.forwarding = 1
# 启用IPv6数据包转发(新接口默认)

net.ipv6.conf.all.forwarding = 1
# 全局启用IPv6转发

net.ipv4.tcp_mtu_probing = 1
# 启用MTU探测,自动发现路径MTU(解决PMTUD黑洞)

# ==========================================
# 桥接 / NAT 性能优化
# ==========================================

net.bridge.bridge-nf-call-arptables = 0
# 桥接数据包不经过arptables,提升性能

net.bridge.bridge-nf-call-ip6tables = 0
# 桥接IPv6数据包不经过ip6tables

net.bridge.bridge-nf-call-iptables = 0
# 桥接IPv4数据包不经过iptables(纯二层转发场景)

# ==========================================
# 动态端口分配范围
# ==========================================

net.ipv4.ip_local_port_range = 10240 65535
# 本地端口分配范围,扩大可用端口数(默认32768-60999)

# ==========================================
# 默认 QoS 队列算法
# ==========================================

net.core.default_qdisc = fq_codel
# 使用fq_codel队列算法,降低缓冲区膨胀延迟(适合家庭路由器)