こんにちは!技術メディアの主筆ライターであり、日々ネットワークの海をパケットとともに泳ぎ回っているセキュリティスペシャリストのトモです。
「VPN(仮想専用線)を構築することになったけれど、設定項目が多すぎて頭が痛い…」
「UDP 500 とか IKE って、一体裏で何をやっているの?」
インフラやネットワークの世界に一歩を踏み出したばかりのとき、誰もが一度はこうした壁にぶつかりますよね。特に IPsec VPN は、暗号化や鍵交換など、目に見えない処理が複雑に絡み合うため、難解に見えがちです。
でも、安心してください。一見難しそうに見える IPsec や UDPポート500番(IKE) の仕組みも、私たちの身近な「郵便配達」や「秘密の契約を結ぶためのステップ」に例えると、驚くほどスッキリ理解できるのです。
今回は、パケットの挙動をリアルに感じながら、実務に役立つファイアウォール(FW)の設定まで、一歩ずつ丁寧に紐解いていきましょう!
—
そもそも「IPsec」と「IKE」ってなに?
まずは、全体像を掴むために、今回の主役である IPsec と IKE の役割を、現実世界に例えてみましょう。
- IPsec(アイピーセック)
- 「頑丈な装甲車」です。インターネットという危険な公道において、中身を誰にも見られないようにデータをカプセル(装甲)に包み、安全に目的地まで運ぶ仕組みです。
- IKE(アイケーイー / Internet Key Exchange)
- 装甲車を走らせる前に、お互いの拠点で「どんな鍵を使って装甲車のドアをロックするか」「どのルートで走るか」を事前に決める「作戦会議」です。
そして、この「作戦会議(IKE)」を行うために使われる専用の通信窓口(ポート番号)こそが、UDPポート500番なのです。
もし、この UDPポート500番 の通信がファイアウォールでブロックされてしまうと、作戦会議が開けません。結果として、お互いに鍵のルールが決められず、装甲車(IPsec)を1台も走らせることができなくなってしまいます。
—
なぜ「UDP」の「500番」を使うの?
「Webアクセスで使う TCP ではなく、なぜ UDP なの?」と疑問に思うかもしれませんね。
TCP は「荷物が届いたか」を毎回細かく確認する丁寧なプロトコルですが、そのぶんやり取りの手順が多く、少し重たいのが特徴です。
一方で UDP は、スピード重視でデータをポンポン送り出すプロトコルです。
「作戦会議の段階なら、慎重な TCP のほうがいいのでは?」と思うかもしれません。しかし、VPNを結ぶ両者(ルーターなど)は、お互いに「これから安全な接続を作ろう!」と強く待ち望んでいる状態です。そのため、余計なオーバーヘッド(通信の無駄)を減らし、最もスピーディーに交渉を開始するために、あえて UDPポート500番 が選ばれているのです。
—
通信フローを覗いてみよう!3つのステップ
では、実際に2つの拠点(本社と支店など)の間で、どのように UDPポート500番 を使った作戦会議(IKEネゴシエーション)が進むのか、その流れを見てみましょう。
難解なフェーズ名や暗号アルゴリズムのビット数は一旦脇に置いて、ストーリー仕立てで追いかけてみてくださいね。
[支店ルーター] [本社ルーター]
| |
| ------ ① UDP 500:「こんにちは!暗号の会議をしましょう」 ----> |
| <----- ② UDP 500:「いいですよ!どの暗号方式にしますか?」 -- |
| |
| ===【ここでお互いの身元を確認し、安全な会議室が完成!】===
| |
| ------ ③ UDP 500:「では、実際のデータを送る鍵を決めましょう」 -> |
| <----- ④ UDP 500:「合意しました!これで通信開始です!」 ---- |
ステップ 1:ファーストコンタクト(提案と合意)
支店のルーターから本社のルーターに向けて、UDPポート500番 で「VPNを始めたいです!暗号化のルールはA案、B案、C案のどれにしますか?」と話しかけます。
本社ルーターは「それならA案でいきましょう!」と返事をします。
ステップ 2:お互いの身元確認(認証)
「本当にあなたが接続を許可された支店のルーターですか?」とお互いの身元(事前共有鍵やデジタル証明書)を確認し合います。これが無事に終わると、「2人だけの安全な作戦会議室(IKE SA)」が完成します。
ステップ 3:本番データの鍵決め
完成した安全な作戦会議室の中で、「じゃあ、これから実際に社内データをやり取りするための『本番用の鍵(IPsec SA)』を作ろう」と話し合います。このやり取りも UDPポート500番 の中で安全に行われます。
すべての合意が取れたら、いよいよ IPsec による暗号化通信(本番データの運搬)がスタートします!
—
【実務で必須】NATトラバーサル(UDP 4500)という相棒
ここで、実務に挑む皆さんに、現場で100%遭遇する「NAT(ナット)の壁」と、その解決策についてお話ししておきます。
現代のインターネットでは、1つのグローバルIPアドレスを複数のPCで共有する「NAT(またはNAPT)」という技術が使われています。
しかし、IPsecの本番データ(ESPパケット)は、このNATを通るのが非常に苦手なのです(IPアドレスやポート番号が途中で書き換わると、改ざんされたと検知してしまうためです)。
そこで登場するのが、NATトラバーサル(NAT-T)というお助け機能です。
ルーター同士が「あ、途中にNATがあるな」と気づくと、作戦会議の途中で、ポート番号を UDPポート500番 から UDPポート4500番 へと自動的に切り替えます。そして、IPsecの本番データを UDPポート4500番 のカプセルで優しく包み込んで送り出します。
つまり、実務でVPNを通すためのファイアウォールを設定するときは、UDP 500 だけでなく、UDP 4500 もセットで許可してあげるのが鉄則になります!
—
実践!ファイアウォールの設定例
それでは、実際に社内ネットワークの境界にあるファイアウォール(FW)やルーターで、どのように通信を許可すればよいか、具体的な設定例を見てみましょう。
今回は、エンタープライズで非常によく使われる FortiGate(Ciscoと並ぶ主要セキュリティ機器)のCLI設定 と、一般的な Linux(iptables)の設定 をご紹介します。
1. FortiGateでの設定例(CLI)
本社側(グローバルIP: 198.51.100.1)と、支店側(グローバルIP: 203.0.113.5)の間で、VPN通信を許可する設定です。
# 1. 支店側から本社側への IKE (UDP 500/4500) 通信を定義します
config firewall address
edit "Branch-WAN"
set subnet 203.0.113.5 255.255.255.255 # 支店のグローバルIPを指定
next
edit "HQ-WAN"
set subnet 198.51.100.1 255.255.255.255 # 本社のグローバルIPを指定
next
end
# 2. VPNに必要なサービス(ポート)をグループ化します
config firewall service group
edit "IPsec-IKE-Ports"
set member "IKE" "IKE_NAT-T" # FortiGateにプリセットされているUDP 500と4500を指定
next
end
# 3. ファイアウォールポリシーを作成し、通信を許可します
config firewall policy
edit 10
set name "Allow-IPsec-IKE"
set srcintf "wan1" # インターネット側のインターフェース
set dstintf "internal" # ルーター自身(または内部)への通信
set srcaddr "Branch-WAN" # 送信元:支店ルーター
set dstaddr "HQ-WAN" # 送信先:本社ルーター
set action accept # 通信を許可
set schedule "always"
set service "IPsec-IKE-Ports" # UDP 500 / 4500 を適用
set logtraffic all # トラブルシューティング用にログを全取得
next
end
2. Linux(iptables)での設定例
もしLinuxサーバーをVPNゲートウェイとして構築する場合は、以下のように iptables でポートを開放します。
# -------------------------------------------------------------
# IPsec VPN (IKEおよびNAT-T) 用のポート開放設定
# -------------------------------------------------------------
# 1. IKE作戦会議用の UDP 500 番ポートを許可
iptables -A INPUT -p udp --dport 500 -j ACCEPT
iptables -A OUTPUT -p udp --sport 500 -j ACCEPT
# 2. NATトラバーサル(NAT-T)用の UDP 4500 番ポートを許可
iptables -A INPUT -p udp --dport 4500 -j ACCEPT
iptables -A OUTPUT -p udp --sport 4500 -j ACCEPT
# 3. IPsecの実データ(ESPプロトコル:ポート番号ではなくプロトコル番号50)を許可
iptables -A INPUT -p esp -j ACCEPT
iptables -A OUTPUT -p esp -j ACCEPT
*※実務で設定する際は、送信元IPアドレス(-s オプション)を対向拠点のグローバルIPに限定することで、セキュリティをさらに強固にすることができます!*
—
現場で役立つ!トラブルシューティングの目線
「設定は完璧なはずなのに、VPNが繋がらない…!」
これはネットワークエンジニアなら誰もが経験する、いわば登竜門です。そんなときに役立つ、現場ならではのチェックポイントを伝授します。
チェック1:片方向のFWだけ空いていませんか?
VPNは双方向のやり取りです。本社のFWで UDP 500 を許可していても、支店側のFWや、途中のプロバイダのルーターで UDP 500 がブロックされていると、作戦会議の返事が届きません。必ず両方の機器の設定を見直しましょう。
チェック2:NAT-T(UDP 4500)を忘れていませんか?
「接続処理が途中でタイムアウトしてしまう」という場合、最初の UDP 500 は通っているものの、途中で UDP 4500 に切り替わった瞬間にFWにブロックされている可能性があります。FWのログを見て、UDP 4500 のパケットが破棄(Drop)されていないか確認してください。
チェック3:ログコマンドを叩いてみよう
ルーターのCLIでデバッグログを有効にすると、どこで交渉が止まっているかが一目瞭然になります。
- Ciscoの場合:
show crypto isakmp saやdebug crypto isakmp - FortiGateの場合:
diagnose vpn ike gateway list
これらを実行した際、ステータスが INIT(初期化中)のまま進まない場合は、そもそも UDP 500 のパケットがお互いに届いていない可能性が極めて高いです。
—
まとめ:一歩ずつ、確実なインフラエンジニアへ!
今回は、IPsec VPNの心臓部とも言える「UDPポート500番(IKE)」の役割について解説しました。
- IKE(UDP 500) は、安全な通信を行うための事前の作戦会議。
- 途中にNATがある場合は、自動的に NAT-T(UDP 4500) にバトンタッチする。
- ファイアウォールでは、
UDP 500とUDP 4500をセットで許可するのが鉄則。
仕組みを現実世界に置き換えて、パケットが今どこを走っているのかをイメージできるようになると、ネットワークの構築もトラブルシューティングも、パズルを解くように楽しくなってきます。
ゼロトラストが叫ばれる現代においても、拠点間を結ぶIPsec VPNはエンタープライズネットワークの基盤として今なお現役で活躍しています。この記事が、皆さんのこれからのインフラ構築の一助となれば幸いです。
一歩ずつ、焦らずに理解を深めていきましょう!また次回の記事でお会いしましょう。
コメント