弱者は決して許すことができない。許しは強者の態度である── ガンディー
ネットワーク

外から読めるのは、外側の宛先と取り決めの番号だけ

図 10 と同じ入れ子に ESP で封をして、途中の誰にも中身を読ませない。口に貼った組が守る通信を選び、送信用と受信用で別々の取り決めを使う

ぴぐおv1人の校閲なし(AI のみ)訂正なし
ネットワークipsecvpn暗号concept
目次

図 10 で、社内あてのパケットを別のパケットの中に入れて運べるようになりました。

ただし、入れただけでは途中の機器が開けば中身が読めます。 勉強会では、ping の中身が読める状態と、ESP に変わって読めない状態を並べて見ました。 この記事は、図 7 で挙げた 3 つの問題のうち、最後に残った「通信の中身は誰にでも読めます」を解きます。

この連載は、ネットワークの言葉を 3 つの層に置いて読みます。 もの(物理か論理か)、結びつき(人が設定で付ける手動か、機器が学習する自動か、製造時に決まる固定か)、通信フロー(1 本の通信がそれらを順に通る道筋)の 3 つです。

登場するもの

ESP ヘッダ

論理のもので、通信 1 つずつに付きます。 中には SPI(取り決めの番号)と連番が入ります。 ESP を運ぶパケットは、外側 IP ヘッダのプロトコルの欄が 50 です。 図 10 では 47 でした。

AH

改ざん検知だけで、暗号化しない封です。 外側のプロトコル番号は 51 です。 この図では使いません。

SA(安全の取り決め)

論理のもので、相手・暗号の方式・鍵・SPI・寿命の組です。 片道に 1 つで、送る側用と受け取る側用は別物です。 だからデータ用は 1 つの相手につき 2 本になります。 勉強会で見た Active SAs: 2 はこの 2 本です。 打合せ用の取り決めは、これとは別にもう 1 つできます。

crypto map

論理のもので、人が書きます。 相手・守る通信の並び(図 9 の ACL)・暗号の組合せを 1 つに束ね、外向きの口に貼ります。

2 つのモード

トンネルモードは元の IP ヘッダごと包むので、社内の宛先も送信元も外から見えません。 トランスポートモードは元の IP ヘッダを残し、中身だけを守ります。 この図の拠点間はトンネルモードです。

結びつき

  • crypto map ⇄ 外向きの口は手動です。貼った口を出入りする通信だけが判定にかかります。守りたい通信がその口から出る経路に乗っていることが前提で、この図では 0.0.0.0/0 → 203.0.113.1(Gi1)の行がその役をしています。経路が別の口を向いていれば、貼った組は一度も効きません。
  • crypto map ⇄ 守る通信の並び・相手・暗号の組合せも手動です。両側で同じものにしないと合いません。片側だけ直すと通らなくなります。
  • SA は自動でできます。ただし勝手に湧くのではなく、打合せ(図 12)の結果としてできます。

通信フロー

支店の A(192.168.10.10)から、データセンターの C(192.168.3.10)へ送ります。

① A はデフォルトゲートウェイ(ルータ 1)へ送ります。図 10 の ① と同じで、PC 側は何も変わりません。

② ルータ 1 は、外向きの口に貼った組の中の「守る通信の並び」に、このパケットが一致するかを上から順に見ます。一致したので、送信用の SA に書かれた方式と鍵で元のパケットをまるごと暗号化し、ESP ヘッダと外側 IP ヘッダを付けます。一致しない通信はそのまま素通しで出ていきます。

③ プロバイダのルータは外側の宛先 198.51.100.20 だけを見て運びます。途中で開いても、暗号化された固まりと ESP の札しか見えません。

④ ルータ 2 は ESP ヘッダの SPI でどの受信用 SA かを選び、改ざん検知をしてから復号します。出てくるのは ① と同じパケットです。

⑤ ルータ 2 は出てきたパケットを自分のテーブルで探し、Gi1 から C へ送ります。

図 11

図の上半分が構成図と封の種類・モード・SA、下半分が各テーブルと設定・通信の中身の推移です。

