sing-boxはプロキシ各プロトコルの統合プラットフォームである。

概要

 2022年10月に中国北京市で開催された中国共産党第二十次全国代表大会に合わせ、GFW(以下、「金盾」と言う)がアップグレードされ情報統制が強化された。今まで金盾回避に使われてきた、V2RayやXrayでサポートしているVMESSや、TLSを使ったDPI回避プロトコル(Trojan、VLESS+XTLS等)を使用した中国国外のプロキシサーバーに繋がらなくなり、海外ソースの情報を得るのはより困難な状況に置かれることとなった。

 上記の事態を回避するため、2022年8月より、githubにアップロードされたDPI回避プロトコルのshadow-tlsが有力視された。このプロトコルは、他人の信頼できる証明書 (一部の大企業や機関のドメイン名など) を使用する。ファイアウォールは選択した証明書との実際のTLSハンドシェイクの確認を行うため、パケットが偽装されファイヤーウォール回避が可能となっている。

 sing-boxは上記shadow-tlsを含むプロキシの統合プラットフォームであり、Xray等のようにconfig.jsonに通信ルールを記載すればそれらが容易に導入が可能な検閲回避ツールである。

 現在の日本においては必要が無いツールであるが備えあれば憂いなし。こういう情報が遮断されてからでは遅いのであります。

導入

shadow-tlsサーバーの構築を前提に以下に導入方法を記載する。 ※sing-box 1.2.7で動作確認済み


必要なものは以下の2つ。


・VPSインスタンス ※512 MB RAM、1 vCPU、Ubuntu 20.04 LTSで動作確認済み

・静的IP


インスタンスの443ポートを開放しておく。


以下の作業はスーパーユーザーで行う。


sing-boxにはGo言語の1.18.5以降バージョンが必要なのでインストールを行う。


Go言語をリポジトリに追加しインストール。

add-apt-repository ppa:longsleep/golang-backports
apt update
apt install golang


sing-boxをインストール。

git clone https://github.com/SagerNet/sing-box
cd sing-box
./release/local/install.sh


sing-boxのサーバー側設定ファイルを編集。

vi /usr/local/etc/sing-box/config.json


shadow-tlsのサーバー側設定は以下の通り。

"inbounds(shadow-tls側).users.password"はshadow-tls接続用パスワードを示し、値を必ず一意の値に変更する。以下のサンプルでは"abeshinzo"

"inbounds(shadow-tls側).handshake.server"はファイヤーウォールにTLSハンドシェイクを行わせる証明書のドメイン名。大企業や機関のドメイン名推奨。

"inbounds(shadowsocks側).password"は接続用パスワードを示し、値を必ず一意の値に変更する。32ビット長のパスワードが必須で、openssl rand -base64 32で生成すると良い。

{
    "log": {
        "level": "info",
        "timestamp": true
    },
    "route": {
        "rules": [
            {
                "network": "udp",
                "port": [
                    443
                ],
                "outbound": "block"
            }
        ]
    },
    "inbounds": [
        {
            "type": "shadowtls",
            "tag": "shadowtls-in",
            "listen": "::",
            "listen_port": 443,
            "sniff": false,
            "sniff_override_destination": false,
            "detour": "shadowsocks-in",
            "version": 3,
            "users": [
                {
                    "password": "abeshinzo"
                }
            ],
            "handshake": {
                "server": "www.lovelive-anime.jp",
                "server_port": 443
            },
            "strict_mode": true
        },
        {
            "type": "shadowsocks",
            "tag": "shadowsocks-in",
            "listen": "127.0.0.1",
            "method": "2022-blake3-aes-256-gcm",
            "password": "Yz/779GBeiBoh+pg/0GbZG7lAfviOVUWGGzQPl/1u/8="
        }
    ],
    "outbounds": [
        {
            "type": "direct",
            "tag": "direct"
        },
        {
            "type": "block",
            "tag": "block"
        }
    ]
}


sing-boxを再起動。

systemctl restart sing-box

クライアント設定

各OS共通

クライアントサイドのconfig.jsonを作成する。


shadow-tlsのクライアント側設定は以下の通り。tunを使用する例を記載する。

tunではデバイスの全てのトラフィックをsing-boxを通して処理できる。

