My Blog · RSS

初探 CNIX 专线: IX 的一次体验

2025-09-17 00:00

初探 CNIX 专线: IX 的一次体验

背景

最近在逛 Nodeseek 时,看到有人讨论 IEPL 专线IX 专线。和常见的“线路优化”不同,这类专线是真正的网络优化方案,主要面向企业或大厂应用场景。

常见专线类型

  • IPLL / IPEL(International Private Leased Line / Enterprise Link) 国际私有专线,跨境点对点的固定带宽链路,常用于企业总部与海外分支互联。

  • IEPL(International Ethernet Private Line) 基于以太网接口的国际专线,更适合大带宽场景,传输灵活。

  • IX 专线(Internet Exchange 专线) 通过一条专线接入互联网交换中心(IXP),在 IX 平台与多个对等网络建立 BGP Peering。

    • 优势:不必单独拉多条跨运营商专线,降低互联成本,延迟更低。
    • 不足:通常需要依托大型运营商或数据中心资源(如阿里云、通信云、火山云等)。

典型 IX 平台

CNIX(China New-type Internet eXchange,国家·深圳前海新型互联网交换中心)

  • 成立:2021 年,国家级新型 IX 试点之一。

  • 定位:不仅是传统二层互联,还强调算力网络、多云直连和 AI 合规,服务粤港澳大湾区及跨境互联。

  • 特点

    • 国家战略级项目,受网信办/工信部支持;
    • 面向运营商、云厂商、算力平台;
    • 提供算力 VPN、AI 模型合规测试等增值服务。
  • 目标:既做互联,也支撑产业数字化。

NNIX(National New-type Internet eXchange,国家·杭州新型互联网交换中心)

  • 成立:国家级新型 IX 试点,位于杭州。

  • 定位:服务华东与长三角,推动区域内多运营商/多云的就近互联。

  • 特点

    • 降低跨网访问时延与丢包;
    • 优化省内及长三角互联;
    • 更偏向“传统 IX + 区域优化”。
  • 目标:打造“国内互访更顺畅”的样板。

HKIX(Hong Kong Internet eXchange)

  • 成立:1995 年,由香港中文大学创办,是亚洲最悠久的 IX 之一。

  • 定位:香港的中立 IX 平台,亚太地区的重要枢纽。

  • 特点

    • 非营利组织运营;
    • 汇聚大量国际运营商、CDN、云厂商;
    • 在中港台与国际互联中地位显著。
  • 规模:长期保持 Tbps 级别流量峰值。

DE-CIX(Deutscher Commercial Internet Exchange,德国法兰克福)

  • 成立:1995 年,总部位于德国法兰克福。

  • 定位:全球最大的商业互联网交换中心。

  • 特点

    • 法兰克福节点单点流量峰值超过 15 Tbps
    • 在全球 40+ 城市运营 PoP(纽约、迪拜、孟买、马德里等);
    • 提供 Peering、Cloud Exchange、DDoS 防护等多种增值服务。
  • 地位:欧洲乃至全球互联网的核心枢纽。

AMS-IX(Amsterdam Internet Exchange,荷兰阿姆斯特丹)

  • 成立:1994 年,荷兰阿姆斯特丹。

  • 定位:与 DE-CIX、LINX 并列为全球三大老牌 IX。

  • 特点

    • 非营利机构,采用会员制;
    • 全球 880+ ASN 接入,涵盖运营商、云厂商、CDN;
    • 除阿姆斯特丹外,还扩展到芝加哥、香港、加勒比海等地。
  • 规模:流量峰值长期保持在 10 Tbps+

实现拓扑

  flowchart TD
    subgraph CN[国内]
        A[设备] --> B[singbox-client]
        B --> C[国内大厂 VPS]
    end

    subgraph BDR[CNIX 边界]
        C -->|realm 转发 7777→12441| D[CNIX NAT 机器<br/>ix.cnix.taphip.com]
    end

    subgraph INTL[国外]
        D -->|realm 转发 7777| E[hyt 落地机器]
        E --> H[HK 出局]
        D --> H[singbox-server<br/>出局]
    end

说明:

  • sing-box 可以替换为其他代理工具,主要承接设备端的 SOCKS/TUN 流量。
  • realm 负责 TCP/UDP 转发,将数据包推送到目标节点。

关键技术

使用Realm把前置流量转发到IX前置,是最重要的。其他细节不作介绍。

Realm 转发

Realm 仓库地址 一个用 Rust 实现的高性能网络转发工具,支持 TCP+UDP。

一键安装脚本

感谢 hiapb 大佬提供的一键脚本,几乎开箱即用。需要注意的是,REALM_URL 里的版本最好更新到最新。

#!/bin/bash
CONFIG_FILE="/etc/realm/config.toml"
REALM_BIN="/usr/local/bin/realm"
SERVICE_FILE="/etc/systemd/system/realm.service"
REALM_URL="https://github.com/zhboner/realm/releases/download/v2.9.2/realm-x86_64-unknown-linux-musl.tar.gz"
TMP_DIR="/tmp/realm-install"

GREEN="\e[32m"
RED="\e[31m"
RESET="\e[0m"

check_root() {
    if [ "$EUID" -ne 0 ]; then
        echo -e "${RED}请以 root 用户运行此脚本。${RESET}"
        exit 1
    fi
}