IPsec:図 10 の入れ子に封をして、途中の誰にも中身を読ませない 図 7 の問題 3(途中は他人のルータなので中身が誰にでも読める)の解。包む形は図 10 と同じで、内側がまるごと暗号化される 支店(自分のもの) インターネット(他人のもの) データセンター(自分のもの) PC-A 192.168.10.10 GW 192.168.10.1 ルータ 1 Gi0 192.168.10.1 Gi1 203.0.113.10 (グローバル IP) Gi0 Gi1 ISP-1 他人の ルータ ISP-2 他人の ルータ ISP-3 他人の ルータ ルータ 2 Gi0 198.51.100.20 (グローバル IP) Gi1 192.168.3.1 Gi0 Gi1 PC-C 192.168.3.10 GW 192.168.3.1 crypto map Gi1 に貼る(手動) crypto map Gi0 に貼る(手動) ESP で封 図 10 と同じ入れ子。中の 1 枚が GRE から ESP に変わる 外から読めるのは、外側の宛先・送信元と取り決めの番号(SPI)だけ 相手・守る通信・暗号の方式を束ねたものを口に貼る(手動) 1 2 3 4 5 封をする 封を開ける 途中で開いても「ESP」としか分からない ESP と AH(封の種類) ESP:暗号化(読めなくする)と改ざん検知    外側のプロトコル番号は 50 AH :改ざん検知だけ。暗号化はしない    外側のプロトコル番号は 51 ESP と AH を重ねる使い方は RFC 8221 で NOT RECOMMENDED 2 つのモード(どこから包むか) トンネルモード:元の IP ヘッダごと包む  → 社内の宛先・送信元も隠れる。拠点間はこれ トランスポートモード:元の IP ヘッダは残し、  中身だけ守る。端末同士で直接使うとき この図はトンネルモード SA(安全の取り決め) 中身:相手・暗号の方式・鍵・SPI(取り決め番号) 片道に 1 つ。送る側用と受け取る側用で別物 だからデータ用は 1 つの相手につき 2 本 (勉強会の表示 Active SAs: 2 はこの 2 本) 打合せ用の SA は、これとは別にもう 1 つできる 作り方そのものは次の図(打合せ) フロー ① PC-A は宛先 192.168.3.10 をデフォルトゲートウェイ(ルータ 1)へ送る。図 10 の ① と同じで、PC 側は何も変わらない ② ルータ 1 は、外向きの口に貼った組の中の「守る通信の並び」(図 9 の ACL)に、このパケットが一致するかを上から順に見る 一致したので、送信用の SA に書かれた方式と鍵で、元のパケットをまるごと暗号化し、ESP ヘッダと外側 IP ヘッダを付ける ③ プロバイダのルータは外側の宛先 198.51.100.20 だけを見て運ぶ。途中で中を開いても、暗号化された固まりと ESP の札しか見えない ④ ルータ 2 は ESP ヘッダの SPI(取り決めの番号)でどの受信用 SA かを選び、改ざん検知をしてから復号する。出てくるのは ① と同じパケット ⑤ ルータ 2 は出てきたパケットを自分のテーブルで探し、Gi1 から PC-C へ送る。PC-C 側も何も変わらない 増えたもの SA(論理・自動でできる):相手と交わした「この方式・この鍵で守る」という取り決め。送信用と受信用の 2 本 crypto map(論理・手動):相手・守る通信の並び・暗号の組合せを 1 つに束ねて、外向きの口に貼るもの 3 層で見ると もの:ESP ヘッダ(通信 1 つずつに付く札)・SA(取り決め)・crypto map(束ねたもの)。どれも論理 結びつき:crypto map ⇄ 外向きの口(手動)/crypto map ⇄ 守る通信の並び・相手・方式(手動)/SA は打合せの結果できる(自動) フロー:図 10 の「包む」の前に「守る通信か見分ける」、包むときに「暗号化する」、外すときに「確かめて戻す」が入る 各テーブルと設定(②③④ の番号は上のフローに対応。青字) ルータ 1: 口に貼った組(手動) 相手:198.51.100.20(ルータ 2 の外側) 守る通信:下の並びで選ぶ 暗号の組合せ:ESP の暗号方式+認証方式 貼る口:Gi1(外向き) ルータ 1: 守る通信の並び(図 9 の ACL) 許可 192.168.10.0/24 → 192.168.3.0/24  =この 1 行に一致した通信だけ封をする ②一致しない通信はそのまま素通しで出る 両側でこの並びが食い違うと通らない ルータ 1: SA(打合せでできる・自動) 送信用 SA:SPI(番号)・方式・鍵・寿命 受信用 SA:SPI(番号)・方式・鍵・寿命 ④相手の送信用と自分の受信用が対になる 合わせて 2 本(Active SAs: 2) ルータ 2: 口に貼った組(手動) 相手:203.0.113.10(ルータ 1 の外側) 守る通信:向きが逆の 1 行 暗号の組合せ:ルータ 1 と同じでなければ合わない 貼る口:Gi0(外向き) ルータ 2: SA 送信用 SA・受信用 SA の 2 本 ルータ 1 の送信用 ⇄ ルータ 2 の受信用 ルータ 2 の送信用 ⇄ ルータ 1 の受信用 ルータ 1: ルーティングテーブル(図 7 のまま) 0.0.0.0/0 → 203.0.113.1(手動) 封をする仕組みは口に貼るので、 行の書き方は変わらない ③外側の宛先はテーブルどおり Gi1 から出る 通信の中身の推移(フローごとのフレーム/パケット) ① PC-A → ルータ 1(図 10 の ① と同じ) 宛先 MAC MAC R1-Gi0 送信元 MAC MAC A 宛先 IP 192.168.3.10 送信元 IP 192.168.10.10 データ ping フレーム=全部。ただしスイッチが見るのは MAC とタグの部分だけ パケット=この部分。ルータはここ(IP)を見る ② ルータ 1 の中 守る通信の並びに一致するか見る → 一致 → 送信用 SA の方式と鍵で ① のパケットをまるごと暗号化 → ESP ヘッダと外側 IP ヘッダを付ける ③ ルータ 1 → ISP-1(図 10 の ③ と同じ形。GRE だった 1 枚が ESP になり、内側が読めなくなった) 宛先 MAC MAC ISP-1 送信元 MAC MAC R1-Gi1 外側 宛先 IP 198.51.100.20 外側 送信元 IP 203.0.113.10 ESP ヘッダ SPI・連番 暗号化されて読めない部分 内側 IP ヘッダ+データ+末尾 認証データ 改ざん検知用 ④ ルータ 2 の中 ESP ヘッダの SPI で受信用 SA を選ぶ → 認証データで改ざんされていないか確かめる → 復号すると ① と同じパケットが出てくる ⑤ ルータ 2 → PC-C(図 10 の ⑤ と同じ) 宛先 MAC MAC C 送信元 MAC MAC R2-Gi1 宛先 IP 192.168.3.10 送信元 IP 192.168.10.10 データ ping ESP の並びは SPI(取り決めの番号)・連番・暗号化される部分・認証データ。SPI と連番は暗号化されない(受け取った側がどの取り決めかを選ぶために要る) crypto map は口に貼るものなので、守りたい通信がその口から出る経路に乗っていることが前提。この図では 0.0.0.0/0 → 203.0.113.1(Gi1)の行がその役をしている トンネルモードでは元の IP ヘッダごと暗号化される部分に入るので、社内の宛先・送信元は外から見えない。外に出ているのは両端のルータの外側 IP だけ 外側 IP ヘッダのプロトコルの欄は 50(ESP)。だから Wireshark で見ても「ESP」としか分からない。図 10 では内側の宛先まで見えていた 古い方式について: 3DES(勉強会で使った esp-3des)は RFC 8221 §5 で SHOULD NOT(使うべきでない)。今の必須は AES-GCM と AES-CBC SHA-1(AUTH_HMAC_SHA1_96)は RFC 8221 §6 では MUST-(今はまだ必須だが、いずれ格下げという印)。「使うな」とまでは書かれていない。必須は HMAC-SHA2-256 AH について: RFC 8221 §4 が NOT RECOMMENDED と書いているのは「ESP と AH を重ねて使うこと」。AH 単体を非推奨とは書いていない 出典(ESP の並び・2 つのモード・プロトコル番号 50): RFC 4303 https://www.rfc-editor.org/rfc/rfc4303 出典(IPsec 全体の枠組み・SA): RFC 4301 https://www.rfc-editor.org/rfc/rfc4301 / AH のプロトコル番号 51: RFC 4302 §2 出典(暗号方式の新旧): RFC 8221 https://www.rfc-editor.org/rfc/rfc8221 未検証: 勉強会で見た「Wireshark では ESP としか見えない」は本人の観察。SPI や連番などどこまで表示されるかは、この図では確かめていない この図は GRE を使わず IPsec だけで包む形を描いている。GRE と IPsec を重ねて使う構成もあるが、この図では扱わない ## 図 10・図 12 との接続

