世界を動かす技術を、日本語で。

エア・カナダの機内ネットワーク制限を回避する話

概要

  • カナダから香港へのAir Canada便での 機内WiFi制限突破 実験の記録
  • 無料テキスト通信 のみ許可されたWiFi環境下でのWebアクセス挑戦
  • DNS通信の抜け道 を利用したプロキシ接続の実現
  • 失敗と成功事例 を交えた技術的アプローチの紹介
  • ネットワーク制限回避の 実践的手法 とその限界の考察

機内WiFi制限突破チャレンジ

  • カナダから香港行きのAir Canada便で WiFiサービス を利用
  • 無料では テキストメッセージアプリ(WhatsApp, Snapchat, WeChat) のみ利用可能
  • Webブラウジングや動画視聴 は有料(30.75カナダドル~)
  • 長時間フライトで 無料範囲を拡張できないか を検討
  • WeChat経由でネットワーク専門のルームメイト と協力し、実験開始

アプローチ1:ドメイン偽装による突破

  • acwifi.com はアクセス可能、github.comは不可
  • /etc/hostsでDNSを書き換え、acwifi.comに自前サーバーのIPを割り当てる案を検証
  • pingによる接続テスト でIP自体が到達不可と判明
    • Cloudflare等の有名IPも同様にブロック
  • ICMPだけでなくTLS接続も不可 (curlでのSSLハンドシェイク失敗)
  • IPホワイトリスト方式 の可能性が高いと判断し、この方法は断念

アプローチ2:DNSポートの利用

  • DNS通信(UDP/53) は許可されていることをdigコマンドで確認
  • 任意のDNSサーバー (例:40.115.144.198)への問い合わせも成功
  • TCPベースのDNS通信 も許可されていることを確認
  • DNSポート(53番)でプロキシサーバーを公開 する作戦に切り替え
    • xrayを用いて VLESSプロトコルのプロキシ を設定
    • クライアント側でxrayを用い、 SOCKS5プロキシ経由でWebアクセス を試行
  • github.comへのcurlアクセスが成功 し、実際に制限突破を実現
  • DNSポートを利用したプロキシ が有効な抜け道であることを証明

究極の手法:DNSトンネル

  • ゲートウェイが DNSパケット内容まで検査 する場合、単純なポート偽装は無効化
  • 本物のDNSリクエスト(例:TXTレコード) にデータを埋め込む「DNSトンネル」が理論上有効
  • DNSトンネルクライアント が手元になかったため、今回は実践未確認
  • より厳重なネットワーク制限への 理論的アプローチ として紹介

まとめ

  • 約4時間かけて機内ネットワーク制限突破 を実現
  • DNSポートの緩さ を突いたプロキシ接続が有効であることを実証
  • 協力したネットワーク専門家の知識とサポート が成功の鍵
  • ネットワーク制限には さまざまな抜け道 が存在するものの、 さらに強固な制御 も理論上可能
  • 実験を通じて得られた知見 とネットワークの仕組みへの理解深化

注記 :本記事の内容は技術的検証を目的としたものであり、実際の利用規約や法律に違反する行為を推奨するものではありません。

Hackerたちの意見

ヨウ素は何年もこれをやってきたよ。 https://github.com/yarrick/iodine

ヨウ素は使ったことないけど、こっちの方がシンプルそうだね。ヨウ素は実際のDNSリクエストでリクエストをラップするんだ。でも今回はそれが必要なかった。ポート53は全くフィルタリングされてなかったから、ポート53でシンプルなプロキシがあれば十分だったんだ。

ダン・カミンスキーが2007年から2008年頃にこれを広めたんだ。もちろん、以前から存在していたけど、彼が最初の公共のDNSトンネル(ozyman)を作ったかもしれないね。彼はiodineや他の人たちに影響を与えて、かなり有名な人だった。ダンは2021年に亡くなった、安らかに。探してみると見つけるのが難しいよ。彼のブログはもうダメだし(彼は亡くなったから...)、多くの企業や人が彼の名前で話してトラフィックを増やそうとしていたから(ハイ、デュオセック...)、インターネットがどうやって歴史を忘れたり再発見したり書き換えたりするかがわかるよ。

そうそう、デルタのフライトでIodineを使って無料Wi-Fiを利用してたって言おうと思ってたんだ。

「このプロジェクト全体で、関連するすべての規制とサービス条件を厳守することを確認します。ただし、支払いを回避して意図されていない方法でサービスを利用した場合、ほぼ間違いなく“厳守”していないことになりますよね?」

