【VPN】1ヶ月ルータと格闘した話

概要

本投稿は, ITRC Advent Calendar 2019の10日目の記事になります.

追記(2019/12/11)
画像のIPアドレスが間違っていたので修正しました. 勘違いしていたことについて補足しました.

目次

はじめに

部室にあったNECのIX2025ルータを2台借りてVPNを張る実験を行いました. これにはなかなか苦戦して, 約一ヶ月ほどルータと格闘していました. 時間がかかりすぎたとは思いますが, そのなかで得るものは多かったので忘れないうちにまとめておこうと思います.

私自身, 実験環境とはいえネットワークを構築するのははじめてだったので, ルータの設定はあまり参考にならないと思います. 将来の自分がネットワークの構築に詰まったときに役に立てばと思って書いています.

やったこと・環境

IX2025 2台

ファームウェアのバージョン: 9.5.20

最終的に以下のネットワークを構築しました.
片方の拠点をRouter1, もう片方をRouter2と名前をつけました.

コンフィグ

ホスト名などの設定は省略しVPNに関連する部分だけ書いています.

長いので折りたたみます.

Router1のコンフィグ

  • アクセスリストの設定

    ここで作成したアクセスリストをWAN側インターフェースに割り当てます.

1
ip access-list esp-list permit tcp src any sport any dest any dport eq 50
2
ip access-list flt-list permit ip src 10.255.0.0/16 dest 10.255.0.0/16
3
ip access-list sec-list permit ip src any dest any
4
ip access-list udp-list permit udp src any sport eq 500 dest any dport eq 500
5
ip access-list udp2-list permit udp src any sport eq 4500 dest any dport eq 4500
  • IKE・IPSecの設定
1
ike nat-traversal
2
!
3
ike proposal ikeprop encryption aes-256 hash sha
4
!
5
ike policy ike-policy peer 10.255.100.161 key secret-vpn ikeprop
6
ike local-id ike-policy address 10.255.100.160
7
!
8
ipsec autokey-proposal secprop esp-aes-256 esp-sha
9
!
10
ipsec autokey-map ipsec-policy sec-list peer 10.255.100.161 secprop
11
ipsec local-id ipsec-policy 10.255.100.160
12
ipsec remote-id ipsec-policy 10.255.100.161
  • 間違った鍵でSAが失敗したときにやり直す設定
1
watch-group host 10
2
  event 10 ip unreach-host 10.255.100.161 Tunnel0.0
3
  probe-timer restorer 60
4
  probe-timer variance 60
5
!
6
network-monitor host enable
  • トンネルの設定
1
interface Tunnel0.0
2
  description test
3
  tunnel mode ipsec
4
  ip unnumbered FastEthernet0/0.0
5
  ip tcp adjust-mss auto
6
  ipsec policy tunnel ipsec-policy out
7
  no shutdown

Router2のコンフィグ

  • アクセスリストの設定
1
ip access-list esp-list permit tcp src any sport any dest any dport eq 50
2
ip access-list flt-list permit ip src 10.255.0.0/16 dest 10.255.0.0/16
3
ip access-list sec-list permit ip src any dest any
4
ip access-list udp-list permit udp src any sport eq 500 dest any dport eq 500
5
ip access-list udp2-list permit udp src any sport eq 4500 dest any dport eq 4500
  • IKE・IPSecの設定
1
ike proposal ikeprop encryption aes-256 hash sha
2
!
3
ike policy ike-policy peer 10.255.100.160 key secret-vpn ikeprop
4
ike remote-id ike-policy address 10.255.100.160
5
!
6
ipsec autokey-proposal secprop esp-aes-256 esp-sha
7
!
8
ipsec autokey-map ipsec-policy sec-list peer 10.255.100.160 secprop
9
ipsec local-id ipsec-policy 10.255.100.161
10
ipsec remote-id ipsec-policy 10.255.100.160
  • 間違った鍵でSAが失敗したときにやり直す設定
1
watch-group host 10
2
  event 10 ip unreach-host 10.255.100.160 Tunnel0.0
3
  probe-timer restorer 60
4
  probe-timer variance 60
5
!
6
network-monitor host enable
  • トンネルの設定
1
interface Tunnel0.0
2
  tunnel mode ipsec
3
  ip unnumbered FastEthernet0/0.0
4
  ip tcp adjust-mss auto
5
  ipsec policy tunnel ipsec-policy out
6
  no shutdown

ルータと過ごした1ヶ月

最初の1週間

