如何利用双栈(Dual-stack)服务器作为中转,为 IPv6-only VPS 提供访问全球 IPv4 网络的能力

技术方案:IPv6-only VPS 借用双栈服务器 IPv4 出口 (Tinyproxy 篇)

  1. 场景背景
    客户端:IPv6-only VPS(无公网 IPv4,无法直接访问仅支持 IPv4 的网站,如 GitHub、部分 API 等)。
    服务端:双栈 VPS(同时拥有公网 IPv4 和 IPv6)。
    目标:在双栈机上搭建代理,让 IPv6-only 机子通过 IPv6 隧道连接,并由双栈机代理发出 IPv4 请求。
  2. 双栈服务器端配置 (Server Side)
    安装与环境准备:

    apt update && apt install tinyproxy -y
    # 准备日志目录
    mkdir -p /var/log/tinyproxy
    chown -R tinyproxy:tinyproxy /var/log/tinyproxy

    核心配置文件 /etc/tinyproxy/tinyproxy.conf
    (注意:如果使用宝塔面板,请将端口改为 18888 避开冲突,并在面板放行该端口的 IPv6 入站连接)

    # 用户和组保持默认
    User tinyproxy
    Group tinyproxy
    # 监听端口
    Port 18888
    # 关键:不要写 Listen 0.0.0.0,也不要写 BindIPv6。
    # 直接写这一行,它会同时监听 IPv4 和 IPv6 的所有网卡。
    Listen ::
    # 超时设置
    Timeout 600
    LogLevel Info
    # 日志路径(确保目录存在并有权限)
    LogFile "/var/log/tinyproxy/tinyproxy.log"
    PidFile "/run/tinyproxy/tinyproxy.pid"
    # 性能控制
    MaxClients 100
    MinSpareServers 5
    MaxSpareServers 20
    StartServers 10
    MaxRequestsPerChild 0
    # 隐私与安全
    ViaProxyName "tinyproxy"
    DisableViaHeader Yes
    ConnectPort 443
    ConnectPort 80
    # --- 权限控制 (Allow 列表) ---
    Allow 127.0.0.1
    Allow ::1
    # 1. 允许你的 IPv6-only VPS (精确地址)
    Allow 240a:aaaa:c11:700::4:2d64
    # 2. 建议同时允许该地址所属的整个段 (防止临时 IPv6 变动导致 403)
    Allow 240a:95d:c11:700::/64
    # 如果还是报 403,测试时可以临时把下面这行的 # 删掉放开全网(测完务必加回去)
    # Allow ::/0

    启动服务

    systemctl restart tinyproxy
    systemctl enable tinyproxy
  3. IPv6-only VPS 端配置 (Client Side)
    设置系统环境变量:
    由于 IPv6 地址包含冒号,在代理字符串中必须使用方括号 [] 括起来。

    # 1. 临时生效测试
    export http_proxy="http://[双栈服务器IPv6]:18888"
    export https_proxy="http://[双栈服务器IPv6]:18888"
    export all_proxy="http://[双栈服务器IPv6]:18888"
    #例如 export https_proxy="http://[1997:22e0:ffa9:qqd3:433e:8ff4:3443:3t34]:18888"
    # 2. 验证 IPv4 访问(如果返回双栈机的 IPv4 地址则成功)
    curl -s https://icanhazip.com
    
    # 3. 永久生效(写入配置文件)
    echo 'export http_proxy="http://[双栈服务器IPv6]:18888"' >> ~/.bashrc
    echo 'export https_proxy="http://[双栈服务器IPv6]:18888"' >> ~/.bashrc
    echo 'export all_proxy="http://[双栈服务器IPv6]:18888"' >> ~/.bashrc
    source ~/.bashrc

    让 Apt 包管理器也走代理(可选):

    cat <<EOF > /etc/apt/apt.conf.d/80proxy
    Acquire::http::Proxy "http://[双栈服务器IPv6]:18888/";
    Acquire::https::Proxy "http://[双栈服务器IPv6]:18888/";
    EOF

    技术方案:SSH 加密隧道 (解决拦截/连接重置)
    适用场景:当你发现 Tinyproxy 下载某些资源(如 Telegram 安装包、YouTube 视频)报错 Connection reset by peer 时,说明明文 HTTP 代理特征被识别拦截。此时需使用 SSH 加密的 SOCKS5 隧道。

    将SSH Socks5加密隧道纳入IPv6-only代理方案,可通过本地1080端口实现加密转发,有效绕过DPI检测,适用于敏感或大数据流量场景。在IPv6-only VPS上执行ssh -D 127.0.0.1:1080 -N -f root@[双栈机IPv6]即可建立隧道,并可通过netstat验证。通过在敏感应用中指定该加密代理,可与Tinyproxy基础代理实现分工明确的混合配置。
    1.建立加密隧道 (在 IPv6-only VPS 执行)
    执行以下命令,将流量封装在 SSH 隧道中发往双栈服务器:
    # 参数说明:
    # -D 127.0.0.1:1080  在本地开启 1080 端口作为 SOCKS5 入口
    # -N                 不执行远程命令(仅转发流量)
    # -f                 后台运行
    ssh -D 127.0.0.1:1080 -N -f root@your_ipv6_address
    

    your_ipv6_address是你的双栈vps的ipv6地址,首次连接需输入 yes 并填写双栈机的 root 密码。

  4. 验证隧道状态
    确认本地 1080 端口是否已经处于监听状态

    root@dxipv6243-431269011855:~# netstat -lnpt | grep 1080
    tcp        0      0 127.0.0.1:1080          0.0.0.0:*               LISTEN      128519/ssh    

    如上,看到 127.0.0.1:1080 LISTEN 即为成功
    为什么这种方式更稳?
    全流量加密:Tinyproxy 的 CONNECT 请求包含明文域名,容易被 DPI(深度包检测)拦截;SSH 隧道全程加密,中间设备只知道你在访问双栈服务器,无法识别具体内容。
    无需额外服务端:只要双栈机开启了 SSH 服务(默认都有),就不需要像 sing-box 那样安装复杂的第三方服务端。
    独立性:它与 Tinyproxy 互不冲突,可以根据需求灵活切换。

