logo NodeSeekbeta

wg-mimic-fabric:把 WireGuard 伪装成 TCP 穿透 UDP 封锁的一键中转组网脚本

wg-mimic-fabric:把 WireGuard 伪装成 TCP 穿透 UDP 封锁的一键中转组网脚本

仓库:https://github.com/ike-sh/wg-mimic-fabric · 许可:MIT · 版本:v1.0.1

先一句话总结:一条命令,把「公网入口 ⇄ IX/落地」用 WireGuard 组网,再用 Mimic(eBPF)把 WG 的 UDP 流量在链路上伪装成 TCP,绕过运营商/防火墙对 UDP 的封锁、限速和 DPI;IX 侧用 nftables 转发到落地服务。 全程一个全局命令 wm,交互菜单 + CLI 全覆盖,IX 生成「接入码」、公网入口粘贴即组网。

客户端 ──Mimic(伪TCP)承载的 WireGuard──► 公网入口 ⇄ IX ──nft──► 落地:端口

一、先说痛点:为什么要给 WireGuard «套壳»

WireGuard 又快又稳,但它只跑 UDP。问题是在很多网络环境里 UDP 是「二等公民」:

  • 部分运营商/机房对 UDP 限速、丢包、QoS 降权,表现就是「能连但卡、客户端不显示延迟、晚高峰惨不忍睹」;
  • 一些防火墙/DPI 直接封 UDP 或对 WireGuard 特征流量识别后阻断;
  • 纯 TCP 隧道(如某些 TCP 代理)虽然能过,但有「TCP over TCP」队头阻塞、性能塌方的老毛病。

理想方案是:底层还是 WireGuard 的 UDP(性能好、无 TCP-over-TCP),但在链路上让它看起来像一条普通 TCP 连接,骗过中间设备。这正是 Mimic 干的事,而 wg-mimic-fabric 把「WG 组网 + Mimic 伪装 + nft 转发」的搭建与运维全自动化。


二、核心原理:Mimic 是怎么把 UDP «变成» TCP 的

Mimic 是一个基于 eBPF(XDP + TC) 的流量伪装工具。它不改 WireGuard 本身,而是在网卡收发路径上就地改写报文头,做到对 WG 完全透明。

2.1 收发两条路径

方向 eBPF 挂载点 做的事
发包 TC egress 把出站的 WireGuard UDP 包改写成「伪 TCP」——加上看似合法的 TCP 头、序列号/确认号,链路上呈现为一条正常 TCP 流
收包 XDP ingress 把入站的「伪 TCP」还原成 UDP,原样交还给内核里的 WireGuard

关键点:

  • 对 WG 完全透明——WireGuard 自始至终以为自己在收发 UDP,无需任何改动;
  • 两端都要跑 Mimic,各自做双向 encode(TC 出)+ decode(XDP 入),这是正常设计,不是配置错误;
  • 改写发生在内核态(eBPF),几乎零拷贝、性能开销极小,不像用户态封装那样吃 CPU。

2.2 用 filter 选流:local= vs remote=

Mimic 用 filter 决定「处理哪条流」:

  • 被动监听侧(IX)filter = local=IP:端口 —— 等对端来连;
  • 主动连接侧(公网入口)filter = remote=IP:端口 —— 主动发起伪 TCP 握手。

2.3 一个最容易踩坑的细节:精确 IP 匹配

Mimic 在 XDP/TC 看到的是网卡上的真实目的 IP。在 NAT / 浮动公网 IP 的机器上,公网流量进网卡前,目的地址早已被改写成内网 IP。所以 IX 侧的 filter = local= 必须用网卡的真实内网 IP,而不是公网 IP——否则 XDP 永远匹配不到,隧道死活不通。

这个坑本脚本自动处理(自动探测 WAN 网卡的真实 IP 绑定,必要时可用 MIMIC_LOCAL_IP 覆盖),省去手动排查。

2.4 XDP 的两种挂载模式

  • native:驱动层挂载,最快,但需网卡驱动支持;
  • skb:通用模式,任意网卡可用,略慢。

virtio_net 等虚拟网卡通常只能用 skb,脚本会自动识别并切换,不会在不支持 native 的网卡上反复试错把线路弄挂。

2.5 ⚠️ 安全组必读:TCP 和 UDP 都要放行

Mimic 链路上是 TCP,但发起方仍是 UDP 行为——netfilter 入站识别为 TCP、出站识别为 UDP。所以云安全组/防火墙必须对 WG 端口同时放行 TCP 和 UDP,这是新手最常见的「不握手」原因。


三、wg-mimic-fabric 到底能做什么

