インターネット向け通信にプロキシはどのように関わるのか(Webexの特殊な例付き)

プロキシって?

家庭などのPCでインターネットに接続する際はあまり関係のない話だが、いち企業がインターネットに通信をしたいとなるとプロキシ(サーバ)を設置することは多い。

プロキシとは、端末からインターネット網の間に、通信の中継役として設置されるサーバのこと。

プロキシを設置すると例えば以下のいいことがある。

  • 一度アクセスしたサイトへの再アクセスが速くなる
    これまでにWebサーバから受信したWebサイトの情報をプロキシ自身のHDDに一時保存(≒キャッシュ)することで、次そのサイトにアクセスする際は、Webサーバまで行かずともプロキシが情報を持っているので、通信の高速化を図ることができる
  • 特定のURLをアクセス禁止にできる
    有害とされるWebサイトやアドレスをリスト化し、それに該当する通信は全て遮断などすることで、セキュリティを脅かすコンテンツにそもそもアクセスできないようにできる

メリットは他にもあるが一旦はこんな感じ。

 

プロキシを経由した場合の端末からインターネットまでの通信

プロキシ経由のインターネット通信は図に表すとこんな感じ。

 

f:id:rinda_1994:20210219203509p:plain


①〜④がどのような通信なのかを、上図で各機器に振っているIPも交えて説明する。

 

①PC→プロキシサーバ

ブラウザでプロキシ用の設定を行っている場合は、PCからのパケットの宛先IPはWebサーバではなくプロキシサーバとなる。

送信元IP:172.10.1.1 宛先IP:10.1.1.1 

 

②プロキシサーバ→DNSサーバ

パケットの中にあるHTTPリクエストデータの中には「最終的な目的地であるWebサーバのドメイン」が入っている。で、そのドメインをWebサーバのグローバルIPに名前解決するため、プロキシサーバはDNSサーバにパケットを投げる。

送信元IP:10.1.1.1 宛先IP:10.2.1.1  

 

DNSサーバ→プロキシサーバ

DNSサーバはドメインから名前解決をし、WebサーバのIPをプロキシサーバに教える。

送信元IP:10.2.1.1 宛先IP:10.1.1.1

 

④プロキシサーバ→Webサーバ

Webサーバに向けてパケットを飛ばす。

送信元IP:10.1.1.1 宛先IP:143.100.25.2

 

Webexアプリの通信の場合

という感じでプロキシ周りの通信は通常上図の流れになるのだが、今日たまたまWebexアプリの通信について調べている中で、少し仕様の異なる話に出会った。

一応説明しておくと、Webexはオンラインミーティング用のアプリ。

 

Webexアプリの通信は図に表すとこんな感じらしい。

 

f:id:rinda_1994:20210305205158p:plain
 

 

この図ではDNSサーバは省略している。


ざっくり言うと、まずPCは通信①を走らせ、自身のローカルIPやグローバルIPCiscoクラウドにあるサーバに伝える。そして参加者全員のPCがサーバに自身の情報を伝えて会議の準備ができ次第、映像音声データを届ける用途で通信②が走る。

 

通信①と②の特徴はそれぞれ以下のように説明できる。

 

通信①
  • オンラインミーティングを始めるまでの準備のための通信
  • プロキシを経由する
  • アプリケーション層はHTTPSトランスポート層TCP

 

通信②
  • 映像音声データを届けるための通信
  • プロキシを経由しない
  • アプリケーション層はSRTP、トランスポート層UDP

 

要は同一アプリの通信だが、タイミングによってプロキシを経由するものとしないものがあるということ。

 

通信②はインターネットに出るにもかかわらずプロキシを経由しない。これは参考リンクにあるCiscoのページに書いてあったことだ。その理由については、はっきりとした理由を見つけられなかったので以下勝手な推測だが・・・

 

OSやブラウザのプロキシ設定を有効にすると、中にドメインの情報を含む通信はプロキシを経由してインターネットに出る仕組みになっているのだと思う。

で、ドメインを持つ通信のアプリケーション層はHTTP/HTTPSであるため、アプリケーション層がSRTPの通信②はドメインを持たない。なので通信②はプロキシを経由せずにインターネットに出ていくのではないかと考えている。

 

 

まとめていないまとめ

調べているとMicrosoftTeamsやGoogleMeetsなど、メジャーなWeb会議ツールは大体WebRTCという仕様に則って作られていて、上図のWebexの通信フローとおおよそ似た形式になっているようだった。調べてたら少し面白さを感じたので、またいつか時間があったらWebRTCでWeb会議アプリ作りたいと思う。

参考

【図解】httpプロキシサーバの仕組み(http GET/https CONNECTメソッド)や必要性・役割・メリットデメリット・DNSの名前解決の順序 | SEの道標

WEBプロキシとは? 仕組みや機能・メリットについて解説|セキュリティコラム|株式会社網屋

プロキシサーバとは

https://www.cisco.com/c/dam/m/ja_jp/solutions/webex/pdf/guide-to-using-webex-safely.pdf