总结
最稳妥、最高效的配置方案是:将 Tinyproxy 设为系统默认(处理基础联网),将 SSH 隧道设为“增强开关”(处理下载和加密需求)。

  1. 编写配置文件
    执行 nano ~/.bashrc,在文件末尾添加以下内容:

    # --- 默认代理 (Tinyproxy) ---
    # 这一行保证你平时执行 apt update 或安装软件时默认能上网
    export http_proxy="http://[2400:e3e0:f5a9:afd3:4aee:8574:32f3:3434]:18888"
    export https_proxy="http://[2400:e3e0:f5a9:afd3:4aee:8574:32f3:3434]:18888"
    
    # --- 快捷指令 (命令别名) ---
    
    # 1. 开启 SSH 隧道后台运行 (如果断了或重启后,输入这个命令)
    alias ssh-on='ssh -D 127.0.0.1:1080 -N -f root@2400:e3e0:f5a9:afd3:4aee:8574:32f3:3434 && echo "SSH 隧道已在后台建立 (1080)"'
    
    # 2. 切换到加密模式 (下载 Telegram/YouTube 前输入这个)
    alias proxy-on='export all_proxy="socks5h://127.0.0.1:1080" && export http_proxy="socks5h://127.0.0.1:1080" && export https_proxy="socks5h://127.0.0.1:1080" && echo "模式已切换:当前走 SSH 加密隧道"'
    
    # 3. 切回普通模式 (下载完后输入这个,恢复给 wget/apt 使用)
    alias proxy-off='export http_proxy="http://[2400:e3e0:f5a9:afd3:4aee:8574:32f3:3434]:18888" && export https_proxy="http://[2400:e3e0:f5a9:afd3:4aee:8574:32f3:3434]:18888" && unset all_proxy && echo "模式已切换:当前走 Tinyproxy 普通代理"'
    

    2.立即生效:输入

    source ~/.bashrc

    日常装软件(如 apt update)什么都不用操作,因为配置文件里默认写了 Tinyproxy,直接运行命令即可
    要下载 Telegram 安装包(会报 Reset 的资源),先开隧道(如果刚重启完):输入 ssh-on,按提示输入双栈机密码。再切模式:输入 proxy-on。最后下载:curl -k -O -L https://xxx.exe
    下完了,想换回普通上网
    输入 proxy-off

评论区: