コンテンツにスキップ

ルーター@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

...