設問1
(1)イ:セレクタ
セキュリティポリシを選択するキーはセレクタと呼ばれる。
Q.SPIとセレクタって何が違うの?
A.SPIはどのSAを使うかの32ビットの識別子。つまりSADの中から適切なSAを見つけるための識別子。
一方、セレクタはどのルール(ポリシー)を使うのかの識別子。つまり、SPDの中から適切なルールを見つけるための識別子。これは特定の値ではなく、IPアドレス、ポート番号、プロトコルなど、様々なものを識別子として使える。
設問2
(1)リキー(ReKey)
ReKeyとはSAの再確立のこと。ローテーションと表現されることもあるが、ローテーションは鍵の再確立全般をあらわしている。IPsecにおける再確立ときかれたらReKeyと答えるのが安牌。
(2)IPsec通信で送受信されるメッセージが、通信中に改ざんされていないこと
フェーズ2の認証方式によって認証できる対象は、メッセージの改ざん検知など。
では、どのような仕組みで改ざん検知ができるのか、認証にフォーカスしたフェーズ2の流れを見ていこう!
1.送信者は、データパケットと認証鍵を合わせたものをHMACでハッシュ化する。ハッシュ値を付加してパケットを送信。
*認証鍵とは”フェーズ1で作成されてSKEYID”+”ナンス”+”SPI”をPRFという関数に入れて導出される。この値はとても長いので、最初の256bitは暗号化鍵用、次の256bitは認証用という風にチョキチョキしてそれぞれの鍵を作っていく。
2.受信者は受け取ったパケットを送信者と同じ手順でハッシュ化する。導出されたハッシュ値が一致したら、改ざんされていないことが証明される。
以上の手順より、認証方式によって認証できる対象はメッセージであり、認証内容は改ざんされていないこと。という回答になる。
Q.ちなみに上記の認証プロセスでは本人の正当性も認証できるのになぜ回答は改ざん検知だけなの?
A.上記、認証プロセスでは本人の正当性も保証される。なぜなら、ハッシュ値を算出する際に、SKEYIDも要素の一つとなっているから。同一のSKEYIDを保持できていることは、フェーズ1で正しく鍵交換できている証明になるので本人の正当性の証明になる。
しかし、今回の問題の肝はフェーズ2の認証について。なので、本人の正当性はフェーズ1で既に証明されているものなので、わざわざフェーズ2の機能として記す必要もないという考え方から、回答にはメッセージの改ざん検知のみが記載されている。
(3)OSPFのリンクステート情報交換は、IPマルチキャスト通信で行われるから。
IPsecはユニキャストにしか対応していない。そのためマルチキャストを使うOSPFを扱うことができない。
Q.なぜIPsecでマルチキャストをすると失敗するの?
A.では、具体的な流れとともに確認しよう!主にルーティング担当とIPsec担当がいるということを念頭に置いておきましょう。
1.OSPFパケット誕生
ルータがトンネルインタフェースでOSPFパケットを生成してマルチキャストに送信する
宛先:224.0.0.5(リンクローカルマルチキャスト,TTLは1)
2.ルーティング担当がパケット処理
tunnel destinationから宛先はWAN側になっているのでWANポートから出す
3.IPsec担当が処理
WANポートから出る直前にIPsec担当がパケットを捕まえて、自身のSPDからprotected,bypath,discardを決める。
しかし、宛先が224.0.0.5のトンネルなんて作っていないのでIPsecでは流せない。なお、IPsecでは流さずそのままWANポートから出力しても破棄されて終わる。
Q.なぜGREを使うとマルチキャストを扱えるようになるのか?
A.では、具体的な流れとともに確認しよう!主にルーティング担当とIPsec担当がいるということを念頭に置いておきましょう。
1.あらかじめGREトンネルを拠点間で作成しておく
*これによりパケットの中身は関係なく、一旦GREのトンネル入れて流そうというプロセスが追加される(=この段階で1対1通信が確立する)。
2.OSPFパケット誕生
ルータがトンネルインタフェースでOSPFパケットを生成してマルチキャストに送信する。トンネルインタフェースでOSPFを有効化しているので、マルチキャストももちろん対向のトンネルに送出される。
宛先:224.0.0.5(リンクローカルマルチキャスト,TTLは1)
3.パケットをGREカプセル化
GREが手順2で送信されたマルチキャストパケットはトンネルを通るのでキャッチしてGREでカプセル化
4.IPsec担当が処理
手順3によって通常の1対1パケットとしてIPsecに届くので、いつも通り宛先をSPDで判断して、「あ、これはGREトンネルの1対1だから、このSAでこういう方式で暗号化とかすればいいのね。OK~」と処理をして流す。
Q.GREでやってることはIPsecのTunnelモードではできないの?
A.答えは「パケットがIPsecまで来た際に、SPDを検索するがそもそも224.0.0.5に関するポリシーなんて定義していないから」。
Q.正直、トンネルを作れる(1対1にできる)ならGREじゃなくてもいいんじゃないの?
A.確かに、1対1のトンネルを作れるならば、GREでなくもてIPsec自体は成立する。実際にIP in IPやL2TPをつかってもIPsecは作れる。しかし、GREでなくてはならない理由もある。
理由1:GREはなんでも流せる
GREはGenericRoutingEncapsulation(汎用ルーティングカプセル化)という名前の通り、GREはなんでもカプセル化の対象にできる。IP-in-IPは理論上、IPをカプセル化できるといえど、多くのルータではIP-in-IPを使う時にマルチキャストをブロック挙動を取ることが多い。
一方、L2TPはマルチキャストを流せる。がその処理がとても重くなってしまう。
理由2:ヘッダが軽量
GREヘッダは24バイト([新IPヘッダ(20)][GREヘッダ(4)])のカプセル化。一方L2TPは40~50Byte([新IP(20)] [UDP (8)] [L2TP (6〜16)] [PPP (2〜4)] [元のパケット])に膨れ上がる。
理由3:コネクションレス型
GREはコネクションレス。しかし、コネクションは通常のパケット同様にTCPかアプリケーション側が管理するのでわざわざGREが管理しなくても順序保証、欠損管理などの機能は別でカバーできる。一方L2TPは内部で運ぶPPP回線が順序の入れ替わりにきわめて弱いため、順序保証を確実にする必要がある。そのためコネクション型となりパケットサイズやオーバーヘッドも必然的に多くなってしまう。
👆ほかにも理由があるが、GREが選ばれるのはこういう理由があるよという解釈を持っておこう!
設問4
(1)GREでトンネリングが行われるから
GREを使うことで既に以下のような構成になっている。
GRE:[外側IP][GRE][社内IP][データ]
一方、IPsecのトンネルモード単体はこのようなパケット構成になる。
トンネルモード:[外側IP][ESP][社内IP][データ]
このように新しい外側IPを付与することで内側のパケットを暗号化対象にできる。
では、最後にトランスポートモードのパケット構成を見ていこう
トランスポートモード:[社内IP][ESP][データ]
こちらは既に設定されているIPの内側を暗号対象にしている。
では、GREとの組み合わせを見ていこう。
GRE+トンネルモード:[外側IP][ESP][外側IP][GRE][社内IP][データ]
GRE+トランスポートモード:[外側IP][ESP][GRE][社内IP][データ]
以上、よりトンネルモードだと外側IPが二重に付加されてしまい無駄なオーバーヘッドが発生する。一方、トランスポートモードでは二重のオーバーヘッドがないため、こちらを採用するほうが効率的と言える。
設問5

