VPNの基礎知識

Shadowsocksって何のこと? どんな仕組みなの?VPNより高速に中国から海外のサイトを見るために

2017年7月21日

SS, SSR, 中国語では影梭と呼ばれるShadowsocks。中国ではVPNよりも普及している感があります。グレートファイアウォール(GFW)を超えて海外のサイトを見る為の手段として多くの人が利用しています。
では、このShadowsocksとはなんでしょうか?

Shadowsocksとは?

ShadowsocksはClowwindyという中国人によって開発されたSocks5をベースとしたプロキシです。公式ホームページによれば、「トラフィックを守る安全なSocks5プロキシ」と称しています。そもそも、Clowwindyの開発した目的は「暗号化によって安全性を確保しながら、GFWを突破する」為とのことです。

暗号化の方法は、AES, Blowfish, IDEA, RC4, ChaCha20等を使用出来ます。その後、より安全な「AEAD暗号」が標準になり、さらにその改良版として「Shadowsocks 2022(SIP022)」も策定されています。また、省略されたハンドシェイクでのTCP接続が可能で、リクエスト毎に1つの接続が送信されるのでVPNに比べると接続速度も速く、電池の消耗も抑えられるという特徴があります。今現在もオープンソースで開発が進められおり頻繁にアップデートされています。

Shadowsocksの仕組み

非常に分かりやすかったのでこちらのサイトを参考にさせて頂きました。

参照写给非专业人士看的 Shadowsocks 简介

中国の現在

今現在中国の通信状況はこのようになっています。グレートファイアウォール(GFW)の詳細はこちら。

関連中国でVPNがなんで必要なの?分かりやすく説明します!

関連なんでVPNが繋がらないの?中国でVPN回線を維持する難しさを解説します

全ての中国からのアクセスはGFWを通して行われており、全てのトラフィックはフィルタリングされています。アクセスしたサイトがブラックリストに該当していた場合、Connection Resetされて「接続出来ませんでした」と表示されます。

SSHトンネル

この状況に対処する為に、外部のクライアントサーバーを利用してGFWのフィルタリングを迂回する方法を思いつきました。HTTP, Socksクライアント, VPNサービス等です。代表的な方法はSSHサーバーを使った接続が挙げられます。

  • 1. 端末からSSHサーバーまで暗号化されたSSHトンネルが形成されます
  • 2. SSHトンネルで繋がったSSHサーバーを通して、アクセスしたウェブサイトのリクエストを出します
  • 3-4. SSHサーバーにかえってきたレスポンスがSSHトンネルを通して端末に戻ってくる

GFWの検問が始まった当初はこの方法で対処可能でした。SSHは主にRSA暗号を使用しているので、GFWと言えども通信の最中にトラフィックの中身を解析して分析する事は不可能です。このお陰で、Connection Resetされたり、検索禁止キーワードを見られる事は無くなります。

しかし、端末とSSHサーバーとのセッションは特徴的で分かりやすいため、GFWはSSHの接続を検知しブロックするようになりました。その後のGFWは検知を強めており、トラフィックを自動判定して、疑わしい接続やIPをブロックしています。

Shadowsocksの登場

ここでShadowsocksが登場します。
ShadowsocksはSSHがSocks5に置き換わったと見てもらって構いません。基本的にはSSHトンネルと同じ考え方と同じです。端末のSSクライアント、つまりSS-LocalはSocks5プロトコルを通してSS (Shadowsocks) サーバーとやり取りします。

SSHと違うポイントは外部から明らかに識別出来るトンネルを確立する訳ではなく、httpsのように暗号化された通常のTCPカプセルとして通信するという点に特徴があります。しかしhttpsとは異なっており、通常のTCPカプセルのように偽装して通信すると言った方法です。

Shadowsocksの通信内容は暗号化されているのでGFWは通信内容を分析出来ません、しかしSSHのような特徴もないので通常の通信として処理します。このようにしてGFWの干渉を受けずにインターネット通信を可能にしています。

ただし、これはあくまで「初期のShadowsocks」の仕組みです。その後のGFWは検知を強めており、「正体不明の暗号化されたTCP通信」を自動判定で見つけると接続を遮断したり、偽のデータを送って反応を試す能動的なプローブ(アクティブプロービング)を打ってきたりします。この検知に対しては、Shadowsocks側も接続の先頭バイトの見え方を変える対策を実装に取り込んでいます。また、Shadowsocksとは別系統ですが、実在するWebサイトのTLSハンドシェイクを借りる「REALITY」のように、偽装の作り方そのものを組み替えたプロトコルも登場しています。