install_realm() {
    echo -e "${GREEN}正在安装 Realm TCP+UDP转发脚本...${RESET}"
    mkdir -p "$TMP_DIR"
    cd "$TMP_DIR" || exit 1
    curl -L -o realm.tar.gz "$REALM_URL"
    tar -xzf realm.tar.gz
    mv realm "$REALM_BIN"
    chmod +x "$REALM_BIN"

    cat > "$SERVICE_FILE" <<EOF
[Unit]
Description=Realm Proxy
After=network.target

[Service]
ExecStart=$REALM_BIN -c $CONFIG_FILE
Restart=always
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target
EOF

    mkdir -p $(dirname "$CONFIG_FILE")
    echo "# 默认配置" > "$CONFIG_FILE"

    systemctl daemon-reexec
    systemctl enable realm
    systemctl restart realm
    echo -e "${GREEN}Realm 安装完成。${RESET}"
}

uninstall_realm() {
    systemctl stop realm
    systemctl disable realm
    rm -f "$REALM_BIN" "$SERVICE_FILE" "$CONFIG_FILE"
    systemctl daemon-reexec
    echo -e "${GREEN}Realm 已卸载。${RESET}"
}

restart_realm() {
    systemctl restart realm
    echo -e "${GREEN}Realm 已重启。${RESET}"
}

add_rule() {
    read -p "请输入监听端口: " LISTEN
    read -p "请输入远程目标 IP:PORT: " REMOTE
    cat >> "$CONFIG_FILE" <<EOF

[[endpoints]]
listen = "0.0.0.0:$LISTEN"
remote = "$REMOTE"
type = "tcp+udp"
EOF
    restart_realm
    echo -e "${GREEN}已添加规则并重启 Realm。${RESET}"
}

delete_rule() {
    RULES=($(grep -n '\[\[endpoints\]\]' "$CONFIG_FILE" | cut -d: -f1))
    COUNT=${#RULES[@]}
    if [ "$COUNT" -eq 0 ]; then
        echo "${RED}无可删除规则。${RESET}"
        return
    fi
    echo "当前转发规则:"
    for ((i=0; i<COUNT; i++)); do
        START=${RULES[$i]}
        END=${RULES[$((i+1))]:-99999}
        BLOCK=$(sed -n "$START,$((END-1))p" "$CONFIG_FILE")
        echo -e "$((i+1)). $(echo "$BLOCK" | grep listen | cut -d'"' -f2) -> $(echo "$BLOCK" | grep remote | cut -d'"' -f2)"
    done
    read -p "请输入要删除的规则编号: " IDX
    IDX=$((IDX-1))
    if [ "$IDX" -lt 0 ] || [ "$IDX" -ge "$COUNT" ]; then
        echo "${RED}编号无效。${RESET}"
        return
    fi
    START=${RULES[$IDX]}
    END=${RULES[$((IDX+1))]:-99999}
    sed -i "$START,$((END-1))d" "$CONFIG_FILE"
    restart_realm
    echo -e "${GREEN}规则已删除并重启 Realm。${RESET}"
}

clear_rules() {
    sed -i '/\[\[endpoints\]\]/,/^$/d' "$CONFIG_FILE"
    restart_realm
    echo -e "${GREEN}已清空所有规则并重启 Realm。${RESET}"
}

list_rules() {
    echo "${GREEN}当前转发规则:${RESET}"
    grep -A3 '\[\[endpoints\]\]' "$CONFIG_FILE" | sed '/^--$/d'
}

view_log() {
    journalctl -u realm --no-pager --since "1 hour ago"
}

view_config() {
    cat "$CONFIG_FILE"
}

main_menu() {
    check_root
    while true; do
        echo -e "${GREEN}===== Realm TCP+UDP 转发脚本 =====${RESET}"
        echo "1. 安装 Realm"
        echo "2. 卸载 Realm"
        echo "3. 重启 Realm"
        echo "--------------------"
        echo "4. 添加转发规则"
        echo "5. 删除单条规则"
        echo "6. 删除全部规则"
        echo "7. 查看当前规则"
        echo "8. 查看日志"
        echo "9. 查看配置"
        echo "0. 退出"
        read -p "请选择一个操作 [0-9]: " OPT
        case $OPT in
            1) install_realm ;;
            2) uninstall_realm ;;
            3) restart_realm ;;
            4) add_rule ;;
            5) delete_rule ;;
            6) clear_rules ;;
            7) list_rules ;;
            8) view_log ;;
            9) view_config ;;
            0) exit 0 ;;
            *) echo -e "${RED}无效选项。${RESET}" ;;
        esac
    done
}

main_menu

配置与日志

有时需要调试,y一件脚本不支持修改。可以在 /etc/realm/config.toml 中修改日志级别,例如:

[log]
level = "debug"
output = "/var/log/realm.log"

[[endpoints]]
listen = "0.0.0.0:7777"
remote = "ix.cnix.taphip.com:1111"
type = "tcp+udp"

写在最后

IX 专线由于只面向大厂开放,理论上稳定性会比 IEPL 等直接暴露公网入口/出口的专线更好。 这次只是一次学习和尝试,同时也顺带了解了全球几大典型 IX:CNIX、NNIX、HKIX、DE-CIX、AMS-IX。 未来如果有机会实测更多场景,希望能分享更深入的经验。