Sing-box
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.bing.com",
"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を通して処理できる。
※旧バージョンで記載していたドメイン迂回・広告ブロックルールは確認中
"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
}
},
{
"type": "shadowtls",
"tag": "shadowtls-out",
"server": "インスタンスのIPアドレス",
"server_port": 443,
"version": 3,
"password": "abeshinzo",
"tls": {
"enabled": true,
"server_name": "www.bing.com",
"utls": {
"enabled": true,
"fingerprint": "chrome"
}
}
},
{
"tag": "dns-out",
"type": "dns"
}
],
"route": {
"auto_detect_interface": true,
"final": "ss",
"rules": [
{
"protocol": "dns",
"outbound": "dns-out"
}
]
}
}
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日閲覧。