logo NodeSeekbeta

【教程】使用usque为纯IPv6的小鸡添加IPv4出口,防止送中,摆脱笨重的warp-cli和warp-svc

在使用纯 IPv6 小鸡,或者给 Google 流量做分流时,会考虑通过 WARP 增加一个出站通道。但在长期使用过程中,WARP逐渐暴露出一些比较明显的问题:

  • 内存占用较高,甚至存在内存泄露风险,对于本身配置就不高的 IPv6 小鸡来说,这一点尤为致命,很容易把有限的内存资源耗尽。
  • warp-cli 会尝试接管整机的出入站流量,一旦配置不当,很可能导致服务器直接失联;而切换到 proxy 模式,又可能带来一定的性能损耗。

那么,有没有更轻量、可控性更强的masque替代方案呢?

有的!
👉 https://github.com/Diniboy1123/usque

它相对更加简洁,在资源占用和流量控制方面表现更友好,尤其适合低配置的 IPv6 环境使用。
接下来会带大家一步步安装,这里要感谢 @uty-yodit@kelmen 提供思路

1. 修改/etc/hosts文件,从而正常访问Github

复制执行下面的命令

sudo tee -a /etc/hosts <<EOF

# GitHub IPv6 Hosts
2a01:4f8:c010:d56::2 github.com
2a01:4f8:c010:d56::3 api.github.com
2a01:4f8:c010:d56::4 codeload.github.com
2a01:4f8:c010:d56::6 ghcr.io
2a01:4f8:c010:d56::7 pkg.github.com npm.pkg.github.com maven.pkg.github.com nuget.pkg.github.com rubygems.pkg.github.com
2a01:4f8:c010:d56::8 uploads.github.com
2606:50c0:8000::133 objects.githubusercontent.com www.objects.githubusercontent.com release-assets.githubusercontent.com gist.githubusercontent.com repository-images.githubusercontent.com camo.githubusercontent.com private-user-images.githubusercontent.com avatars0.githubusercontent.com avatars1.githubusercontent.com avatars2.githubusercontent.com avatars3.githubusercontent.com cloud.githubusercontent.com desktop.githubusercontent.com support.github.com
2606:50c0:8000::154 support-assets.githubassets.com github.githubassets.com opengraph.githubassets.com github-registry-files.githubusercontent.com github-cloud.githubusercontent.com
EOF

2.复制安装脚本

#!/bin/bash

# 遇到错误立即退出
set -e

# ==========================================
# 1. 权限与基础工具检查
# ==========================================
if [ "$EUID" -ne 0 ]; then
    echo "❌ 错误: 此脚本需要管理员权限。"
    echo "💡 请使用: sudo $0"
    exit 1
fi

if ! command -v ping >/dev/null 2>&1; then
    echo "❌ 错误: 系统未安装 'ping' 工具,无法进行网络环境检测。请先安装 iputils-ping 或类似工具。"
    exit 1
fi

REPO="Diniboy1123/usque"
INSTALL_DIR="/usr/local/bin"
CONF_DIR="/usr/local/etc/usque"
BIN_NAME="usque"
SERVICE_FILE="/etc/systemd/system/usque.service"

# ==========================================
# 2. IPv6-Only 纯环境检测
# ==========================================
echo "🔍 正在检测网络环境 (IPv4 连通性测试)..."
EXTRA_FLAGS=""
PING_RES=$(ping -c 1 -W 2 1.1.1.1 2>&1 || true)

if echo "$PING_RES" | grep -q "Network is unreachable"; then
    echo "🌐 检测到当前主机为【纯 IPv6 (IPv6-Only)】环境。"
    EXTRA_FLAGS="-6"
else
    echo "🌐 检测到当前主机支持 IPv4 或双栈网络。"
fi

# ==========================================
# 3. 版本检测与极速拦截 (核心修复区)
# ==========================================
echo "正在获取云端最新版本信息..."
LATEST_TAG=$(curl -s "https://api.github.com/repos/$REPO/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')

if [ -z "$LATEST_TAG" ]; then
    echo "❌ 错误: 无法获取云端版本号。"
    exit 1
fi

IS_UPDATE=0
if [ -x "$INSTALL_DIR/$BIN_NAME" ]; then
    LOCAL_VERSION=$("$INSTALL_DIR/$BIN_NAME" version 2>&1 | grep "usque version:" | awk '{print $3}' || true)

    if [ "$LOCAL_VERSION" == "$LATEST_TAG" ]; then
        echo "✅ 当前已安装最新版本 ($LOCAL_VERSION),无需更新,自动退出。"
        exit 0  # 版本一致时,直接在这里结束脚本
    else
        echo "🔄 检测到版本升级: ${LOCAL_VERSION:-未知} -> $LATEST_TAG"
        IS_UPDATE=1
    fi
else
    echo "🔍 未检测到现有安装,准备全新部署..."
fi

# ==========================================
# 4. 下载与架构匹配 (只有需要安装/更新才会执行到这里)
# ==========================================
TMP_DIR=$(mktemp -d)
cd "$TMP_DIR"

echo "正在匹配系统架构..."
ARCH=$(uname -m)
case "$ARCH" in
    x86_64 | amd64)    SEARCH_KW="amd64" ;;
    aarch64 | arm64)   SEARCH_KW="arm64" ;;
    armv7* | armv8l)   SEARCH_KW="armv7" ;;
    *)                 SEARCH_KW="$ARCH" ;;
