1. HOME
  2. ブログ
  3. CS四方山話(第8話)デフォルトゲートウェイを起点にルーティングの話

CS四方山話(第8話)デフォルトゲートウェイを起点にルーティングの話

珍しく前回(第7話)は予定した範囲まで進みました(後半、駆け足になりましたが)。
今回は、身近な処理とデフォルトゲートウェイを起点にルーティングの話に進めて行きます。

Webにアクセスする際の処理について詳しく解説

手順は下記のようになります。
 ●PCでブラウザにURLを入力【ヒト】
 ●ブラウザがDNSを参照

   ☆DNSはルータのIPアドレスに設定されているとします(DNSの詳細説明を先送りするため)
  ①②:ARPでMACアドレスを取得
  ③④:DNSでURL中のドメイン名をIPアドレスに変換してもらう

PCがIPアドレスでWebサーバにアクセス、Webコンテンツを要求
  ⑤デフォルトゲートウェイの指定に従って、PCはルータにアクセス
  ⑥ルータがWebサーバにアクセス、Webコンテンツを要求
  ⑦ルータがWebサーバからWebコンテンツを取得
  ⑧ルータがPCのブラウザにWebコンテンツを送信

PCのブラウザがWebコンテンツを受信し表示【ヒト】

補足: PCのアドレスは192.168.1.20、ルータのアドレスは192.168.1.1で、LANのネットワークアドレス(セグメント)は192.168.1.0です

ヒト(たとえば、あなた)が介在しているのは、最初と最後(【ヒト】)だけですが、上記のように、その間でブラウザ、PC、ルータが多くの仕事をしています。ちなみに、プロバイダを含めインターネット側でも様々な処理が行われていますが、今回はそこには言及しないこととします(LAN内で行われている処理が、global IP で多段に行われていると考えれば良いので)。

①〜④の処理は、通常のLAN内の処理で第7話に説明した内容ですので、ここでは割愛します。なぜルータがgoogle.comのIPアドレスを答えられるのかは、別途DNSの解説(次回以降)の中で触れることにします。
 
それでは、⑤以降の処理を見ていきましょう。
まずは⑤の処理です。「global IPアドレスへのHTTPS要求が、どのようにしてGoogleさんのサーバまで届くのか?」という点です。ここでデフォルトゲートウェイが登場します。DNS応答で得たアドレスのネットワークアドレスは、自身のモノとは違います。要するに、LAN内にターゲットがいないということになります。その場合には、自分のPCの「ルーティングテーブル」に従って宛先を選びます。

接続の経路を決める情報が書き込まれたルーティングテーブル
ルーティングテーブルというのは、宛先のIPアドレスに対して、どの経路で接続するかを決めるための情報です。デフォルトゲートウェイというのは、このルーティングテーブル上の1つの指定ということになります。ルーティングテーブルは(OSによって多少表現方法が異なりますが)下記のような情報で構成されます。
 ・宛先のIPアドレス(ネットマスクを含む)
 ・経由先(たとえば、ルータなどのゲートウェイ装置)
 ・インターフェイス(自分のPC上のインターフェイス)
 ・メトリック(優先順位。小さいが勝ち)

ルーティングテーブルは、各OSのコマンドライン(Windowsであればコマンドプロンプト、MacOSであればターミナル、Linuxではシェル)で確認することが可能です。Windowsであれば「route print」、MacOS、Linuxであれば「netstat -rn」で表示されます。
 
表示がたくさん出るので分かり難いです(特に、IPv6がアサインされている環境ではIPv6のルーティングも表示されるので、かなりの情報が表示されます)が、機械が理解できるレベルの情報なので、当然、高度な知性を有するあなたなら理解できると思います。整理すると、下記の通りです。

補足:
 127.0.0.0/8はローカルループバックアドレスです。このアドレスにパケットを送ると、自分に返ってきます。通常は127.0.0.1が自分自身です。
 224.0.0.0/4はマルチキャストアドレスです。アドレス範囲によって、リンクローカル、グローバルスコープ、プライベートスコープに分かれます。ブロードキャストアドレスは(このケースでは)192.168.1.255です。マルチキャストとブロードキャストは異なります。この辺りは、また別の機会に。

「MacOSな場合」「Windowsな場合」の2つは、表現が異なるだけで同じ内容を表しています。この設定では、192.168.1.0のネットワーク(自セグメント内、たとえば192.168.1.100)へのパケットは、192.168.1.20が振られたインターフェイスから送信されます。インターフェイスをなぜ指定するのかというと、複数のインターフェイスがある場合(たとえば、ルータ)には、どのインターフェイスを使って送信するのかを指定する必要があるからです。

デフォルトゲートウェイは宅配の配達所のような役割

宛先がdefault、あるいは0.0.0.0で記述された経由先がデフォルトゲートウェイになります。宛先が他のルーティングテーブルのどれにも合致しなかった場合に、このルートが選択されます。今回の例では142.250.196.142は、ルーティングテーブルのどの宛先IPアドレスにも合致しないので、デフォルトゲートウェイのIPアドレス、192.168.1.1に送られることになります。宛先は142.250.196.142ですが直接は届かないので、192.168.1.1に送って後はなんとかしてもらうということです。
 
さて、ここで問題です。パケット/フレームの構造を第6話で説明しましたが、1つのパケットの中に宛先(送信先)IPアドレスは1つしか記述できません。142.250.196.142と192.168.1.1をどのようにさばくのでしょうか?ここで、MACアドレスとIPアドレスという2つのアドレスを持っていることが活かされます(なんで1つの機器に2つのアドレスがあるのだろう? 無駄では? と思った方も居られるのでは? まあ、そんなマニアックな方は希少種だと思いますが)。PCからgoogle.comへのHTTPSリクエストは、下記のようになります。