Shadowsocksの特徴

VPNと比べるとどんな特徴があるのでしょうか?7つの特徴を紹介します。プロキシがベースになっているのでこちらも参照してみて下さい。

関連「プロキシ」「プロキシサーバー」って何のこと?VPNと比べて優しく解説

1. DNSポイズニングの回避、IPSからの訪問サイト特定を防止

ShadowsocksサーバーがリモートでDNSの検索等を代行してくれるのでGFWによるDNSポイズニングの心配もありませんし、ISP(インターネットプロバイダー)もDNSからユーザーが訪問したサイトを特定することは出来ません。

2. 高い安全性

全てのトラフィックが暗号化されており、通常のProxyクライアントに比べるとより多くの暗号化方式が使えます。Proxyサーバーを利用しているので100%自分のIPが特定されないという訳ではありません。現在の主要なShadowsocks実装では、AES-256-GCMやChaCha20-Poly1305といったAEAD暗号(認証付き暗号)が標準になっています。匿名性を更に向上したい場合は、トラフィック管理ツールや、Torに似たオプションを実装する必要があります。

3. 速度と安定性

PPTPやL2TPと言ったプロトコルはGFWに特定されているので、速度低下や大幅なパケットロスが生じます。しかしSSはGFWの干渉を受けにくい構造になっているため、VPNより速度が落ちにくい傾向があります。また、同じ理由でパケットロスも起きにくく、接続が安定しやすくなります。

4. 切替えが容易

通常VPNを使っている場合、中国国内のサイトにアクセス出来ないもしくは速度が低下します。また接続の切替えに時間がかかります。ShadowsocksはPACリスト(接続ルール)やモダンなアプリのルーティング設定をサポートしており、協力者が作ったホワイトリストに基いて国外のサイトにアクセスする時のみShadowsocksを使うよう設定出来ます。

サーバーとの接続の際にハンドシェイクの処理方法に最も処理項目が少ない方法を採用しています。httpsでの接続よりも処理数が少ない為に、VPNや他のProxyに比べて高速で切替・接続が出来ます。

5. オープンソース

ソースコードが公開されており、誰でも中身を検証できます。バックドアが仕込まれていないかを第三者が確かめられる点は、通信を預けるプロトコルとして大きな安心材料です。

6. 節電

VPNと違ってより合理的な構造で処理項目が非常に少ない方法でTCP接続が可能な為電力の消耗を抑えられます。携帯機器では、VPNに比べて電池の減りが抑えられる傾向があります。スペックのあまり高くない機種でも軽快に動作します。

7. あらゆるデバイスに対応している

Windows, Linux, Mac, Android, iOS, またMerlinやOpenWrtなどのルーターファームウェアにも対応しています。またクライアントアプリも数多く開発されているので自分で好きなアプリを選ぶ事ができます。

関連【iOS】Shadowsocks(R) おすすめアプリの紹介と比較

デメリット

素のShadowsocksは検知の対象になっており、使う実装が対策に追随していることが前提になります。そのうえで強いて挙げれば、信頼出来るShadowsocksプロバイダーがほとんど無いという点が課題です。

Shadowsocksを運用する場合それなりに速度が出るサーバーをレンタルする必要があります。中国からだと中国3大プロバイダーと直接パイプのあるサーバーをレンタルする必要があり、例えば速度が出るCN2(中国付近からの)で接続できるサーバーのレンタル料は通常のサーバーの三倍もしくはそれ以上します。さらに現在では、CN2回線すら検閲対象になることがあるため、検閲の壁を通らずに国境を超える「IPLC / IEPL」と呼ばれる国際専用線を採用した高級プロバイダーを選ぶ方法もありますが、そのぶん費用がかさみ、コスト面も大きなハードルになります。

まさにこの「信頼出来るプロバイダー探し」こそが、Shadowsocks系サービス最大のハードルです。プロトコルの選定やサーバー品質を自分で見極める自信が無ければ、UCSSのように、Shadowsocksを開発初期から運用し、中国向けプランの全サーバーに国際専用回線を通しているサービスを選ぶのが、遠回りに見えて確実性の高い選び方です。

2015年の開発中止と当局の圧力

