新手上路3:免费全球落地!(关于搭建ICMP9代理)

(在手机上赶工写出来的,我的写作能力极烂,晚一点有空再润色一下…)

在一个无聊的晚上,我打算折腾一下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的节点作为落地节点搞个链式代理,就可以吃上全球落地了:face_savoring_food:

甚至也可以直接用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);
30 个赞

感谢分享教程。赞

2 个赞

感谢大佬分享教程!

2 个赞

太6了 赞一个

2 个赞

都是太烂的IP没意义

2 个赞

我不是李佳怡哈:joy:

1 个赞

我搞错了哈

1 个赞

感谢大佬教程

感谢分享~

感谢分享教程 :+1:

感谢分享

感谢大佬分享

感谢分享

这是相当于CF CDN进ICMP9?

是的,他们给入口套了Cloudflare CDN

不过在海外应该影响不会很大…

1 个赞

感谢分享教程。赞

1 个赞

感谢分享

感谢分享

很好

1 个赞

谢谢大佬