まず, VPNについての知識がなかったので, VPNの種類やIPsecの仕組みについて調べました. NECのルータを触るのは初めてでは無かったので, VPNについて知ればすぐに終わるとこのときは思っていました.

パケットの構造などは詳しくは調べず, 定義や仕組みを中心に何を設定すればいいのか知りました.

取り組み始めて2週目

VPNの仕組みがある程度わかったので, 実際にコンフィグを書き始めました. IX2025はVPNが張られているとランプが光るので, それを目標にしていました. 最初に書いたコンフィグではうまく行かないだろうと思っていたので, このときはいくつかコンフィグを用意してそれを試していました.

いくつか試せば今週中に終わるだろうと思っていたのですが, 大変だったのはVPNに関するログが出ないことです. どこが間違っているのかログから調査すればいいと実験当初は思っていたのでここで苦戦しました.

ここではNECのコンフィグ作成ツールを使って作ったコンフィグをいじりながらコンフィグを書きました.

取り組み始めて3週目

3週目には当てずっぽうになりつつありました. VPNに関するログが出ないということはVPN関連以外の部分が間違っていると思い, この週から先輩に相談をしました. この週はなかなか進捗が得られなかったのですが, ネットワークについて一番知見を深められたと思います.

まず, ネットワークの構成を考え直しました. VPNに関する設定は間違っていないと思っていたので, それ以外の部分に間違いがあると思っていたからです.

経路集約やルーティングプロトコルについて勉強しました. そしてこの週にWANとLANとインターネットについて整理しました. それが一番問題解決に近づいたと思います. これについては長くなるので後述します.

始めてから4週がたって

IPアドレスの設定をやり直したので, 初めてログにIKEとIPsecの文字がでました. そこからは簡単で, ログに出たエラーを修正するだけでした.

最後まで残った間違いは, 一番最初から最後まで同じ設定をしていた部分でした.

インターネットとLAN

3週目に勘違いしていたことがわかった知識について説明します.

相手ルータのアドレスとプレフィックスが無いと通信できないと思っていました. アドレスだけだとインターネットにそのIPを持っているNW機器を探しに行くと思っていました.

IX2025はプレフィックスを指定せずアドレスのみを設定する箇所があり, アドレスの情報のみだとインターネット上に相手を探しに行くと考えました. なのでローカルアイドルを指定したのでは接続できないと思いました.

そこで, 一旦インターネットに出て, もう一度部室内ネットワークに返ってくると思いました.

正しくはルーティングテーブルにアドレスがあればそちらを探しに行きます.

これはいわゆる二重ルータにもつながる知識です.

言い訳

ここで一つ言い訳させてほしい.

1
ip access-list flt-list permit ip src 10.255.0.0/16 dest 10.255.0.0/16

上記はRouter1のアクセスリストの設定の一部である(Router2も同様). 私が詰まったのは宛先ネットワークと送信元ネットワークの部分である. ここには宛先/送信元のネットワーク, もしくはIPアドレスのどちらかを入れるのだが, ネットワークを指定する場合にはサブネットを書き, IPアドレスを書く場合にはアドレスのみを書く必要がある. ここで私はIPアドレスを指定し, かつそこにサブネットを書いていたのだ. そう, これが1ヶ月かかった大きな原因である.

言い訳というのは私の犯した間違いはエラーにならないということだ. IX2025はTab補完ができるので補完を酷使することになるのだが, 基本的に文法が間違っていたり, IPアドレスやネットワークの設定が間違っていると怒られる. しかし, ここだけは何故か怒られることがなかったのだ.

本当にみっともないが, これが1ヶ月かかった一番の原因である.

今後構築が詰まったときにどうするか

  • ログがでないときにはログを作る
    ルータ自体ではなく外からpingnmaptracerouteといったツールを使って調査を進める.
  • 狭い範囲をだんだん広げていく
    IPアドレスの範囲やポート番号はまず必要な部分を設定していく. 私のように「とりあえずでかくするか」とするとルータに怒られる.

    これは実験環境だからよかったものの, 本番環境でやったら大問題なので勉強になった.

  • 自分ができていると思ったところから確認し直す

    これは経験を積んでいくしかないと(この記事を書いた当時)思っている. できるはずなのにできないのはどこかが間違っているから.

まとめ

ネットワークについて勉強不足な自分にとってネットワークの構築はとても勉強になりました. 実験でVPNが張れたとはいえ, まだまだ仕組みについて知らないことは多いので引き続き勉強していきたいです.

いろいろ書きすぎて長くなってしまいました. ここまで読んでくれてありがとうございます.