残念な事に開発者のClowwindyは2015年8月22日に中国当局の圧力により開発中止を発表しました。その数日後(8月25日)、ShadowsocksをアップロードしていたGitHub https://github.com/(ソフトウェア開発者用のプラットフォーム)は大規模なDDoS攻撃を受けたと公表しました。開発中止との関連を指摘する報道もあります。

1人の中国人が書いた1つのコードを当局が非常に危険視している事は注目に値します。GFWで防ぎきれないプロトコルが開発された為当局は強硬手段に出たと考えられます。

SS(Shadowsocks)とSSR(ShadowsocksR)の違いと、今どちらが動くのか

Shadowsocksの開発データは多くの人がバックアップしていたため、開発はコミュニティに引き継がれ、現在もshadowsocks-rustなどの実装が更新されています。一方で、その派生として@breakwa11が開発したのがShadowsocksR(SSR)です。このSSとSSRは名前は似ていますが同じプロトコルではありません。

ShadowsocksRは@breakwa11により開発されており、オリジナルになかったステルス性の向上や、安全性の向上、Torのような機能を持たせていました。しかし、このSSRの開発も2017年には完全に停止しています。

素のShadowsocksは、2021年11月から動き出したGFWの「完全に暗号化されたトラフィック」検知の対象になりました。TCPの先頭パケットのビットの偏りを見て、意味のある平文が一つも含まれない接続を、一定の確率で自動的に遮断する仕組みです。

ただし、先頭の数バイトを印字可能なASCIIに寄せるといった回避策は2022年1月以降に主要な実装へ取り込まれており、USENIX Security 2023の報告では、これらを入れた実装は検知の例外側に回り、2023年2月の時点でも通っていました。Shadowsocks本体は終わった技術ではなく、使っている実装が追随しているかどうかで結果が変わる段階にあります。

一方でSSR(ShadowsocksR)は事情が違います。2017年に開発が止まったまま追随が途絶えており、現在あえて選ぶ理由はありません。

Shadowsocks以外にも、実在するWebサイトのTLSハンドシェイクを借りる「VLESS+REALITY」や、UDPで遅延とパケットロスの大きい回線でも速度を稼ぐ「Hysteria 2」といったプロトコルが登場しています。

ただしこれらはShadowsocksの後継ではなく、設計思想の異なる並列の選択肢です。そしてどれを選んでも、サーバーのIPそのものを遮断されれば繋がらなくなる点は変わりません。GFWは能動的にプローブを打ってIP単位・ポート単位で潰してくるので、プロトコルの工夫は検知される確率を下げるものであって、遮断を無くすものではありません。繋がり続けるかどうかは、プロトコルの新旧よりも、実装が検知に追随しているかと、どの回線を通るかに大きく左右されます。

Shadowsocks系プロトコルの速度や安定性はVPNと同じくサーバーのネットワークや性能に依存します。中国から利用する場合、CN2と呼ばれるChinaTelecomの次世代ネットワークを使用しているサーバーや、国際専用線(IPLC/IEPL回線)を使用していないと速度が出ない傾向にあります。(CN2でなくても、通常のVPNより速度が落ちにくい傾向があります。)実際に高速な通信を求めるなら、CN2やIPLC/IEPL回線を採用しているプロバイダーかどうかが選定の分かれ目になります。

べすとVPNおすすめのプロバイダー
べすとVPNでは日本語のサポートにも対応しているプロキシ専門プロバイダーUCSSをオススメしています。UCSSは2017年創業のプロバイダーで、公式サイトでもShadowsocksを開発初期から利用してきたと説明しています。公式FAQでは、転送はTCPが主体でUDPにも対応すること、HTTPに似たパケットへ偽装できるためファイアウォールに探知されづらいこと、通信はWireGuardと同じAEAD(認証付き暗号)で保護されていることを明記しています。
中国向けのプランは全サーバーが国際専用回線経由で、公共のネットワークを通りません。料金は一般的なVPNより高めで、長期向けのStandardプランは通信量の上限を選ぶ方式ですが、専用回線を通る分、速度が落ちにくい構成です。

なお、UCSSは現在サブスクリプションURLの提供を終了しており、この記事で紹介したような汎用クライアントへ自分でサーバー情報を設定する必要はありません。プロトコルやアプリを選ぶ手間そのものが不要な「公式専用アプリ」のみで、ログインするだけで接続できます(廃止の経緯はこちらの記事で詳しく解説しています)。

UCSSの公式サイトで詳細を確認する

-VPNの基礎知識
-