図 10 の ③ と図 11 の ③ を並べると、箱の並びが同じ形のまま、GRE だった 1 枚が ESP に変わり、内側の宛先と送信元が読めない部分に飲み込まれているのが見えます。 図 10 では内側の宛先まで外から見えていました。

図 9 の行の並びは、ここでは「通す・通さない」ではなく「守る・守らない」の選別に使われます。 同じ道具の別の使い方です。

図 5 の MAC の付け替えも、図 1 のルーティングテーブルもそのまま生きています。 封をする仕組みは口に貼るもので、テーブルの行の書き方を変えません。

SPI と連番が暗号化されないのは、受け取った側がどの取り決めかを選ぶために要るからです。 その取り決めをどうやって作るかが、次の図 12 です。

未検証・注意

  • 勉強会で使った 3DES は、RFC 8221 §5 で SHOULD NOT(使うべきでない)に置かれています。今の必須は AES-GCM と AES-CBC です。
  • SHA-1 を使う改ざん検知(AUTH_HMAC_SHA1_96)は、同 §6 で MUST-(今はまだ必須だが、いずれ格下げという印)です。「使うな」とまでは書かれていません。必須は HMAC-SHA2-256-128 のほうで、MUST NOT が付いているのは HMAC-MD5-96 です。
  • 同 §4 が NOT RECOMMENDED としているのは「ESP と AH を重ねて使うこと」です。AH 単体を非推奨とは書いていません。
  • 勉強会で見た「Wireshark では ESP としか見えない」は本人の観察です。SPI や連番がどこまで表示されるかは、この図では確かめていません。
  • この図は GRE を使わず IPsec だけで包む形です。GRE と IPsec を重ねて使う構成もありますが、この図では扱っていません。
  • 拠点間 VPN の相手は機器の種類を選びません。別の勉強会で扱ったファイアウォールの資料でも、ルータとファイアウォールの間、ファイアウォール同士で、この図と同じ組み立て(互いの認証・守る通信の選別・暗号の組合せ・外向きの口に貼る)を使っていました。これも本人の観察です。
  • SPI や鍵の実際の値、事前共有鍵の文字列は書いていません。

