コンテンツにスキップ

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

...