コンテンツにスキップ

ルーター@L3

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. ルーター

ルーターとは

異なるネットワーク間 (LAN と LAN、LAN と WAN など) で通信できるようにし、加えて同時に複数の宛先に通信をルーティングする。


ルーティング

▼ ルーティングとは

受信した通信を適切な宛先にフォワーディングすること。

通信の宛先を制御することを表す場合、単に『フォワーディングする』よりも『ルーティングする』と表現したほうがよい。

▼ パスベースルーティング

URL を基点としたパスに応じて、通信のルーティング先を決める。

ホストベースルーティングと組み合わせることもできる。

▼ ホストベースルーティング

Host ヘッダー値に応じて、通信のルーティング先を決める。

パスベースルーティングと組み合わせることもできる。

▼ 割合ベースルーティング

設定した振り分け率に応じて、通信のルーティング先を決める。

カナリアリリース、ブルー/グリーンデプロイメントなどに使用する。


配置場所

ルーターは次の場所に配置する。

  • パブリックネットワーク
  • 各プライベートネットワークの入り口
  • 各プライベートネットワーク間の共有の境界地点

プライベートネットワークの入り口に配置する場合、例えば、自宅内に配置するルーターがある。

インターネットサービスプロバイダーから貸出されるモデムでアナログ信号をデジタル信号に変換した後、これにルーターを接続し、自宅内/外のネットワークを繋ぐ。

router


ルーターの種類

ルーター名 配置場所 役割
コアルーター インターネットサービスプロバイダー内のネットワーク 同じプロバイダーや異なるプロバイダーのネットワーク間を繋ぐ。
センタールーター 一般企業内の拠点間WANネットワーク 本社と支社のネットワーク間を繋ぐ。
エッジルーター (エッジゲートウェイ) 一般企業内の拠点間WANネットワーク 異なる支社や営業所のネットワーク間を繋ぐ。
ブロードバンドルーター、Wifiルーター 自宅内のネットワーク 自宅内/外のネットワーク間を繋ぐ。ブロードバンドルーターであれば有線、Wifiルーターであれば無線で接続することになる。


ホップ

▼ ホップ数

クライアント側からサーバー側までの間に経由するルーター数のこと。

ホップ数は、traceroute コマンドで確認できる。

▼ ホップバイホップルーティング

ネットワーク内でルーターがルーターに通信をルーティングするとき、各ルーターが最適なルーティング先を選択すること。

router_hop-by-hop-routing


02. NATルーター

NATルーターとは

NAT 処理を実行できるルーターのこと。


NAT (静的NAT) 処理:Network Address Translation

▼ NAT処理とは

配置場所 処理
パブリックネットワークとプライベートネットワークの境目 NATルーターがグローバルIPアドレスを持ち、パブリックネットワークとプライベートネットワークの双方向に対する通信時、プライベートIPアドレスに相互変換する。
プライベートネットワークとプライベートネットワークの境目 NATルーターがプライベートIPアドレスを持ち、プライベートネットワークとプライベートネットワークの双方向に対する通信時、プライベートIPアドレスに相互変換する。

種類の異なるネットワーク間で、IP アドレスを相互変換する。

1 個の IP アドレスに対して、1 個の内部 IP アドレスを紐付けられる。

図で言う上側のアウトバウンド通信時の送信元 IP アドレスの変換を『SNAT 処理』といい、下側のインバウンド通信時の宛先 IP アドレスの変換を『DNAT 処理』という。

1 個の通信で両方が必要である。

nat-router

▼ DNAT処理:Destination NAT

NAT 処理のうち、宛先 IP アドレスを変換すること (グローバルIPアドレス ➡️ プライベートIPアドレスプライベートIPアドレス ➡️ プライベートIPアドレス) 。

NAT ルーター自体を複数のプライベートネットワークで共有することがある。

グローバルからプライベートへのnat変換

*例*

NAT ルーターは、プライベートネットワークに入るとき、パケットのヘッダー情報における『宛先』のグローバル IP アドレスをプライベート IP アドレスに変換する。

▼ SNAT処理:Source NAT

プライベートからグローバルへのnat変換

NAT 処理のうち送信元 IP アドレスを変換すること (プライベートIPアドレス ➡️ グローバルIPアドレスプライベートIPアドレス ➡️ プライベートIPアドレス) 。

NAT ルーター自体を複数のプライベートネットワークで共有することがある。

*例*

(1)

NAT ルーターは、プライベートネットワークから出るとき、パケットのヘッダー情報における『送信元』のプライベート IP アドレスをグローバル IP アドレスに変換する。

例えば、GoogleでWebページを見ながら、Gmailアプリケーションを稼働している場合、リクエストにおけるパケット情報として…

送信元プライベートIPアドレス SNAT処理による変換 送信元グローバルIPアドレス
192.168.1.1  ⇄  200.1.1.1
(2)

『送信元プライベート IP アドレス』『宛先グローバル IP アドレス』『メールサーバーで POP3 プロトコルを受信する 110 番ポート』を指定して、メールサーバーにリクエストを送信する。

GET https://example.com:110
(3)

『送信元プライベート IP アドレス』『宛先グローバル IP アドレス』『Web サーバーで HTTP リクエストを受信する 80 番ポート』を指定して、Web サーバーにリクエストを送信する。