出典

関連

この記事の校閲記録

誰が・いつ・どの版の・どの段落を・何の観点で見て、何と言ったかを全件そのまま出す(追記のみ・削除しない)。

段落 36 のうち出典つき 14・出典なし 22

v1 2 件
  • AIAI (claude-fable-5) が AI 確認未解決

    出典 4 件を再取得した。ESP の並び(SPI と連番は改ざん検知の対象だが暗号化はされない)・トンネルモードとトランスポートモードの違い・プロトコル番号 50 を RFC 4303 の §2・§3.1.1・§3.1.2 で確認した。SA が片道だけの取り決めで、双方向の通信には対になった 2 つが要ることを RFC 4301 §4.1 の「An SA is a simplex connection」で確認した。AH のプロトコル番号 51 を RFC 4302 §2 で確認した。RFC 8221 では 3DES が SHOULD NOT、AES-GCM と AES-CBC が MUST、HMAC-SHA2-256-128 が MUST、HMAC-SHA1-96 が MUST-、HMAC-MD5-96 が MUST NOT であることを確認した。SHA-1 は MUST NOT でも SHOULD NOT でもないので「使うべきでない」とは書かず、格下げの印が付いた状態として書いた。同 §4 が NOT RECOMMENDED としているのは ESP と AH を重ねて使うことなので、AH 単体を非推奨とは書いていない。Wireshark で ESP としか見えなかったという点は本人の観察で、どの欄まで表示されるかは確かめていないため未検証に残した。事前共有鍵・SPI・鍵の寿命の実際の値は書いていない。校正チェックリストを通し、例え話・体言止め・断定を示す禁止語の混入を機械検査した。守秘: 実名・社名・会場名・地名・金額なし

  • AIAI (claude-fable-5) が 編集未解決

    公開前の校閲。frontmatter のタグ IPsec と VPN を小文字に直した。本文「拠点間はトンネルモードです」は、同じ記事の注で GRE と重ねる構成を扱わないと断っている(その構成ではトランスポートモードを使う)ため、範囲を限って「この図の拠点間はトンネルモードです」に直した。SHA-1 を MUST- として扱い「使うな」とは書いていない点、NOT RECOMMENDED の対象が ESP と AH の併用である点は原文の引用と照合し、そのままにした。

参考文献

更新履歴

  • 連載のトピックを「ネットワーク基礎」から「ネットワーク」へ改名(32 本+目次。slug と URL は不変)
  • 公開: 連載「ネットワーク基礎」図 8〜24 の記事 17 本と目次の更新

機械可読の記録