(2)L2SWaとL2SWbを異なるサブネットにする
現状のデータセンタ構成をみると、IPsecルータ、L3SW、L2SWa、L2SWbの間でループ構成ができてしまっている。しかし、異なるサブネットに配置することで、ループを防ぐことができる。
具体的には、
今までのARP経路:「L3SW→L2SWa→IPsecルータ→L2SWb→L3SW→ループ」と「L3SW→L2SWb→IPsecルータ→L2SWa→L3SW→ループ」というようにループが発生してしまう。異なるサブネット変更後:「L3SW→L2SWa→IPsecルータで止まる」と「L3SW→L2SWb→IPsecルータで止まる」
以上、より異なるサブネットに配置することでループを防げるようになる。
*異なるサブネット:カッコつけた表現だが、実際はVLAN分離をしているだけという解釈
*L3SWとIPsecルータがループ構成から外れている理由は、もともとOSPF用のリンクであるため異なるVLANで構築されているから。
Q.そもそも現状の構成でなぜループが発生するのか?
A.では、ループになる原因を図9を参照しながら見ていこう!
1.データセンターのL3SWがWebサーバにパケットを届けたい
IPアドレスは知っていてけど、MACアドレスを知らないときはARPをブロードキャストする
2.各機器にARPが届く
L3SWからのARPは受信以外のすべてのポートから出力される。つまり、IPsecルータ、L2SWa、L2SWbにARPが届く。
3.各機器もARPを拡散する
各機器は受信ポート以外のすべてのポートでARPを送信する。
4.ARP応答がくる
L2SWaのARPは無事、Webサーバまで届きWebサーバから適切なARP応答がL2SWaに届く。
5.L3SWにARP応答が返る
WebサーバからのARP応答がL2SWaまで届き、それがL3SWに届く。
これで完了!と思うかもしれないがここにpithallがある。
6.未解決のARPが回り続ける
手順3の段階で各機器にARPが届いているので、自分宛でないARPは受信ポート以外のすべてのポートに転送される。これによってループが発生する。
*ループを起こさないためには木構造(終端があり1つの行先には1通りの通し方しかない構造)にする必要がある。
以上のプロセスによってループが発生してしまう。
Q.ループが発生していても正常なARP応答はL3SWに届くのに、なぜ通信はできないの?
A.ARPループによっていくつかの不具合が発生してしまうから
1つ目:ARPによって、MACアドレステーブルが頻繁に変動する
例えば、ARP応答は巡り巡って発信者のL3SWまで届いてしまう。そうなると、ARPの送信元はL3SWのMACアドレスであるにもかかわらず、ARP送信元MACと受信ポートをL3SW自身が学習してしまう。このようなことが繰り返されることによって、MACアドレステーブルが頻繁に変動(フラッピング)してしまい、適切な出力ポートが分からず通信ができなくなってしまう。
2つ目:CPUのキャパオーバー
これはいたってシンプルな理由。ARPの転送にはCPUを消費する。ループすればするほどパケットのサイズは際限なく増幅する。その増幅したパケットをCPUが処理しきれなくなってしまい、正常な通信も処理されなくなってしまう。
3つ目:ARP応答ができるのは本人のみ
L3SWが正常なWebサーバのMACアドレスを持っているといえど、ARP応答を返せるのはWebサーバのみ。そのため、L3SWに届いたARP応答も通常通り、受信ポート以外から転送されるだけ。
*もし、L3SWでも自分が知っているからという理由でARP応答を返せたらループは消滅できる。
(3)本社:2 営業所:1 データセンタ:2
VRRPを動かすための独立したサブネットが、当該拠点にいくつあるかを考える。その考えをもとに、名古屋営業所は、L2SW1つだけなので、1つの仮想IPで運用可能。本社は、L2SWaとL2SWbの2つのサブネットがあるため、2つの仮想IPを準備する必要がある。データセンタに関しては、本社と同様の理由で2つの仮想IPが必要になる。
*もし、独立したサブネットが3つあるならVRRPの仮想IPも3つ準備する必要がある。
(4)どのサーバアクセスも、VRRPのマスタルータが稼働する機器に接続されたWAN回線を経由して行われる。
名古屋営業所のIPsecルータとL3SW間のOSPFリンクが動作している場合は、お互いを冗長経路として把握することができる。しかし、そこのリンクが切れると、OSPFは動作しなくなりルーティング情報からお互いの経路情報が消えて冗長化対象として扱われなくなる。そうなると、VRRPマスタルータがつながっているWAN回線でのみ通信が行われる。客観的にみて別の回線を使ったほうがコストが低かったとしても、その情報を互いに知る由もないため、1つの回線のみを使い続けてしまう。
(5)インターネットVPN経由のコスト値が最小230であるのに対して、専用線経由のコスト値は200で最も小さい