把上面整套东西全自动化成一个 wm 命令,并补齐生产级运维能力:

  • 一键组网:IX/落地侧一条命令建线路、生成「接入码」;公网入口粘贴接入码即自动组网,末尾还会问「现在就启动吗」。
  • 一隧道多规则:一条 WG 隧道承载多条转发规则,每条规则独立的中转端口 → 不同落地,互不干扰。
  • 改规则不断流:增/改/删规则自动重生成接入码且不换密钥,公网入口重新导入即可,隧道不中断。
  • 自动处理脏活:NAT 机器的 Mimic 绑定、网卡 XDP 模式选择(virtio 自动 skb)、systemd 单元、防火墙放行,全自动。
  • 线路质量自检 + 自动切换wm test 实测隧道真实丢包/延迟;多中转候选可按丢包阈值自动切到最优线路
  • 生产特性齐全:IPv4/IPv6 双栈、落地域名 DDNS、线路主备分组切换、健康检查与诊断。

角色分工

角色 机器 职责
nat-transit IX / 落地侧 WG 监听 + Mimic + nft 转发到落地 + 生成接入码
nat-ingress 公网入口 导入接入码 + WG 连入 + Mimic + 对客户端开放入口端口

四、完整数据链路

客户端
  → 公网入口 公网IP:客户端入口端口(client_port)
  → 公网入口 nft DNAT
  → WireGuard 隧道(入口 10.88.0.1 ⇄ IX 10.88.0.2;Mimic 把 WG 的 UDP 伪装为 TCP)
  → IX 虚拟IP 10.88.0.2:中转端口(transit_port)
  → IX nft DNAT
  → 落地 landing_host:landing_port

一条 WG 隧道承载全部规则;规则差异只体现在两端 nft DNAT 与入口 client_port接入码WMGF1:code_schema=5)携带 WG 组网密钥、虚拟 IP、端口、落地与多规则数组,由 IX 单向生成、公网入口导入。


五、系统要求(很重要,先自查再装)

Mimic 用到较新的 eBPF/kfunc,两端都要满足

要求
内核 Linux ≥ 6.1(低于 6.1 无法运行)
BTF /sys/kernel/btf/vmlinuxCONFIG_DEBUG_INFO_BTF=y
模块 mimic 内核模块(经 DKMS 按当前内核编译)+ mimic 用户态 CLI
依赖 bashpython3wireguard-toolsnftablescurliproute2systemd、root
Secure Boot 若开启,DKMS 模块需 MOK 签名/入册,否则内核拒绝加载