以下の設定では、広告をブロックし、cnドメインのサイトではプロキシを通さない設定(金盾に不審な通信を察知されないため)となっている。


"outbounds(shadowsocks側).password"にはサーバーサイドで設定したパスワードを入力。

"outbounds(shadow-tls側).server"にはVPSインスタンスのIPアドレスを入力。

"outbounds(shadow-tls側).password"にはサーバーサイドで設定したパスワードを入力。

"outbounds(shadow-tls側).tls.server_name"にはサーバーサイドで入力したTLSハンドシェイクを行わせる証明書のドメイン名を入力。

{
  "dns": {
    "rules": [],
    "servers": [
      {
        "address": "tls://1.1.1.1",
        "tag": "dns-remote",
        "detour": "ss",
        "strategy": "ipv4_only"
      }
    ]
  },
  "inbounds": [
    {
      "type": "tun",
      "interface_name": "ipv4-tun",
      "inet4_address": "172.19.0.1/28",
      "mtu": 1500,
      "stack": "gvisor",
      "endpoint_independent_nat": true,
      "auto_route": true,
      "strict_route": true,
      "sniff": true
    }
  ],
  "outbounds": [
    {
      "type": "shadowsocks",
      "tag": "ss",
      "method": "2022-blake3-aes-256-gcm",
      "password": "Yz/779GBeiBoh+pg/0GbZG7lAfviOVUWGGzQPl/1u/8=",
      "detour": "shadowtls-out",
      "udp_over_tcp": {
        "enabled": true,
        "version": 2,
        "multiplex": {
          "enabled": true,
          "protocol": "h2mux",
          "max_connections": 4,
          "min_streams": 4,
          "padding": true
        }
      }
    },
    {
      "type": "shadowtls",
      "tag": "shadowtls-out",
      "server": "インスタンスのIPアドレス",
      "server_port": 443,
      "version": 3,
      "password": "abeshinzo",
      "tls": {
        "enabled": true,
        "server_name": "www.lovelive-anime.jp",
        "utls": {
          "enabled": true,
          "fingerprint": "chrome"
        }
      }
    },
    {
      "tag": "dns-out",
      "type": "dns"
    },
    {
      "tag": "direct",
      "type": "direct"
    },
    {
      "tag": "block",
      "type": "block"
    }
  ],
  "route": {
    "auto_detect_interface": true,
    "final": "ss",
    "rules": [
      {
        "protocol": "dns",
        "outbound": "dns-out"
      },
      {
        "geosite": "category-ads-all",
        "outbound": "block"
      },
      {
        "geosite": "cn",
        "geoip": "cn",
        "outbound": "direct"
      }
    ]
  }
}


 sing-boxのgithubにて自分の環境に合ったパッケージを入手。

Linux

※Ubuntu 18.04 LTS、sing-box 1.2.7で接続確認済み

・GDebiでインストール

・クライアント用のconfig.jsonをユーザーディレクトリに配置

・接続

sing-box run -c config.json

Android

NekoBox For Android

 2023年3月にリリースされたオープンソースのAndroid用マルチプロキシクライアント。shadow-tlsをサポートしている。一部日本語対応。

 GitHubからapkファイルをダウンロードする事で無料で利用できる。PlayStore版はダウンロードが有料で開発者への寄付を意味する。

 クライアントサイドのconfig.jsonをアプリ側でインポートすると、AndroidのVPNとして使用できる。

 (右上部アイコンの右から二番目をタップ→Import from file)


※Android12、NekoBox 1.1.1で動作確認済み


 PlayStore https://play.google.com/store/apps/details?id=moe.nb4a

 GitHub https://github.com/MatsuriDayo/NekoBoxForAndroid


参考

sing-box 网络代理平台的“瑞士军刀”,搭建shadowtls节点. 不良林. (2022年9月24日)2022年10月29日閲覧。

wiki page for the sing-box project. SargerNet. 2023年5月28日閲覧。

MatsuriDayo. MatsuriDayo. 2023年5月28日閲覧。

関連項目

ツール・ソフトウェア・アプリ
専ブラ ChMate - やる夫BBS+エディター
広告ブロック
匿名化・情報セキュリティ VPN - Xray - Sing-box - 防弾ホスティングサーバー
その他 ウェブ魚拓魚拓の取り方) - やる夫BBS+エディター