本社からインターネットへの2つの経路の通信コストを算出すると、
・本社L3SW→(+10)→本社IPsecルータ→インターネットVPN(+220)→データセンタIPsecルータ=230
・本社L3SW→専用線(+200)→データセンタL3SW=200
つまり専用線を通ったほうがコストが小さいため専用線が使われる。もし、IPsecルータがVRRPマスタルータでもコストは210で依然として専用線が使われる。
(6)う:広域イーサ網→本社→専用線 え:インターネットVPN→データセンタ→専用線
「う」の名古屋営業所のPCからデータセンタへは、通常はインターネットVPN接続を通るが、表3より名古屋営業所のインターネットVPNに障害が発生している。これにより広域イーサ網を使う経路になる。
「え」の名古屋営業所のPCから本社のDMサーバへは通常は広域イーサ網を使う。しかし、表3より名古屋営業所の広域イーサ網に障害が発生している。そのためインターネットVPNを使う経路になる。しかし、問題文中より営業所と本社は直接インターネットVPN接続がない。そのためデータセンタを経由する必要がある。なので、経路は、「名古屋営業所PC→インターネットVPN→データセンタ→専用線→DMサーバ」となる。
*なおL3SWやIPsecルータなどの記載がされない理由はVRRPによって機器が動的に変動する可能性があるため明示的には記載しないなどの理由がある。
p.13 広域イーサネットサービス
広域イーサネットサービスとは、物理的に離れた機器同士をあたかも同一LAN(ブロードキャスト等が利用可能)に接続しているようなふるまいを可能にするサービス。なお、使うネットワークとしてはインターネットのような不特定多数の利用者がいる環境ではなく、事業者が独自に構築した閉域網を使う。
p.14 L3 “サーバのIPアドレスの変更が生じないようにする”とあるが、物理的移動したのにIPアドレスを維持することなんてできるの?
インターネットをまたぐ際は、カプセル化をすることで相手まで到達させる。そしてその後、カプセル化を解除すれば、物理移動に依存せずIPアドレスを維持できる。具体的な手順を以下に記す。
1.サーバをデータセンタへ移行する
2.本社とデータセンタ間でトンネルを構築する(簡素化のため支社のことはここでは考えない)
3.OSPFを稼働させ内部のIPプレフィックスをトンネルを通して相互に通知しあう
4.相手の内部情報が把握できたので、今後、その内部宛てに送るときはトンネルを経由して通信可能になる。
以上のプロセスを経由することによって、物理的な移動があってもIPアドレスを維持できる。
p.14 L7 “インターネットVPNと既設の広域イーサ網間でOSPFを稼働させれば、この要件を満たすことができると考えた”とあるがどういうこと?
「インターネットVPNと広域イーサ網間で〜」という問題文の日本語は、初見だと「2つの回線をガッチャンコしてその間で何かするの?」と誤解しやすい、ちょっと意地悪な表現。でも、実際に言いたいことは、これは「インターネットVPNというルート」と「広域イーサ網(および新設する専用線)というルート」の、それぞれの回線上で独立してOSPFを稼働させるという意味。
p.14 L7 “広域イーサ網間でのOSPF”って具体的にどういう挙動?
広域イーサ網は1つの巨大L2スイッチとして動作している。そのため、広域イーサ網を使ってOSPFを使う場合は、通常のOSPFと同じように特にカプセル化など不要でそのままパケットを広域イーサ網に流せばOK。あとは巨大L2スイッチ(広域イーサ網)がパケットをコピーして、MACアドレス情報などから適切な宛先に転送してくれる。
p.14 SA
IPsecにはパケットを暗号化、復号などのルールに関する関連単語が複数ある。その一つがSA。では、以下でそれぞれを詳しく見ていく。
SA(Security Association)
:コネクションのこと。関係性。物理的なものではなく概念的なもの。
SPI(Security Parameter Index)
:どのSAを使っているかの識別子。32ビットで構成。
SAD(Security Association Database)
:SAの詳細な情報を保持するデータベース。具体的には、SPI、暗号アルゴリズム、秘密鍵など。
SPD(Security Policy Database)
:どの通信はIPsecを通して、どの通信は通さないかなどのIPsecのルール(ポリシー)のデータベース。
p.15 表1 IKEフェーズ1で決定されるパラメータ
| パラメータ | 説明 |
| 暗号化方式(AES-256) | ISAKMP メッセージの暗号化アルゴリズム |
| ハッシュ方式(SHA-256) | ISAKMP メッセージの完全性の検証と鍵計算に使用するハッシュアルゴリズム |
| ライフタイム | ISAKMP SA の生存期間 |
| 認証方式(PSK) | IPsec 通信相手機器の認証方式 |
| 鍵交換方式(DH14) | 鍵交換のためのアルゴリズム |
具体的にそれぞれのパラメータがどのタイミングでどのような意図で使われるのか見ていこう。
1.プロポーザルの交換
暗号化方式(aes)、ハッシュ方式(sha256)、認証方式(preshare)、鍵交換方式(DHグループ(14))、ライフタイム(7200)を生の状態で相手と交換して、二者間で取り決め(ポリシー)を作る。
2.DH鍵交換
DHを使って今後の暗号化用の鍵、ハッシュ用の鍵のもとになる鍵(SKEYID)を生成する
3.認証と改ざんチェック(ここから暗号化)
1で決めた暗号化方式(aes)、ハッシュ方式(sha256)、認証方式(preshare)に則り、2で作成された共通鍵(SKEYID)をベースにID(IPアドレスやホスト名)と要約情報(これまでのやり取りの)を暗号化して相手に送る。
4.答え合わせとフェーズ1の完了
3のパケットを復号して自分がハッシュ方式(sha256)によって算出した要約情報と相手の要約情報が一致することを確認する。相手のIDが正しいことも確認する
5.ライフタイムによるローテーション
2、3で作った鍵は1でやり取りした際のライフタイムに則り破棄されローテーションする。
実例
#事前共有鍵の作成
crypto isakmp key <key> address <IPアドレス>
#フェーズ1
crypto isakmp policy <ポリシー番号>
encryption aes 192
hash sha256
authentication pre-share
group 14
lifetime 3600p.16 表2 IKEフェーズ2で決定されるパラメータ
| パラメータ | 説明 |
| セキュリティプロトコル(esp か AH) | IPsec 通信で使用するセキュリティプロトコル |
| 暗号化方式 | IPsec 通信で使用する暗号化アルゴリズム |
| 認証方式≒ハッシュ方式(sha-256) | IPsec 通信で使用する認証アルゴリズム |
| ライフタイム | IPsec SA の生存期間 |
| 通信モード | トンネルモード又はトランスポートモード |
具体的にそれぞれのパラメータがどのタイミングでどのような意図で使われるのか見ていこう。
1.プロポーザルの交換
セキュリティプロトコル(esp)、暗号化方式(aes-256)、ハッシュ方式(sha-256)、ライフタイム(3600)、通信モード(transport)を交換する
2.本番鍵の生成
ナンスを交換し、その素材とフェーズ1で作成したSKEYIDをベースに、暗号化鍵、ハッシュ鍵を生成する。
*例外としてもし、PFSを導入する場合はフェーズ1と同様にDHで1から鍵を作り直す
3.フェーズ2の完了
これ以降の通信はフェーズ1のトンネルは通らず、フェーズ2の鍵で実際に通信される
実例
#フェーズ2
crypto ipsec transform-set <ts名> esp-aes 256 esp-sha256-hmac
mode <tunnel または transport>p.16 静的経路制御でも広域イーサ網との間で負荷分散を行うことができるが、運用管理を容易にするためにOSPFを稼働させたい
Q.静的制御でどうやってやるの?
A.具体的には各拠点のプレフィックスなどからネクストホップをトンネルに設定したりする。しかし拠点のプレフィックスなどが増えるたびに、全拠点でスタティック設定を追加しなければならないため運用がとても大変。
Q.負荷分散はどうやってやるの?
A.同じ宛先に対してネクストホップを広域イーサ網とトンネルの2つを設定する。スタティック設定の場合、ただ2つを準備すれば勝手に負荷分散してくれるので、ルートマップやポリシー制御は特に不要。
p.17 L2TP(Layer 2 Tunneling Protocol)
まずはパケット構成から見ていこう。
[新IP][UDP][L2TP][PPP][IPパケット]のようになっている。
この図からわかる通り、L2TPだけでなく、PPPというヘッダも付加されていることが分かる。そのため、問題文中では単にL2TPと呼ばれているが厳密にいうと、PPP over L2TPのことである。なのでここからは問題文中のL2TPをPPP over L2TPと呼ぶことにする。
Q.PPP over L2TPは認証に重きを置いている。ではなぜGREoverIPsecではL2TP,PPPのような大きな認証ヘッダが付加されないの?
A.そもそもGRE over IPsecは拠点間通信に使われる。つまり、相互のルータの正当性が保証されている状態にある。そのため相手ルータ自体の認証機能はあるものの、ユーザ個人単位の認証は必要ないためそれに伴うヘッダも付加されない。一方、L2TPはリモートワークなどで動的に相手のIPアドレスが変わる環境で使われる。要は、信頼性が担保されない場面で使われる。そのためL2TPヘッダやPPPヘッダを別で付加して利用者個人に対する認証機能を装備する必要がある。要は、「GREoverIPsecは個人認証不要。逆にL2TPは個人認証が必須だからそれに伴いパケットサイズも増大してしまう」ということ。
Q.PPPってなに?
A.PPPはレイヤ2のプロトコル。つまり単体ではL3のルータを跨げないプロトコル。また、役割としては認証とIPアドレス配布を担う。具体的にどのように認証とIPアドレス配布が行われるのか手順を確認しよう。
1.LCP(Link Control Protocol)フェーズ
お互いで「こういう通信にしようぜ」というのをすり合わせる
2.認証フェーズ
チャレンジレスポンス方式などを使いユーザの認証を行う
3.NCP(Network Control Protocol) / IPCPフェーズ
IPアドレスの払い出し
以上が大まかな流れなので軽く押さえておきましょう!
Q.L2TPってなに?
A.一言でいうと、「トンネリングプロトコル」。トンネルを張ることで同一のLANにいるかのような振る舞いができる。では、イメージしやすいようにL2TPのトンネリングまでの流れを見ていこう!
1.物理IPの確認とTunnel IDの確認(Control Connection フェーズ)
PCから会社のルータに通信をして、「俺はTunnel IDの10番を使います!」と送り、ルータもPCに「では、私はTunnel IDの20番を使います!」と送る。それに対してPCが「OK、了解!」と送る。
*1つ目ののメッセージをSCCRQと呼び、2つ目ををSCCRPと呼び、3つ目をSCCNと呼ぶ。
2.Session IDの確認(Session フェーズ)
手順1では機器間で使う道に対するTunnel IDを確認した。次にやるのは実際にその道を使う人を識別するためのSession IDを交換する。PCは「俺はSession IDの200を使います!」と送り、ルータもPCに「では私は、Sessopn ID 220番を使います!」と送る。
*1つ目ののメッセージをICRQと呼び、2つ目ををICRPと呼び、3つ目をICCNと呼ぶ。
3.ルータ側でSession IDごとに仮想的な箱を作っておく
ルータがSession IDごとに仮想的な箱(Virtual-Access)を作っておくことで、「あ、このSessionIDならこの箱に丸投げしよう」とタスクを分けることができる。この箱はLANと接続しており、通常通りプライベートIPアドレスでの通信が可能になる。ルータと内部LANの中間にこの箱を挟むことで、ルータが外側IPをはがした後に「え?急にプライベートIPアドレスのパケット出てきたけど。。。どういうこと?」という混乱を吸収できる。
上記手順によって、仮想的にトンネルを作り出すことができる。
なお、このようにL2TPでは通常のルータが行う単純な転送機能の範疇を越えている。そのため、既存のルータの挙動を重ね合わせて理解しようとするのではなく、L2TPにはL2TP専用の高性能なルータが必要であり、内部での処理も別次元のことをしているという前提を持っておく必要がある。
p.18 PPPoE
A.PPPoEが使われる理由を一言でいうと「宛先を明示的にするため」。PPPは1対1が前提であるため、宛先を指定せずに通信ができる。しかしイーサネットの場合は1対多を前提にしているため、PPPのように宛先を記さない場合、宛先が分からず破棄されてしまう。そこで、イーサネット上でも1対1の通信をするためにPPPをイーサネットでカプセル化して、宛先を明示させる。それによりはきされることなく通信することができる。
p.18 図6 L2TP利用時の通信例

