(在手机上赶工写出来的,我的写作能力极烂,晚一点有空再润色一下…)
在一个无聊的晚上,我打算折腾一下ICMP9发的小鸡
ICMP9有个非常有特色的全球落地节点服务,可以通过它们提供的脚本来安装这个服务。
在运行任何脚本之前检查一下脚本在运行是个好习惯,我发现了几个非常有意思的地方
这个全球落地服务的大概原理是:
用户端(Xray) --VMess(WSS)–> Cloudflare → ICMP9入口服务器 → 落地服务器
我的表达能力很烂…举个例子或许更直观一点,这就是他们的其中一个落地节点:
- name: 🇺🇸 美国
type: vmess
server: tunnel-na.8443.buzz # ← 北美入口地址,也可以改成其他入口
port: 443
uuid: <你的账号API Key>
alterId: 0
cipher: auto
tls: true # 必须开启TLS
servername: tunnel-na.8443.buzz
network: ws
ws-opts:
path: /us # ← 用国家代码区分落地节点,所有落地节点可见:https://api.icmp9.com/online.php
headers:
Host: tunnel-na.8443.buzz
也就是说,他们本质上就是一个不直接服务国内的VMess机场,所以我们只需要用自己搭或其它机场的节点作为前置代理,在将ICMP9的节点作为落地节点搞个链式代理,就可以吃上全球落地了![]()
甚至也可以直接用Nginx反代一下:
location / {
proxy_pass https://tunnel-na.8443.buzz;
proxy_set_header Host tunnel-na.8443.buzz;
proxy_ssl_server_name on;
proxy_cache off;
proxy_ssl_protocols TLSv1.2 TLSv1.3;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
然后在Clash配置文件改一下自己的 server、servername和Host配置项就可以作为代理了
用PHP写了一个自定义订阅,可以将你的信息填在这里自动生成Clash配置(感谢GV.UY提供的二级域名和虚拟主机)
Clash
https://foo.gv.uy/icmp9-clash.php?server=<你的Nginx服务器地址>&port=<Nginx端口>&uuid=<你的API Key>&servername=<你的域名>
v2ray
https://foo.gv.uy/icmp9-v2ray.php?server=<你的Nginx服务器地址>&port=<Nginx端口>&uuid=<你的API Key>&servername=<你的域名>
订阅地址的PHP代码(如果你不放心我提供的订阅地址,可以自托管一个)
Clash版
<?php
header('Content-Type: text/yaml; charset=utf-8');
$server = $_GET['server'] ?? 'localhost';
$port = intval($_GET['port'] ?? 443);
$uuid = $_GET['uuid'] ?? '';
$servername = $_GET['servername'] ?? $server;
$tls = ($_GET['tls'] ?? 'true') === 'true';
// 获取 API 数据
$apiUrl = "https://api.icmp9.com/online.php";
$apiContent = @file_get_contents($apiUrl);
$apiData = json_decode($apiContent, true);
$proxies = [];
$proxyNames = ["DIRECT"];
if ($apiData && $apiData['success']) {
foreach ($apiData['countries'] as $country) {
$name = $country['emoji'] . " " . $country['name'];
$path = "/" . $country['code'];
$proxies[] = [
"name" => $name,
"type" => "vmess",
"server" => $server,
"port" => $port,
"uuid" => $uuid,
"alterId" => 0,
"cipher" => "auto",
"tls" => $tls,
"servername" => $servername,
"network" => "ws",
"ws-opts" => [ "path" => $path ]
];
$proxyNames[] = $name;
}
}
echo "# Clash Subscription Generated by Cat-Girl\n";
echo "mixed-port: 7890\nallow-lan: true\nmode: rule\nlog-level: info\n\n";
// 输出 Proxies
echo "proxies:\n";
foreach ($proxies as $p) {
echo " - name: '{$p['name']}'\n";
echo " type: {$p['type']}\n";
echo " server: '{$p['server']}'\n";
echo " port: {$p['port']}\n";
echo " uuid: {$p['uuid']}\n";
echo " alterId: 0\n";
echo " cipher: auto\n";
echo " tls: " . ($p['tls'] ? "true" : "false") . "\n";
echo " servername: '{$p['servername']}'\n";
echo " network: ws\n";
echo " ws-opts:\n";
echo " path: '{$p['ws-opts']['path']}'\n";
echo " headers:\n";
echo " Host: '{$p['servername']}'\n";
}
// 输出 Proxy-Groups
echo "\nproxy-groups:\n";
echo " - name: '🚀 节点选择'\n";
echo " type: select\n";
echo " proxies:\n";
foreach ($proxyNames as $pn) {
echo " - '$pn'\n";
}
// 输出 Rules
echo "\nrules:\n";
echo " - MATCH, 🚀 节点选择\n";
v2ray版
<?php
header('Content-Type: text/plain; charset=utf-8');
// 获取参数
$server = $_GET['server'] ?? 'localhost';
$port = intval($_GET['port'] ?? 443);
$uuid = $_GET['uuid'] ?? '';
$servername = $_GET['servername'] ?? $server;
$tls = ($_GET['tls'] ?? 'true') === 'true' ? 'tls' : '';
// 获取 API 数据
$apiUrl = "https://api.icmp9.com/online.php";
$apiContent = @file_get_contents($apiUrl);
$apiData = json_decode($apiContent, true);
$v2rayLinks = "";
if ($apiData && $apiData['success']) {
foreach ($apiData['countries'] as $country) {
$name = $country['emoji'] . " " . $country['name'];
$path = "/" . $country['code'];
// 构造 VMess 配置的 JSON 结构
$vmessConfig = [
"v" => "2",
"ps" => $name, // 节点名称
"add" => $server, // 地址
"port" => $port, // 端口
"id" => $uuid, // UUID
"aid" => "0", // AlterID
"scy" => "auto", // 加密方式
"net" => "ws", // 传输协议
"type" => "none",
"host" => $servername, // 伪装域名
"path" => $path, // 路径
"tls" => $tls, // 是否开启 TLS
"sni" => $servername // SNI 域名
];
// 把配置转成 JSON 并 Base64 编码,拼成 vmess:// 链接
$jsonStr = json_encode($vmessConfig);
$v2rayLinks .= "vmess://" . base64_encode($jsonStr) . "\n";
}
}
// Base64 编码
echo base64_encode($v2rayLinks);