边缘网关深度实战:基于 Linux WPA 与 Nftables 自动接管港口 WiFi 并阻断非法探针

摘要:船舶靠港时手动切换网络效率低下且存在极大内网暴露风险。本文记录了基于 Linux 协议栈构建海事网关 实现 WiFi 广域网自动化接入与零信任隔离的实操复盘。

导语:在实操一个远洋边缘计算节点网络改造项目时,我们面临一个典型的双刃剑场景:船舶在深海使用卫星宽带,而一旦靠泊码头,需要立即将出口链路切换至港口提供的免费公共 WiFi,以执行大批量容器镜像同步和降低流量成本。然而,公共 WiFi 充斥着 ARP 欺骗和端口扫描,直接桥接等于引狼入室。为了实现无人值守的自动化切换,同时满足极其严苛的工控网络合规要求,我们抛弃了市面上的黑盒路由器,直接在一台标准的工业级计算板(即业界主流的海事网关 架构)上,深入 Linux 底层的无线子系统和内核协议栈写了控制脚本。今天把核心的"STA 模式提权"与"Captive Portal 绕过"代码做个实战复盘。

开启 STA 模式与动态路由劫持

要让网关主动去连接外部 WiFi 并作为系统出口,必须将无线网卡从默认的 AP(Access Point)模式切换为 STA(Station/Client)模式,并由 wpa_supplicant 守护进程接管无线鉴权。

首先,我们在设备内核中配置 /etc/wpa_supplicant/wpa_supplicant.conf,预存已知港口的 SSID 和 Preshared Key。紧接着,我们编写一个后台守护监听脚本。当 wlan0 接口成功获取到 DHCP 分配的 IP 后,利用 iproute2 强行修改系统的默认路由 Metric,使其优先级高于卫星链路的 eth0。

Bash

复制代码
#!/bin/bash
# 监听 wpa_cli 事件后台守护
wpa_cli -i wlan0 -a /usr/local/bin/wpa_action.sh &

# /usr/local/bin/wpa_action.sh 内容
IFNAME=$1
CMD=$2
if [ "$CMD" = "CONNECTED" ]; then
    echo "[INFO] 成功在二层接入港口 WiFi,准备更新三层路由表..."
    # 动态获取网关并为 STA 接口设置超高优先级 (metric 5)
    ip route add default via $(ip -4 route show dev $IFNAME | grep -v default | awk '{print $1}' | sed 's/0\/24/1/') dev $IFNAME metric 5
    # 强制刷新内核状态机,立即阻断旧卫星链路的长连接TCP会话
    conntrack -F
elif [ "$CMD" = "DISCONNECTED" ]; then
    echo "[WARN] 驶离港口或丢失信标,清理 WiFi 路由,回退至卫星链路..."
    ip route del default dev $IFNAME 2>/dev/null
fi

针对公共 WiFi 的 Captive Portal 绕过与零信任防御

很多港口 WiFi 虽然免费,但存在网页弹窗认证(Captive Portal)。如果不能自动绕过,路由切换了也无法上网。我们在脚本中加入了基于 curl 的静默提交机制,抓取 POST 表单直接发送 payload。

更为关键的是防线建设。连接成功后,我们必须立刻通过 nftables 拉起零信任隔离网,坚决阻断外网的嗅探。

Bash