esac

curl -L -s -o "checksums.txt" "https://github.com/$REPO/releases/download/$LATEST_TAG/checksums.txt"
MATCHED_FILE=$(grep "linux.*$SEARCH_KW.*\.zip" checksums.txt | awk '{print $2}' | head -n 1)

echo "正在下载: $MATCHED_FILE ..."
curl -L -# -o "$MATCHED_FILE" "https://github.com/$REPO/releases/download/$LATEST_TAG/$MATCHED_FILE"
grep "$MATCHED_FILE" checksums.txt > my_checksum.txt
sha256sum -c my_checksum.txt --status || { echo "❌ 校验失败"; exit 1; }

unzip -q -j "$MATCHED_FILE" "$BIN_NAME"
chmod +x "$BIN_NAME"

# ==========================================
# 5. 执行安装与配置
# ==========================================
if [ "$IS_UPDATE" -eq 1 ]; then
    echo "正在停止 usque 服务以释放文件锁..."
    systemctl stop usque 2>/dev/null || true
    cp "$BIN_NAME" "$INSTALL_DIR/$BIN_NAME"
    echo "✅ 程序已覆盖更新。"

    echo "正在重启 usque 服务..."
    systemctl daemon-reload
    systemctl start usque
else
    cp "$BIN_NAME" "$INSTALL_DIR/$BIN_NAME"
    if [ ! -f "$CONF_DIR/config.json" ]; then
        echo "正在生成新账号配置..."
        ./"$BIN_NAME" register -a
        mkdir -p "$CONF_DIR"
        mv "config.json" "$CONF_DIR/config.json"
        chmod 600 "$CONF_DIR/config.json"
    fi

    echo "正在配置 Systemd 服务 (启动参数: $EXTRA_FLAGS)..."
    cat <<EOF > "$SERVICE_FILE"
[Unit]
Description=Usque Native Tunnel Service
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=$INSTALL_DIR/$BIN_NAME -c $CONF_DIR/config.json nativetun $EXTRA_FLAGS
Restart=on-failure
RestartSec=5
User=root

[Install]
WantedBy=multi-user.target
EOF

    systemctl daemon-reload
    systemctl enable usque
    systemctl start usque
fi

# ==========================================
# 6. 清理现场
# ==========================================
cd - > /dev/null
rm -rf "$TMP_DIR"

echo "--------------------------------------------------"
echo "🎉 脚本执行完毕!"
echo "当前状态: $(systemctl is-active usque)"
echo "--------------------------------------------------"

3. 新建usque.sh

nano usque.sh

4. 将复制的脚本内容粘贴,保存并退出

5. 使脚本可执行

chmod +x usque.sh

6. 执行脚本

sudo ./usque.sh

PS:这个脚本配合cron可以实现自动更新usque

7. 检查安装结果

ip a
出现一个tun的接口即为成功(如果只需要分流这一步就算完成了,之后只需指定软件走tun接口即可实现分流)

8. 添加IPv4默认路由

复制并执行:

sudo tee /etc/systemd/system/ipv42tun.service << 'EOF'
[Unit]
Description=Maintain default route via tun0 after VPN up
After=network-online.target usque.service
Wants=network-online.target

[Service]
Type=simple
Restart=always
RestartSec=3
# 持续监控:发现 tun0 存在,且没有通过 tun0 的默认路由时,添加路由
ExecStart=/bin/bash -c '\
while true; do \
    if ip -4 link show dev tun0 >/dev/null 2>&1; then \
        if ! ip -4 route show default | grep -q "dev tun0"; then \
            ip -4 route replace default dev tun0 metric 50 || true; \
        fi; \
    fi; \
    sleep 3; \
done'
# 停止服务时自动清理路由
ExecStop=/bin/bash -c 'ip -4 route del default dev tun0 metric 50 || true'

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload

sudo systemctl enable --now ipv42tun.service

9.检查安装效果

curl --interface tun0 ip.sb
结果返回IPv4地址即为成功,现在可以ping任意IPv4地址测试了

有用的话赏个鸡腿吧 xhj008

12
  • @CM #14 ok,修改了一下代码,我这边的alpine环境跑通了,你这边可以测试一下

  • 前排

  • 顶你

  • 太棒了。感谢分享。收藏。

  • 感谢分享

  • 感谢分享 xhj003

  • 学习一下,正好有这么需求

  • 个人觉得最优雅的还是用原始的 wireguard 客户端

    不过没想到已经有第三方的 masque 工具了,这个要试一下

  • 原来有 masque 的工具了,这就用上。
    个人感觉加点管理命令(比如安装、卸载、更新啥的),支持一下team注册,适用面会更广。


    原开发者好像不愿意做伪装,这个方案能活多久很难说啊...

  • @qaz741wsd856 #9
    AI搓的脚本,等大佬来写个交互式管理工具吧ac01
    作者更新还是比较频繁的,能用一天算一天吧 yct022

12

你好啊,陌生人!

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

📈用户数目📈

目前论坛共有61574位seeker

🎉欢迎新用户🎉