1.①PPPoEでインターネット接続可能にする
PCがインターネットを使えるようになるにはISPとPPPoE接続が必要になる。これによって自身のグローバルIPアドレスを取得してインターネットとの通信を可能にさせる。
ここまでのパケット構成:[Ethernet][PPP][PPP接続制御データ]
*直接PCがIPアドレスを取得するというよりも家庭内Wi-FiルータがISPとPPPoE接続をしてIPアドレスを取得するケースが多い。内部のPCはルータから払い出されるプライベートIPアドレスを使い、ルータがそれをNAPT変換してPPPoEに流すという構成が一般的。
*正直現在においてはPPPoEよりもIPoEがデフォルトになっている。なのでPPPoEやL2TPはややレガシー寄りの技術。
2.L2TPトンネルを作成する
手順1でグローバルIPを取得できたので、そのIPを使い会社のVPN装置とトンネルを作成する。
なお、依然としてISP経由の通信なのでPPPoEでのカプセル化は継続される。
ここまでのパケット構成:[Ethernet][PPP][物理IP][TCP/UDP][L2TP]
*なお1回目の通信でPPP認証は終わったので、移行のPPPはセッションIDが格納される。それによりユーザを識別子、毎回毎回認証必須とならないようにする。
3.PPPセッション確立
社内にいるかのような同一サブネットとして振舞わせるために、認証とIPアドレス払い出しをしてもらう必要がある。なお、L2TPでトンネル確立済みであるため、それがPPPの1対1通信をインターネットを跨いでも可能にしている。
ここまでのパケット構成:[Ethernet][PPP][物理IP][L2TP][VPN用PPP][社内IP][TCP/UDP]
4.PCとサーバで通信
1~3までの手順により、社内サーバと同一サブネットとして振舞うことができるようになったので、実際に通信する。
ここまでのパケット構成:[Ethernet][PPP][物理IP][L2TP][VPN用PPP][社内IP][TCP/UDP]
p.19 ESPヘッダ、ESPトレーラ、ESP認証データ
ESPヘッダ:SPIとシーケンス番号を格納している。
SPIはどのSAを使うかの識別子をあらわす。シーケンス番号はリプレイ攻撃に備え、同一のシーケンスは受け取らないようにすることで攻撃を防ぐ意味合いがある。
ESPトレーラ:パディングと次ヘッダーを格納
パディングは暗号化処理等で切りのいいデータ長にするためのもの。暗号化をする際は切りのいいデータ長でないと動作しないことがある。そのため、穴埋めの調整役として使われる箇所。
次ヘッダーは、次にどのようなパケットがあるか(IPv4なのかGREなのか..とか)を示すためのもの
ESP認証データ≒ICV(Integrity Check Value):ESPヘッダ~ESPトレーラまでをハッシュ化した値を格納する。
p.20 GREトンネルとルーティングの挙動
GREトンネルを作成した時のルーティングの挙動を見ていこう!なぜ、対向のトンネルで同一プレフィックスを使っているのか?なぜ、宛先を対向ルータIPにせず対向トンネルIPにするのか?
様々な疑問を解消していこう!ここでは、以下の構成に当てはめながら進めていく。
#全体像
LAN 10.0.0.0/8
Tunnel 172.16.10.1/30
A拠点
WAN100.0.0.1/24
|
|
|
|
|
|
WAN 200.0.0.1/24
B拠点
Tunnel 172.16.10.2/30
LAN 192.168.0.0/16
1.A拠点LAN(10.0.0.0/8)がB拠点LAN(192.168.0.0/16)への接続を図る
2.A拠点ルータが192.168.0.0/16へのネクストホップを検索する
スタティック設定をしている場合は、ネクストホップがB拠点のトンネル(172.16.10.2)になる
#拠点Aスタティック設定例
ip route 192.168.0.0 255.255.0.0 172.16.10.23.172.16.10.2へはどのインタフェースから流せばよいかを検索する。(再帰検索)
その結果、A拠点のトンネルインタフェースからの出力であることを判明させる。
4.トンネルから経由する際にGRE処理を実施する
GRE処理とはGREヘッダーの付加や新しい外側IPアドレスの付加を意味する。
*もし、GREヘッダがないと受信側は外側IPを剥がした途端にプライベートIPアドレスがでてきて、混乱してしまう。そうならないように、GREで中身はIPv4ですよ!マルチキャストですよ!これはトンネルですよ!と教えてあげることで、処理をスムーズに進める役割を担う。
#拠点Aのトンネル設定
interface Tunnel0
ip address 172.16.10.1 255.255.255.252
tunnel source Gi0/0
tunnel destination 200.0.0.1
!Tips
上記コマンドにより、トンネルのIPアドレスを設定し、トンネルの物理的な送信元IPと宛先IPを指定する
トンネルの送信元をインタフェースにすることでIPアドレスの変更にも対応できる5.インターネットへ流す
GRE処理が終わるとインターネットを跨げる状態になるので拠点BのWAN側インターフェースまでパケットを流す
6.拠点BのWAN側インタフェースからトンネルへ
外側IPアドレスとGREヘッダから、「これはトンネルの通信だ!」と判断し、トンネルインタフェースに流す。なお、拠点Bのルータは、送信元と宛先のペアから適切なトンネルを判断する。
*万が一、送信元と宛先のペア内に複数のトンネルを作りたい場合は、特別にキーを指定することで識別を可能にする。
# トンネル0と1で、GREヘッダーの中に別々の「合言葉(Key)」を埋め込む設定
(config-if)# tunnel key 100 (Tunnel 0用)
(config-if)# tunnel key 200 (Tunnel 1用)7.トンネルインタフェースから内部LANへ
トンネルの出口でGREヘッダを剥がす。そこでトンネル通信が終端して、あとは、通常通り内部LAN側インタフェースからパケットを送信する。
以上、これがGREトンネルの流れ。
Q. そもそもPC同士が通信する必要ある?特定のサーバをNAPTすればトンネルとかいらなくね?
A.実はPC同士でやり取りする機会はめっちゃ多い。そのためすべてをNAPTしていたらマッピングテーブルを手動で何百回も設定しなおす必要があるため、とても大変になる。また、内部のPCをNAPTできてしまうと、外部の攻撃者も内部PCにアクセスできてしまうのでセキュリティリスクがある。
では、具体的にPC同士の通信をするケースを見ていこう。
①IT管理者によるリモートデスクトップ接続:
社員のPC不具合時などにリモデでIT管理者が直す際に、社員ごとにポートを割り当てたり、切り替えたりするのは効率的とは言えない。それよりも同一サブネットのように扱わせればプライベートIPアドレスでやり取りができるようになる。
②配信最適化(Windowsアップデート等):
Windowsのアップデートなどで全PCがMicrosoftのサーバにファイルを取りに行くとインターネット回線が圧迫される。しかし同一のサブネットであればPC同士で「君、ファイル持っている?」とやり取りしてもっていたら近くのPCからファイルをもらえるようになる。これによりインターネット回線によるシェーピングやポリシングなどの制限を受けることなくLANのMAXを引き出しダウンロードの高速化をすることができるようになる。
③分散コンパイル:
3Dグラフィックなどの多くのCPU処理を必要とする場合、処理を空いているPCに分散して割り振るということができる。しかし、空いているPCは常に固定ではないのでNAPTで対応しようとすると面倒くさい。そのため「トンネル使ったほうがいいよね!」というケースがある。
p.21 OSPFのリンクステート情報の交換は、L3SWとIPsecルータのWANへのアクセス回線を接続するポートだけでなく、L3SWとIPsecルータを直接接続するポートでも行わせる。
IPsecルータとL3SW間で直接OSPFを動作させることで経路の冗長化が可能になる。冗長化することで、同一宛先に対して、複数の経路を持てるようになる。もし、一方のWAN回線が切れたら、優先度が低かった経路情報がルーティングにのってそれに従ってほかのWAN回線から通信ができるようになる。