うん、こういう投稿にはちょっと混乱するよね。法律を破った自慢みたいなもんだし。数ヶ月前には、子供がモンスターの社員研修サイトをハッキングして、内部のメディアを投稿でシェアしてた特にひどいのがあったんだ。どうして彼らが法執行機関と本当に面倒なトラブルに巻き込まれないのか理解できないよ。今調べたら、その投稿は削除されてた。たぶん、彼はトラブルに巻き込まれたんだろうね。 https://news.ycombinator.com/item?id=44997145

カナダから香港行きの飛行機に乗っていると仮定したら(適当な例だけど)、どこの国の法律が適用されるんだろう?飛行機が登録されている国?

反論:誰が気にするの?こういう無害なコンピュータ遊びで本当にトラブルになる人が出たら教えてよ。それまでは…誰も気にしないでしょ?

「唯一の欠点は、ネットワーク制限を突破してどんなウェブサイトにもアクセスできたものの、飛行機の帯域幅が極端に制限されていて、ウェブブラウジングがかなり苦痛だったことです。残念ながら、これが支払いの欠点でもあります。何度もインターネットにお金を払ったのに、使えないほどひどかったことがありました。まあ、正直に言うと、先日エアカナダで横断飛行したときはWi-Fiは問題なかったけど。」

これはおそらく、彼らが突破できなかったもう一つのセキュリティ層だね。チャットアプリが大量の帯域幅を消費しないように、通常は支払うまで接続が厳しく制限されるんだ。もしそうじゃなかったら、誰かがチャットアプリから映画をストリーミングできちゃうからね。

僕は、支払って遅くてほとんど使えない速度を我慢した不運な人だったよ。でも、それはStarlinkの時代の前の話だからね。WiFiにお金を払うなら、フライトがStarlinkに対応してるか確認する価値はあるよ。

空の上に消費者の権利は存在するのかな?本気の質問だよ!

特定のIPへのpingがタイムアウトしたからって、そのIPがブロックされているとは言えないよ。ICMPが特にブロックされている可能性があるし、ファイアウォールのネットワークルールに従っているんだ。エンタープライズネットワークでは、エンドポイントの発見を許可しないのが一般的だからね。何か見落としているかもしれないけど、ここで訂正してもらえると嬉しいな。これを読んで驚いたよ。

うん、ICMPトンネリングもキャプティブネットワークの一般的なバイパス方法だから、全てのICMPをブロックするのは理にかなってるね。

そうだね、使いたいプロトコルをちゃんとテストする必要があるよ。tcpingやcurl、適切な証明書とSNIドメインを使ったTLSとかね。でも、何かが動かない時は、最後のワッシャーまで分解する前に、電源がちゃんと供給されてるか確認するのと同じように、ネットワークの問題も基本から始めるべきだよ。動かないシンプルなテストや、意味不明な結果が出るのは、何かを忘れてるか、別のところを掘り下げるべきサインだね。

失敗したPINGは、エコーリクエストに応答がなかっただけだってことを忘れないことが大事だよね。リモートホストがリクエストを受け取ったかどうか、そして応答したかどうかは、失敗したPINGではわからないから。両方とも真実であっても、PINGが失敗することはあるし、トラブルシューティング中に技術者がこれに引っかかるのを何度も見てきた。非対称の帰り道が関わっている場合、失敗したPINGが実際に教えてくれることがどれだけ少ないかを常に思い出すことが重要だよ。

これをキャリアの中で何度も説明してきたよ。何かにアクセスできるかどうかを知る唯一の方法は、正確なエンドポイントとプロトコルを試してみることなんだ。アプリケーションを意識したファイアウォールでも、時々は問題を引き起こすことがあるからね。

俺の前の会社では逆だったよ。PINGは常に通じてた、特定のVLANにブロックされていてもね。

「新しいものは、既に知られているが、すっかり忘れ去られたものだ。」DNSを使ってロックされたネットワークから逃げるのもその一つだね。2000年代には、制限のあるホテルのネットワークから出るために使ってたよ。WiFiじゃなくて、有線のイーサネットだったけど。

これ、DNSを使ったトンネリングじゃないよ。ポート53で単にプロキシが動いてるだけで、めっちゃオープンなんだよね。

飛行機のネットワークに手を出すのは勇気がいると思う。飛行機が関わると、人々はすごく敏感になるからね。

もし乗客のWiFiに重要な情報や価値のあるものが漏れてたら、この話は大スクープになってたかも。でも、残念ながら、すべてが厳重に分離されてるんだよね。

これも言おうと思ってた。昔、飛行機で「心臓発作」って言葉を口にしただけで、客室乗務員に追い出されたことがあるよ。文脈も何もなくて、ただその言葉を聞いただけで強制退去。法律や規制で「爆弾」って言うだけで反応しちゃうことがあるからね(たとえ素晴らしいものを説明してる場合でも)。だから、gogoのフライトエンターテイメントに手を出すのは、テロ関連の罪に触れるのと同じくらい危険だよ。

