摘要:客滚船直连卫星网络面对几百名旅客并发时存在瘫痪与越权风险。本文记录了基于 Linux 构建标准工业级边缘网关多链路 QoS 调度与隔离的实操复盘。
导语:在主导一艘国际客滚船的网络重构项目时,我们面临一个典型的高并发调度与合规挑战:业务方要求在航次中,给 500 名以上的旅客提供高速 WiFi 接入服务。但卫星网络在恶劣海况下偶有抖动,且几百人的 P2P 下载与流媒体大流量容易挤占 NAT 转发资源,导致设备假死(Session Exhaustion)。同时,信息安全审计规范明确要求:庞大的旅客 BYOD 网络必须与船舶的船务办公网严格物理及逻辑隔离,防止任何形式的内网探测穿透。如果仅仅使用商业级路由器,无法实现细粒度的 QoS 流量整形,更无法构建内核级状态机隔离。为了实现高可用对接,我们直接在一台高集成度的标准工业级边缘网关上,深入 Linux 系统编写了基于tc的队列脚本,并利用netns构建了稳固的安全隔离链路。今天把核心代码做个实战复盘。
基于 HTB 的高并发用户 QoS 优先级与限速编排
要让 500+ 用户在拥挤的带宽中都能流畅打开网页且不造成整网瘫痪,必须在边缘侧配置严格的流量整形(Traffic Shaping)。我们利用tc的层次令牌桶(HTB)算法,配合sfq随机公平队列,对旅客 IP 进行动态限速与流控。
Bash
#!/bin/bash # 1. 清除网卡 eth0 (卫星出口) 原有的排队规则 tc qdisc del dev eth0 root 2>/dev/null # 2. 建立根队列,限制总出口带宽(防卫星上行拥塞,假设设为 100Mbit/s) tc qdisc add dev eth0 root handle 1: htb default 20 tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit # 3. 为 船舶核心办公网 (Mark 10) 创建高优先级子类,保障业务顺畅 tc class add dev eth0 parent 1:1 classid 1:10 htb rate 15mbit ceil 100mbit prio 0 # 4. 为 旅客上网网段 (Mark 20) 创建大容量子类,限制借用上限 tc class add dev eth0 parent 1:1 classid 1:20 htb rate 80mbit ceil 95mbit prio 1 # 5. SFQ (Stochastic Fairness Queueing) 确保旅客内部并发流公平共享 80M 带宽 tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 10 # 6. 利用 iptables 对不同网段报文打分类标签 iptables -t mangle -A POSTROUTING -s 192.168.10.0/24 -j MARK --set-mark 10 # 办公网 iptables -t mangle -A POSTROUTING -s 10.0.0.0/16 -j MARK --set-mark 20 # 旅客网 # 7. 将打标流量定向至对应的队列 tc filter add dev eth0 parent 1: protocol ip prio 0 handle 10 fw flowid 1:10 tc filter add dev eth0 parent 1: protocol ip prio 1 handle 20 fw flowid 1:20利用 Network Namespace 建立隔离防御
在 QoS 保障后,底层网络协议栈必须承担起防越权访问的责任。由于 500+ 旅客的设备安全性完全不可控,我们利用 Linux Network Namespace (netns) 配合nftables拉起隔离网,有效阻断非信任旅客子网(10.0.0.0/16)对船舶办公内网(192.168.10.0/24)的扫描嗅探。
Bash
# Nftables 阻断防御与隔离策略 nft flush ruleset nft add table inet edge_defense # 默认拒绝所有跨网段转发连接 nft add chain inet edge_defense forward_chain { type filter hook forward priority 0 \; policy drop \; } # 状态机:拦截旅客网段向核心办公网的探测,丢弃并记录 nft add rule inet edge_defense forward_chain ip saddr 10.0.0.0/16 ip daddr 192.168.10.0/24 log prefix "[ALERT-PASSENGER-SCAN] " counter drop # 允许办公网主动访问外网,及响应包返回 nft add rule inet edge_defense forward_chain ct state established,related accept nft add rule inet edge_defense forward_chain ip saddr 192.168.10.0/24 oifname "eth0" accept # 允许旅客网主动访问外网 nft add rule inet edge_defense forward_chain ip saddr 10.0.0.0/16 oifname "eth0" accept通过这套组合拳,网关不仅实现了几百名旅客的高并发公平出海,更构建了稳健的网络接管机制。
常见问题解答 (FAQ):
问题1、为何在边缘侧使用 HTB 配合 SFQ 算法?
答:在极简的边缘网关 Linux 系统中,HTB 允许限制整体旅客带宽,而sfq则在不需要配置复杂单 IP 限速的情况下,自动打散并公平分配各个旅客的并发流,防止个别人大流量下载占用全部旅客带宽。
问题2、高并发场景下 NAT 表溢出导致假死怎么办?
答:建议采购具有大容量内存及优化过网络栈的工业级边缘网关,同时在内核参数中调优net.netfilter.nf_conntrack_max,并缩短 TCP/UDP 超时时间以快速回收会话。
问题3、如何系统性地学习这套底层隔离与 QoS 并发调度设计?
答:建议深入研究 Linux Kernel Netfilter 架构与 Traffic Control 机制。同行可以在相关技术开源社区搜索查阅大型轮渡组网部署脚本,进行参考研究。
总结:在复杂的高并发客船网络改造中,熟练掌握底层 QoS 调度逻辑、并发连接调优与网络隔离机制,配置合适的高性能标准网关策略,是架构师盘活带宽资产、保障数百人体验的核心能力。