トンネルとは
トンネルは、あるネットワーク用のパケットを別のパケットの中へ包み、二つの終端の間を仮想的な一本の経路として運ぶ仕組みです。英語表記はtunnel(トンネル)です。包み始める装置をトンネル入口、外側の包みを外す装置をトンネル出口と呼びます。
たとえばIPv4パケットをIPv6パケットの中へ入れれば、途中のIPv6ネットワークは外側のIPv6アドレスだけを見て転送できます。内側のIPv4パケットは出口まで運ばれ、そこで取り出されます。途中のルーターに、内側の通信方式を理解させなくてよいことがトンネルの大きな役割です。
ただし、トンネルは「秘密の通路」という意味ではありません。包むことと暗号化することは別の機能です。VPNには暗号化されたトンネルもありますが、暗号化を行わないトンネルもあります。

一つのパケットに、二組の宛先が存在する
元のパケット全体をペイロードとして収め、出口を外側の宛先にする
途中のルーターは内側の宛先ではなく、出口へ向かう外側の情報を読む
内側のパケットを復元し、本来の宛先へ向けて転送を続ける
往復通信には、反対向きの経路も必要になる
トンネルは本来、入口から出口へ向かう一方向の仕組みです。双方向に通信したい場合は、反対方向にも入口と出口を定めたトンネルを用意します。設定画面で一本に見えても、技術的には二方向の処理を組み合わせている場合があります。
外側の経路が変わっても、内側からは同じ仮想リンクに見えることがあります。これは拠点間接続や、あるプロトコルを直接運べない区間の通過に便利です。一方で、障害調査では内側の経路と外側の経路を分けなければ、どこで止まったのか判断しにくくなります。
ヘッダーが増えるぶん、運べるデータは小さくなる
トンネル入口では外側のIPヘッダーなどが追加されます。同じ回線のMTUを使うなら、元のパケットに許される大きさは追加分だけ小さくなります。これを考慮しないと、断片化、ICMPv6のPacket Too Big、あるいは特定サイズだけ届かない問題につながります。
トンネルを何重にも重ねれば、そのたびにヘッダーと処理負荷が増えます。トンネルの仕様を確認するときは、外側プロトコル、追加されるバイト数、実効MTUを一組で確認します。
トンネルとカプセル化は同義ではない
カプセル化は、上位層のデータに制御情報を付けて下位層で運ぶ広い概念です。トンネルはその応用で、すでに完成しているパケットやフレーム全体を別の通信単位へ包み、仮想的なリンクを作ります。
また、トンネルの識別情報や外側アドレスはアクセス制御に利用できますが、それだけで盗聴や改ざんを防げるとは限りません。機密性や完全性が必要なら、IPsecなど、その性質を明示した保護方式を併用します。
仕様の確認資料:RFC 2473「Generic Packet Tunneling in IPv6」、RFC 2784「Generic Routing Encapsulation」、RFC 4301「Security Architecture for the Internet Protocol」