侧边栏壁纸
博主头像
龍騰博客 博主等级

行动起来,活在当下

  • 累计撰写 193 篇文章
  • 累计创建 31 个标签
  • 累计收到 12 条评论

目 录CONTENT

文章目录

fanout:把 VPN Gate 免费节点变成本地 SOCKS5 端口,一个端口一个出口 IP

管理员
2026-10-02 / 0 评论 / 0 点赞 / 1 阅读 / 0 字

VPN Gate 上有几千个免费节点,但它们是 OpenVPN 服务器,不是代理 —— 你没法直接把浏览器指过去用。这篇讲一个我自己写的小工具 fanout:把这些节点变成本机的 SOCKS5 端口,一个端口一个出口 IP,再给每个出口挂一个节点链接,客户端连哪个端口就从哪个国家出去。

节点链接这块有 3X-UI 就接管面板,没有就自己跑 Xray,两种都行。

先看效果。四条隧道跑在一台机器上,四个端口对应日、韩、泰、美四个出口,母机自己的 IP 不受影响:

四个端口四个出口 IP

它解决什么问题

常见的做法是在机器上跑一个 OpenVPN 客户端,然后全机流量走它。问题很明显:只能同时用一个节点,而且 VPN 一连上就接管默认路由,SSH 当场掉线 —— 这坑我自己踩过,只能去控制台重启机器。

fanout 的思路是每个节点关在自己的 network namespace 里:

客户端 ──▶ 母机 SOCKS5 :30546 ──▶ netns fo1 ──▶ openvpn ──▶ 日本节点

客户端 ──▶ 母机 SOCKS5 :40442 ──▶ netns fo2 ──▶ openvpn ──▶ 韩国节点

SOCKS5 监听在母机,出站连接用 setns 切进对应的 netns 建立。这样 VPN 的路由劫持只影响它自己那个 netns,母机的 SSH 一点事没有;多个节点之间也互不干扰。

要不要装 3X-UI

不装也行。fanout 会自己跑一个 Xray,建节点、改节点、发链接都在它自己的界面里完成,装脚本会顺带把 Xray 下下来。

已经装了 3X-UI 的话,fanout 直接接管面板里的入站 —— 端口、路径、API token 全自动探测,不用手工填,面板开了 SSL 也能识别走 https。

两种模式下的操作完全一样,下面讲的东西都通用。想固定用哪种,启动参数加 -panel 3x-ui 或 -panel native。

装 fanout

需要 root,Linux(依赖 netns)。一条命令:

bash <(curl -fsSL https://raw.githubusercontent.com/byJoey/fanout/main/install.sh)

会自动按架构下载预编译二进制,装完打印管理地址、访问路径和口令。路径是随机生成的(类似 3X-UI 那样),路径不对一律返回 404,扫端口的看不到这里跑着什么。

依赖(openvpn、curl、openssl、iproute、iptables)按发行版自动装,apt、dnf、yum、pacman、apk、zypper 都认。没装 3X-UI 的话还会顺带下一份 Xray 放到 /var/lib/fanout/bin/,不会跟系统里已有的 xray 抢。

管理菜单

装完敲 f 打开管理菜单,启停、看日志、改端口口令路径、更新卸载都在里面。也可以直接 f list、f restart 这样用。

开出口

界面以出口为单位:一行就是一条隧道,加上挂在它上面的节点链接。

点「新建出口」,选地区和数量,再选一个已有节点当模板:

新建出口

地区列表标了每个地区还剩多少空闲节点和最高带宽,心里有数再选。提交之后 fanout 会并行拉起隧道,成功的自动复制一份节点链接并绑好出口,进度按目标逐条回报。实测六个出口十几秒就位。

主界面

说个实话:VPN Gate 是志愿者节点,死节点比例不低(满员会回 AUTH_FAILED,下线的直接拒连)。所以连不上会自动顺着同地区的候选往下试,最多 6 个,不用你手动一个个碰运气。上面截图里那些出口就是这么开出来的。

每行右边两个按钮:换一个节点,或者停掉这个出口。换节点只换出口 IP,端口不变,已经发给别人的客户端配置不用动。

节点链接

没装 3X-UI 的话,界面上会多一个「新建节点」按钮:

新建节点

协议 VLESS / VMess / Trojan,传输 TCP / WebSocket /gRPC/ HTTPUpgrade / XHTTP,安全层无 / TLS / REALITY 都能选。表单会按组合联动,比如 REALITY 在 WebSocket 下是禁用的(它靠模仿 TLS 握手工作,套在自带头部的传输上没意义),Vision 只在 VLESS + 裸 TCP + 有安全层时才出现。

REALITY 的密钥对和 shortId 自动生成,TLS 不填证书就生成自签的。装了 3X-UI 的话这个按钮不出现,入站在面板里建就行。

点节点名进详情,可以改端口、备注、启停,还能改绑到别的出口:

节点详情

一个节点可以挂多套客户端凭据,分给不同的人用,每套都能单独重置 —— 重置之后那个人手上的旧链接立刻失效,其他人不受影响。

「导出链接」一次拿到所有链接,粘进客户端就能用:

批量导出

注意看链接里的端口都不一样,但 UUID 是同一个。这是有意的:复制出来的节点共用模板的客户端凭据,你在客户端里只改端口就能切换出口国家,不用维护好几套配置。

掉线了怎么办

免费节点说没就没。健康检查每 10 秒探一次,连续两次失败就判定掉线,自动换同地区的其他节点重连,端口保持不变 —— 已经发出去的客户端配置不会失效。如果对接了 3X-UI,原先指向它的入站会自动改绑到新节点,备注里的地区和 IP 也跟着更新。

这里有个坑值得说一下。最早我的健康检查只是在 netns 里 curl 一下看通不通,结果发现测不出掉线 —— 因为 netns 通过 veth 走母机 NAT,openvpn 死掉之后照样能出网,只是出口变回了母机 IP。后来改成比对出口 IP 是否还是隧道那个,才真正测得准。

顺手说说 IPv6 泄漏

如果你的机器有全局 IPv6,这事值得注意:隧道里只有 IPv4,但访问双栈站点时,连接可能选中 AAAA 记录,那条流量就绕开隧道从母机的 IPv6 出去了 —— 真实地址直接暴露。

我一开始想在系统层解决,往 /etc/gai.conf 里加了 IPv4 优先。结果是:系统的 curl 确实改走 IPv4 了,但同一时刻 Xray 还是从 IPv6 出去。原因是 gai.conf 只影响 glibc 的 getaddrinfo,而 Xray 和 fanout 都是 Go 写的,自己做 DNS 解析,根本不吃这套。

所以最后是在程序里收口的:netns 拨号强制 tcp4、SOCKS5 拒绝 IPv6 目标、Xray 的 freedom 出站设 domainStrategy=UseIPv4。测试的时候记得用 api64.ipify.org 这种双栈地址,用纯 IPv4 的站点是测不出泄漏的。

已知限制

  • 只转发 TCP。SOCKS5 收到域名时在本机解析,隧道内不跑 UDP/DNS。

  • VPN Gate 节点质量看运气,速度和稳定性都不保证,拿来当固定线路不合适。

  • 管理界面只有随机路径加口令,没有 HTTPS,放公网建议前面套一层反代。

地址

开源在 https://github.com/byJoey/fanout ,MIT 协议,有问题提 issue。

最后提一句:VPN Gate 是筑波大学的学术实验项目,节点由志愿者提供。这工具只是调它公开的节点列表、用官方 openvpn 客户端去连,别拿来干什么出格的事。

0

评论区