复制代码
# 检测连通性与绕过 Portal
CHECK=$(curl -s -w "%{http_code}" -o /dev/null http://captive.apple.com/hotspot-detect.html)
if [ "$CHECK" = "200" ]; then
    echo "[INFO] 检测到 Portal 拦截,执行自动化 POST 绕过..."
    curl -X POST http://port-wifi.local/auth -d "user=shipadmin&pass=auth2026"
fi

# 启动 Nftables 零信任防御,保护内部的 vlan10 (机舱OT网段)
nft flush ruleset
nft add table inet public_defense
# 默认拒绝所有从公共 WiFi (wlan0) 主动发起的入站连接
nft add chain inet public_defense inbound { type filter hook input priority 0 \; policy drop \; }
nft add chain inet public_defense forward_chain { type filter hook forward priority 0 \; policy drop \; }

# 状态机:仅允许内部主动发起的请求的合法回包
nft add rule inet public_defense forward_chain ct state established,related accept
# 隔离红线:将任何试图从 wlan0 穿越到 vlan10 的流量直接丢弃并记录
nft add rule inet public_defense forward_chain iifname "wlan0" oifname "vlan10" log prefix "[ALERT-HACK-ATTEMPT] " counter drop

通过这套组合拳,网关在接触到港口信号时,便能完成免人工干预的安全接管。

常见问题解答 (FAQ):

问题1、为何使用 wpa_supplicant 而不使用高层的 NetworkManager?

答:在极简的边缘网关嵌入式 Linux 系统中,wpa_supplicant 占用极低的内存开销,且直接暴露底层的 socket 事件(如 CTRL-EVENT-CONNECTED),更适合编写严苛、无 UI 依赖的自动化脚本。

问题2、如果连接上港口 WiFi 后发现该网络上行带宽极差,如何处理?

答:可以通过增加定时测速逻辑。利用 iperf3 或是检测丢包率,一旦低于卫星链路的 SLA 标准,自动撤销 metric 5 的优选路由,主动将其降级。

问题3、如何系统性地学习这套底层自动化防御拓扑设计?

答:建议深入研究 Linux Kernel Netfilter 架构。请直接联系鲁邦通,免费获取《边缘计算节点自动化降本与内核级安全网络改造技术配置指南》PDF版及完整 Shell 源码。

总结:在复杂的边缘网络改造中,熟练掌握 Linux 底层无线子系统的调用手段与包过滤机制,配置合适的海事网关 自动化安全脚本,是网络架构师在恶劣公共网络中低成本实现数据同步的核心能力。

相关推荐
鲁邦通物联网9 天前
一线实操:旧船低成本接轨星链网络,基于 Linux 构建高可用 海事网关 的底层复盘
海事网关·船用网关·海事网络安全·智慧航运·船用路由器·星链船载终端·海事网关集成
鲁邦通物联网9 天前
远洋边缘计算架构实战:基于 Linux 策略实现核心业务数据隔离
海事网关·船用网关·海事网络安全·智慧航运·船用路由器·星链物联网·星链船载终端
鲁邦通物联网15 天前
满足海事合规的认证级海事网关高可用部署与网络隔离实战
海事网关·船用网关·海事网络安全·智慧航运·星链物联网·星链海上服务·星链船载终端
鲁邦通物联网15 天前
基于 Linux 流量整形技术的船舶边缘节点 QOS 调度实战
海事网关·船用网关·海事网络安全·智慧航运·星链物联网·星链船载终端·船舶设备数据采集
鲁邦通物联网23 天前
船舶接入 LEO 卫星宽带后的边缘网络架构:构建合规的安全海事网关体系
海事网关·海事网络安全·智慧航运·船用路由器·星链物联网·星链海上服务·星链船载终端
鲁邦通物联网24 天前
海洋边缘计算:Switch与Forwarder底层网络架构实战
海事网关·船用网关·海事网络安全·dnv 型式认可网关·智慧航运·船用路由器·船舶远程监控
鲁邦通物联网1 个月前
架构实战:基于海事边缘操作系统的容器化应用开发与安全合规体系构建
海事网关·船用网关·海事网络安全·dnv 型式认可网关·智慧航运·船用路由器·船舶远程监控
鲁邦通物联网1 个月前
架构实战:基于海事网关实现老旧船舶 OT 系统的安全上行与协议转换
海事网关·船用网关·海事网络安全·dnv 型式认可网关·海事网络安全网关·智慧航运·船用路由器
鲁邦通物联网1 个月前
架构实战:基于边缘节点的OT网络DMZ防勒索隔离实现
海事网关·船用网关·海事网络安全·dnv 型式认可网关·海事网络安全网关·智慧航运·船用路由器