Sing-box

2022年10月29日 (土) 03:07時点における三男wiki>一反もめんによる版 (ページの作成:「Category:ネットワークセキュリティ  sing-boxはプロキシ各プロトコルの統合プラットフォームである。 == 概要 ==  2022年10月に中国北京市で開催された中国共産党第二十次全国代表大会に合わせ、GFW(以下、「金盾」と言う)がアップグレードされ情報統制が強化された。今まで金盾回避に使われてきた、V2RayやXrayでサポートしているVMESSや、TLS…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

 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サーバーの構築を前提に以下に導入方法を記載する。


必要なものは以下の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のサーバー側設定は以下の通り。

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

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

{
  "inbounds": [
    {
      "type": "shadowtls",
      "listen_port": 443,
      "handshake": {
        "server": "www.bing.com",
        "server_port": 443 
      },
      "detour": "shadowsocks-in"
    },
    {
      "type": "shadowsocks",
      "tag": "shadowsocks-in",
      "listen": "127.0.0.1",
      "method": "2022-blake3-aes-256-gcm",
      "password": "Yz/779GBeiBoh+pg/0GbZG7lAfviOVUWGGzQPl/1u/8="
    }
  ]
}


sing-boxを再起動。

systemctl restart sing-box

クライアント設定

各OS共通

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


shadow-tlsのクライアント側設定は以下の通り。socks/httpプロキシを使用する例を記載する。

"outbounds"の"password"にはサーバーサイドで設定したパスワードを入力。

"server"にはVPSインスタンスのIPアドレスを入力。

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

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

{
  "inbounds": [
    {
      "type": "mixed",
      "listen_port": 1080,
      "sniff": true,
      "set_system_proxy": true
    }
  ],
  "outbounds": [
    {
      "type": "shadowsocks",
      "method": "2022-blake3-aes-256-gcm",
      "password": "Yz/779GBeiBoh+pg/0GbZG7lAfviOVUWGGzQPl/1u/8=",
      "detour": "shadowtls-out",
      "multiplex": {
        "enabled": true,
        "max_connections": 4,
        "min_streams": 4
      }
    },
    {
      "type": "shadowtls",
      "tag": "shadowtls-out",
      "server": "インスタンスのIPアドレス",
      "server_port": 443,
      "tls": {
        "enabled": true,
        "server_name": "www.bing.com"
      }
    },
    {
      "type": "direct",
      "tag": "direct"
    },
    {
      "type": "block",
      "tag": "block"
    }
  ],
  "route": {
    "rules": [
      {
        "geosite": "category-ads-all",
        "outbound": "block"
      },
      {
        "geosite": "cn",
        "geoip": "cn",
        "outbound": "direct"
      }
    ]
  }
}


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

Linux

※Ubuntu 18.04 LTSで接続確認済み

・GDebiでインストール

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

・ブラウザのプロキシ設定でsocks5(host:127.0.0.1, port:1080)を使用するよう設定

・接続

sing-box run -c config.json

Android

※確認中

クライアントアプリがないため、Termuxで接続する。そのためLinuxとほぼ同様と思われる。

参考

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