GRE
元のパケットなどにGREヘッダーと外側のIPヘッダーを付け、別のIPネットワークを通して運ぶトンネリングプロトコルである。中継網は外側の宛先IPアドレスへ転送し、GRE自体は暗号化を行わない。
イマシルちゃんの解説
離れた二つのネットワークをつなぎたいとき、途中の網が内側のアドレスを知らない場合があるよ。
GREは、元のパケットを別のパケットで包んで運ぶ仕組みなんだ。
外側には、トンネルの出口となる装置の宛先を付けるよ。
途中のルータはその外側の宛先へ届け、出口の装置が包みを外して元の通信を取り出すの。
こうすると、中継網に内側の宛先までの経路をすべて登録しなくても運べるんだ。
ただし包むだけでは内容は隠れないから、秘密を守りたいときはIPsecなどの保護と組み合わせるよ。
この解説はわかりやすかったですか?
より深い解説
内側と外側の宛先
GREトンネルの入口は、運びたいパケットにGREヘッダーを付け、その外側にトンネル端点のIPヘッダーを付ける。出口はそれらを取り除き、内側のパケットを取り出して転送する。IPv4でGREを直接運ぶ場合のIPプロトコル番号は47であり、TCPやUDPのポート番号ではない。
中継ルータに必要なのは、トンネル出口へ届く経路である。元の内側パケットの宛先までの経路を、中継網の全ルータが持つ必要はない。一方、トンネルの入口や出口には、内側の通信を正しく渡す経路設定が必要になる。
GREはカプセル化を行う仕組みであり、暗号鍵の共有、通信相手の認証、内容の秘匿を単独で提供するものではない。暗号化が必要な構成ではIPsecなどと組み合わせる。
追加ヘッダーとトンネルのMTU
オプションなしのIPv4で基本的なGREを運ぶなら、外側IPv4ヘッダー20バイトとGREヘッダー4バイトを追加する。合計の増分は24バイトになる。チェックサム、キー、シーケンス番号などのオプションを使えば増分は変わる。
外側のパケットが経路のMTUを超えると、条件によって断片化されたり、破棄されてMTUの通知が返ったりする。このため、内側へ許すMTUを小さくし、TCPでは必要に応じてMSSを調整する。MSSの調整はTCPのデータ長に対する処理なので、UDPなどまで同じ仕組みで調整されるわけではない。
データを何バイト入れられるか
独自の例として、外側IPパケットの上限を1,492バイト、基本GREとし、内側もオプションなしのIPv4とする。
| 求める長さ | 計算 | 結果 |
|---|---|---|
| 内側IPパケットの上限 | 1,492 − 20 − 4 | 1,468バイト |
| 内側TCPのデータ上限 | 1,468 − 20 − 20 | 1,428バイト |
| 内側UDPのデータ上限 | 1,468 − 20 − 8 | 1,440バイト |
TCPヘッダーはオプションなしで20バイト、UDPヘッダーは8バイトである。両者を一律に20バイトとして計算しない。IPsecやIPv6、追加オプションを使う場合も、それぞれの実際の長さで差し引く。イーサネットのヘッダーを含むフレーム長と、IPのMTUも区別する。
参考資料
実際の試験ではここに出る!全1問
ネットワークスペシャリスト
- 午後Ⅱ