发行版兼容评级(装前先跑 wm compat

评级 发行版 说明
✅ 推荐 Debian 13 / Ubuntu 24.04 官方 apt install mimic mimic-dkms,内核 ≥ 6.1
良好 Arch AUR:mimic-bpf
有条件 Fedora / RHEL 系 默认内核常 < 6.1,需 elrepo kernel-ml 或换 Debian/Ubuntu
实验 Alpine / OpenWrt 无 DKMS 需源码编译,生产不推荐

安装脚本会自动装 mimic(apt → GitHub .deb → 源码编译,三级回退)并按当前内核用 DKMS 编译模块。RHEL/CentOS 默认内核 5.14 不达标,首选直接换 Debian/Ubuntu VPS


六、快速部署(三步)

0. 安装(两端都执行)

curl -fsSL https://raw.githubusercontent.com/ike-sh/wg-mimic-fabric/main/scripts/bootstrap.sh | sudo bash

装完用全局命令 wm(无参数进交互菜单)。wm compat 看兼容评级。

1. IX / 落地侧(nat-transit)

wm create-transit
# 填:公网入口可达的 IX 公网地址/中转IP、WG 端口、IP 版本(4/6/dual)、(可选)端口池、首条落地 IP/端口
# 复制输出的 WMGF1: 接入码

2. 公网入口(nat-ingress)

wm import-code
# 粘贴接入码;为每条规则分配「客户端入口端口」(默认与落地端口一致,回车即可)

3. 客户端

连接 公网入口IP:<客户端入口端口>,用 wm show-port-map <ID>-ingress 查看完整端口地图。


七、进阶功能

多转发规则 + 商家端口池

一条隧道挂多条规则,每条独立中转端口 → 不同落地:

wm list-rules <ID>
wm add-rule <ID>          # 新增(自动重生成接入码,密钥不变)
wm edit-rule / delete-rule / enable-rule / disable-rule <ID> <规则ID>
wm refresh-code <ID>      # 按当前规则刷新接入码(不换密钥、不断流)

商家给的 IX 端口有限?设个中转端口池,新增规则自动从池里取空闲端口、强制落在池内、禁止重复:

wm set-pool ix-nat 18300-18399   # 设置;留空=清除

端口池仅 IX 侧分配状态,不进接入码、不影响公网入口

线路质量自检 + 自动切换(专治「能连但卡」)

很多「能连但卡 / 不显示延迟」其实是中转线路丢包,不是配置错。注意:要走隧道实测,而不是对中转网关裸 ping

wm test <ID> [包数]                       # 实测隧道真实丢包/延迟并判定质量(默认100包)
wm set-endpoint <ID> <中转IP>             # 切换该线路用的 IX 公网/中转地址(入口侧即时生效)

wm set-endpoints <入口线路> IP1,IP2,IP3    # 设候选中转列表(均指向同一 IX)
wm autoswitch <入口线路> [阈值%]           # 超阈值(默认10%)自动探测切到最优候选
wm autoswitch-enable / autoswitch-disable <入口线路>   # 定时自动切换(每5分钟)

判定:丢包 ≤2% 良好 / ≤10% 一般 / >10% 建议换中转。

IPv6 / 双栈

create-transit 时选 IP 版本 4 / 6 / dual;落地可填 IPv6 或域名(nft 自动按 A/AAAA 解析),MTU 建议 IPv6/dual 用 1408

DDNS(落地/端点是域名时自动跟 IP)

wm ddns-enable      # 每3分钟定时刷新(systemd timer)
wm ddns-refresh     # 手动刷新一次

公网入口域名变化热更新 wg set endpoint;落地域名渲染 nft 时自动解析跟随。

主备切换(手动,安全边界清晰)

wm set-group <ID> <组名> primary 100
wm set-group <ID2> <组名> backup 90
wm switch-line <组名> <目标线路ID>     # 启用目标、停同组其它、重建 nft
wm primary-backup-check <组名> / wm health-all

想要「同一 IX 多中转按丢包自动切」,用上面的 autoswitch;主备是跨 IX 的手动切换。


八、常用命令速查

命令 说明
wm 交互菜单
wm create-transit / import-code IX 建线路出码 / 公网入口导入码
wm start|stop|restart [ID] 启停线路(两端均需 WG+Mimic)
wm show-code [ID] / refresh-code [ID] 显示 / 刷新接入码(不换密钥)
wm rotate-keys [ID] 轮换密钥(仅密钥泄露时用,会重启 IX)
wm test [ID] [包数] 实测隧道丢包/延迟
wm set-endpoint(s) / autoswitch* 切中转 / 自动切换
wm health [ID] / diagnose [ID] 健康检查 / 诊断预检
wm set-mtu / set-xdp-mode 调参(MTU / XDP 模式)
wm update-mimic [版本] 升级 mimic(重载模块 + 重启线路)
wm upgrade-script / uninstall / purge 维护

九、踩坑速查

现象 排查
WG 不握手 入口能到 IX:WG_PORT安全组对 WG 端口 TCP+UDP 都放行?两端 Mimic 都 active?
能连但卡 / 不显示延迟 多半中转丢包:wm test 看丢包,>10% 就 set-endpoint 换中转或开 autoswitch
IX 侧 mimic 不匹配 NAT 机 local= 须用网卡真实内网 IP(脚本自动,可 MIMIC_LOCAL_IP 覆盖)
mimic 仍未启动 virtio 网卡 native 起不来会自动回退 skb;卡住就 ip link set dev <网卡> xdp offwm restart
MTU 大包不通 wm set-mtu <ID> 1380(两端同改)

诊断三件套:wm diagnose <ID>wm test <ID>wg show / mimic show <网卡>


十、安全提示

  • 接入码含 WG 组网私钥与落地信息,按密钥对待、勿公开;泄露后 wm rotate-keys 轮换并重导。
  • wm 只维护自己的 nft 表 wg_mimic_fabric,不接管全局防火墙。
  • wm purge 删除全部配置/密钥/服务(WMF_PURGE_NO_MIMIC=1 可保留 mimic 系统包)。

十一、适用 / 不适用

适合:UDP 被封/被限速的线路想跑 WireGuard;需要「公网入口 → IX 中转 → 落地」分发;一个入口挂多条落地;中转线路质量飘要自动切换。

不适合:内核 < 6.1 且无法升级;不能装内核模块的极简/容器环境(无 DKMS/BTF);只想要纯 TCP 代理而不在意 WG。


总结

wg-mimic-fabric = WireGuard 的性能 + Mimic 伪 TCP 的穿透力 + 一键化的运维体验。原理上靠 eBPF 在内核收发路径就地改写报文头,把 WG 的 UDP 在链路上伪装成 TCP,对 WG 透明、性能损耗极小;工程上把组网、伪装、转发、多规则、线路自检/切换、双栈、DDNS、主备全收进一个 wm 命令。

仓库(含完整文档):https://github.com/ike-sh/wg-mimic-fabric ,欢迎 Star / Issue / PR。

友情提示:装前先 wm compat 自查内核 ≥ 6.1 与 BTF;部署后第一件事是确认安全组对 WG 端口同时放行 TCP + UDP——九成「连不上」都栽在这。

12
12

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有61244位seeker

🎉欢迎新用户🎉