WiFi信号強度の三角測量を避けるために空いている席に移動して、キャビンにカメラがないと仮定して、識別可能な情報でネットワークに認証していない、実際にXrayプロキシ接続を暗号化している(OPはしていなかったけど)、そしてMACランダム化がオンなら、航空会社がこの記事に書かれていることを特定する方法はほとんどないよ。もちろん、DPIや行動分析を使ってネットワークを不正利用していることを検出することはできるけど、もしそうしているなら、最初からこの種の「バックドア」をブロックするだろうね。この記事の免責事項を繰り返すけど、この返信は教育的および研究目的のためだけに意図されているよ。関連する規制やサービス条件を厳守することを確認するよ。

勇気があるのか、ただのバカなのか。

飛行機を操縦するために重要なことが、実際に乗客にNetflixを提供するシステムに接続されているとは信じられないよ。人は緊張するし、理論的には衛星受信機に繋がるボックスをカーネルパニックさせることで何かの情報システムに影響を与えることができるかもしれないけど、飛行機のルーターにルート権限を得ようとしているわけじゃないなら、勇気を持つ必要はないと思う。もっと勇気がいるのは、こういう結果を自分の名前でオンラインに公開することだね。

質問なんだけど、ポート53で動いているSSHを使ってプロキシするのは有効だったかな?Xrayを使うより簡単そうだね。

一部のネットワークではそうだね。以前はプリペイドのモバイルネットワークを使ってた(=あらかじめ固定のGB数を購入して使い切ると、制限されたキャプティブポータルが表示されて、そこで追加購入する感じ)。でも、ポート53のすべてのトラフィックは許可されていて、実際のDNSトラフィックである必要はなかったよ。ポート53でopenVPNを提供している商用VPNプロバイダーもあるくらいだ。

もしリモートマシンにSSHサーバーがあったら、リモートマシンからssh -g -ND 53 root@localhostみたいなこともできたはずで、ポート53でリモートアクセス可能なSOCKSプロキシを公開できたね。

いい記事だね。長距離のフライトで似たようなことをやったことがあるよ。たいてい、機内インターネットゲートウェイによってホワイトリストに登録されている大手クラウドプロバイダーやCDN(例えば、Microsoft/AzureやAmazon/AWS、Google/GCP)があって、静的ページを提供できるんだ。そのプロバイダーがホストしているサイトには、ドメインフロントニングを使うことでアクセスできるよ(この投稿の著者が「偽装ドメイン」と呼んでいるやつね)。

ここでの論理がよくわからないな。>「acwifi.comにはアクセスできるけど、github.comにはアクセスできないということは、ネットワークがDNSサーバーに制限をかけていて、ホワイトリストにあるドメイン名(例えばインスタントメッセージングのドメイン)しか解決できない可能性があるの?」> もしそうなら、/etc/hostsを編集して自分のサーバーをacwifi.comとして偽装することはできるの?そうすれば、すべてのリクエストがターゲットのウェブサイト(github.com)に到達する前に自分のサーバーを通ることになるけど。/etc/hostsにホストを追加すると、飛行機のDNSサーバーに問い合わせないことになるから、外部サーバーをどうやって「偽装」しているの?それに、github.comの例に直接行く代わりに、acwifi.comを経由する意味は何なの?

リクエストの宛先IPアドレスがacwifi.comに対して有効かどうかに関係なく、Host: acwifi.comを持つHTTP/HTTPSリクエストは許可されている可能性があるね。こういう手法は、国全体のファイアウォールを回避するために使われているのをよく見るよ。深いパケット検査では、「Host:」ヘッダーが誤解を招くような場合や、2つのTCPパケットに分割されている場合などのエッジケースに対応できないことが多いからね。「ドメインフロントニング」を見てみて。

スピードが遅かったのは、QOSがチャット専用の接続に制限してたからじゃないかな。「支払い済みのマシン」のMACアドレスを偽装すればよかったのに。ネットワーク上のMACアドレスを監視して、許可されているものを見つけるまで試すユーティリティを作ったことがあるよ。どうやら、誰かがそれをするアプリをリリースしたみたいだね。

制限されたり優先度が下げられたりしていたかもしれないけど、たいていは飛行機の接続が本当に高遅延なんだ。一部の機内インターネットは静止衛星を通じて提供されていて、最低でも250msの遅延がある。低軌道衛星を使っても、Wi-Fiベンダーのデータセンターに戻されてからインターネットに出ると思う。遅延が数百msになると、どんなに帯域幅があってもインターネット接続がスムーズに感じられないよ。そして、バッファーブロートのせいで、高遅延接続を理論的に飽和させられるワークロードでも実際にはうまくいかないことがあるんだ。