これを、第7話で用いた「オンラインショッピングの仕組み」と同じ世界で説明しましょう。今回は、オンラインショッピングではなく、宅配便で荷物を送るパターンです。あなたは、荷物を、実家に送ろうと思います。実家(google.com)の住所(142.250.196.142)近所ではなく(ネットワークアドレスが異なるので)大声を出してもその声(ARP)は届きませんので、宅配業者に預けることにします。宅配の配達所(ルータ)は近所にあり、その住所(192.168.1.1)は分かっているので、大声を出して「どこですか?」と尋ねます(ARP要求)。すると、物理的な場所=位置(ルータのMACアドレス)を教えてもらえる(ARP応答)ので、その場所まで荷物を持って行き、実家の住所を指定して発送を依頼します。

NATとNAPT(IPマスカレード)の違いとは?

実家で荷物を受け取ると、お返しの荷物を送ります。この世界が普通の世界と少し違う点は、配達所と実家の住所は公開されています(グローバルIPアドレス)が、自宅の住所は非公開(ローカルIPアドレス)という点です。配達所から実家への荷物の送り元は配達所の住所になります。実家では配達所の住所しか分からないので、お返しは配達所宛に送られます。配達所では、元の荷物が自宅から持ち込まれたことを覚えているので、お返しの荷物は自宅に届けられます。

この配達所の機能がNAT(Network Address Translation)です。ローカルIPアドレス(192.168.1.20)をグローバルIPアドレス(153.240.128.100)に変換(translation)する仕組みということになります。NATは192.168.1.20からのパケットを中継して153.240.128.100から送信したことを覚えているので、153.240.128.100に届いたパケットを192.168.1.20に送信することで、異なるネットワーク(セグメント)間の通信を成立させます。
 
通常(自宅などの環境では)、ルータは1つ(グローバルIPアドレスは1つ)でLAN内には複数の装置(PC、スマホ、HDDレコーダなど)があり、それぞれがインターネット上のサーバにアクセスします。この場合、ルータはインターネット側にアクセスするポートをLAN内のIPアドレス毎に使い分けることで複数のLAN内の機器のインターネットとの通信を実現します。これがNAPT(Network Address Port Translation)です。「IPマスカレード」という(Linux系での)呼び方もありますが、NAPTと同義です。

上記の例では、下記の対応関係になります。
192.168.1.20 ⇔ ポート#40101、192.168.1.30 ⇔ ポート#40102 

ルータは、この対応関係を覚えています。ただし、永続的に覚えているわけではなく、覚えているのは一定の保持時間で、その間に通信がなければグローバル側のポートは解放されます(別のLAN内のPCのアドレスとの対応に利用されます)。

NAT、NAPTまで来たところで、3,100文字オーバとなりましたので、今回はこの辺りで。
次回は、ルーティングに関して、もう少し深掘りしたいと思います。


  • 余談

 今回の第8話は、第7話と同時に書いたのですが、再チェックしています。第6話で図に関してミスをしていました。文章は事務局さんに校正して頂けるのですが、図は自分で修正する必要があるので、ちゃんとしなければと……。ちなみに、「来世ではちゃんとします」というドラマがありますが、このフレーズ好きです。自分のダメな点は簡単には直らないです。「来世ではちゃんとします」と言い放てれば気持ちよいです。

いずれにしても、自分の文章を自分でチェックするのは難しいです。特に私には。ということで、今回から中身を良く理解できる仲間にチェックしてもらうことにしました(第7話にもメスを入れられたので)。皆さんのところに届くまでに、内部チェック、事務局さんでの校正を経て完成度が上がるという図式です。

 かなり他力本願ではありますが、致し方ありません。ネット配信サイトで「男女7人夏物語」を見つけてしまい、35年前、バブル期のスタート直前の世界に浸ってしまって集中できません(電話だ、留守番電話機能だ、ブラウン管TVだ、池上季実子さんは綺麗で、大竹しのぶさんはキュートだ..)。

株式会社シンクロ 中村健

ニュース:CS四方山話がJAPANSecuritySummit 2021に登場

10月25日から11月2日まで開催されるオンラインイベント「JAPANSecuritySummit 2021」で、CS四方山話がLIVE放送されます。
詳細は、下記の画像をクリックし、ご確認ください。多くの皆さんのご参加をお待ちしております。

CS四方山話の過去の記事はこちら(合わせてお読みください)
第1話 セキュリティ対策事始め
第2話 実際にサイバー攻撃を観測してみると……
第3話 サイバー攻撃をどうやって防ぐのか?
第4話 多段防壁とパケットフィルタリングの仕組みをヒモ解く
第5話  WAF、IPS/IDS、UTMの違いを理解しよう
第6話 サイバーセキュリティを考える上で、知っておきたいネットワークの仕組み
第7話 サイバーセキュリティを考える上で、知っておきたいネットワークの仕組み、その2

サイバーセキュリティ四方山話は、メールマガジンにてご案内致します。是非JAPANSecuritySummit Updateのメールマガジンにご登録ください。
メールマガジンの登録はこちらからお願いします。

中村 健 (Ken Nakamura)
株式会社SYNCHRO 取締役 CTO
機械屋だったはずだが、いつの間にかソフト屋になっていた。
以前は計測制御、知識工学が専門分野で、日本版スペースシャトルの
飛行実験に関わったり、アクアラインを掘ったりしていた。
VoIPに関わったことで通信も専門分野に加わり、最近はネットワーク
セキュリティに注力している。
https://www.udc-synchro.co.jp/

関連記事