ただし、80番ポートは省略可能。

GET https://example.com:80
(4)

『送信元プライベート IP アドレス』『宛先グローバル IP アドレス』『DNS サーバーで TCP スリーウェイハンドシェイクを受信する 53 番ポート』を指定して、DNS サーバーにリクエストを送信する。

GET https://example.com:53
(5)

これらの『送信元プライベート IP アドレス』が、NAT ルーターで、グローバル IP アドレスに変換される。

▼ 外部IPアドレス、内部IPアドレス、ターゲットIPアドレス

かなり重要。

NAT ルーターの文脈では、外部 IP アドレス、内部 IP アドレス、ターゲット IP アドレスという用語を使うことがある。

これは、DNAT 処理と SNAT 処理で意味合いが異なることに注意する。

DNAT/SNAT処理 外部IPアドレス 内部IPアドレス ターゲットIPアドレス
DNAT処理の場合 外部IPアドレスをネットワークに公開し、外部IPアドレスを宛先IPアドレスとしたパケットを受信した場合に、宛先IPアドレスを内部IPアドレスに変換してルーティングする。 NATルーターを通過した後、パケットの宛先IPアドレスを内部IPアドレスに変換する。 無し
SNAT処理の場合 NATルーターを通過した後、パケットの送信元IPアドレスを外部IPアドレスに変換する。NATルーターのIPアドレスを指定してパケットを送信する必要はない。 NATルーターが受信したパケットのうちで、指定した『送信元IPアドレス』を持つパケットのみルールを適用し、そうでないパケットはそのまま通過させる。 NATルーターが受信したパケットのうちで、指定した『宛先IPアドレス』を持つパケットのみルールを適用し、そうでないパケットはそのまま通過させる。


03. NAPTルーター

NAPTルーターとは

NAPT の処理を持つルーターのこと。


NAPT (動的NAT、IPマスカレード) 処理:Network Address Port Translation

▼ NAPT処理

配置場所 処理
パブリックネットワークとプライベートネットワークの境目 NAPTルーターがグローバルIPアドレスを持ち、パブリックネットワークとプライベートネットワークの双方向に対する通信時、プライベートIPアドレスに相互変換する。
プライベートネットワークとプライベートネットワークの境目 NAPTルーターがプライベートIPアドレスを持ち、プライベートネットワークとプライベートネットワークの双方向に対する通信時、プライベートIPアドレスに相互変換する。

『IP マスカレード』ともいう。

種類の異なるネットワーク間で、IP アドレスとポート番号を変換すること。

1 個の IP アドレスに対して、複数の内部 IP アドレスを紐付けられる。

AWS や GCP などで使用されているような NAT ルーターはこちらであり、IP アドレスとポート番号の両方を指定することにより、VPC 内のプライベート IP アドレスに単一のパブリック IP アドレスを割り当てるようになっている。

napt-router

▼ DNAT処理の場合

プライベートネットワークから出るとき、パケットのヘッダー情報における『送信元』のプライベート IP アドレスをグローバル IP アドレスに変換する。

ただし、異なるプライベート IP アドレスが同じグローバル IP に変換されてしまうため、これを識別するために、ポート番号を複数の異なるポート番号に変換し、グローバル IP アドレスに付け加える。

*例*

送信元プライベートIPアドレス 変換前ポート番号 DNAT処理による変換 送信元グローバルIPアドレス 変換後ポート番号
192.168.2.1 50011   130.X.X.X:50011 50011
192.168.3.1 50011    130.X.X.X:50012 50012

napt変換

▼ SNAT処理の場合

プライベートネットワークに入るとき、付け加えられたポート番号を元に、パケットのヘッダー情報における『宛先』のグローバル IP アドレスを、異なるプライベート IP アドレスに変換し分ける。

napt変換_2


標準的NAPTルーター

▼ iptables (Linux/Ubuntu) による標準的NAPTルーター

Linux/Ubuntu での iptables は、標準的な NAPT ルーターかつパケットフィルタリング型ファイアウォールである。

特に、NAT ルーターは /etc/sysconfig/iptables ファイルの nat テーブルで設定する。

iptables-save コマンドでこのファイルを作成できる。

nat テーブルで使用できるチェイン配下の通りである。

INPUTFORWARD は使用できない。

nat テーブルで使用できるチェイン名 説明
OUTPUT 送信を許可/拒否する対象のパケットを定義する。
PREROUTING 宛先IPアドレスとポートを変換する対象のパケットを定義する。ルーティング前に実行する。
POSTROUTING 送信元IPアドレスとポートを変換する対象のパケットを定義する。ルーティング後に実行する。

*例*

$ cat /etc/sysconfig/iptables

...

*nat
# iptableで受信したパケットに関して、宛先IPアドレスを『10.0.1.2』に、ポート番号を『80』に変換する。
-A PREROUTING -p tcp -m tcp --dport 10080 -j DNAT --to-destination 10.0.1.2:80
# iptablesから送信するパケットに関して、送信元IPアドレスを『10.0.1.3』に変換する。
-A POSTROUTING -d 10.0.1.2/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 10.0.1.3
COMMIT

...