拠点間VPN 構築
最初に
拠点間VPNについて試してみる。
それにしてもCiscoの実機がほしい。
普段使っているcisco891fjはあまりいじりたくないので検証用に安いの買おうかな。。
今回のVPNの構築については独学(勉強中)でググりながら試すものなので、
実務を行う上で使えるかはわかりません。
とりあえず下の図の構成で、
全ノード同士が通信ができ、プライベートIP同士でUbuntuからCentのWebサーバにアクセスできればOKとします。
構築
基本設定+IPアドレスの設定
ここは今回のテーマではないので軽く流す。
各ルータに基本的な設定を入れていく。
検証するのに邪魔なタイムアウトを無くす云々。
#conf t
(config)#ip no domain-lookup
(config)#line con 0
(config-line)#exec-timeout 0
(config-line)#logging synchronous
(config-line)#exit
(config)#hostname <host>
次にIPアドレスの設定
ホスト | IF | IP | MASK | デフォルトゲートウェイ |
---|---|---|---|---|
Ubuntu | e0 | 192.168.2.1 | 255.255.255.0 | 192.168.2.254 |
Slax | e0 | 192.168.1.2 | 255.255.255.0 | 192.168.1.254 |
CentOS | e0 | 192.168.1.1 | 255.255.255.0 | 192.168.1.254 |
A-Router | G0/0 | 192.168.1.254 | 255.255.255.0 | – |
G0/1(Dialer1) | 10.1.2.2(IPCP) | 255.255.255.255 | – | |
B-Router | G0/0 | 192.168.1.254 | 255.255.255.0 | – |
G0/1(Dialer1) | 10.1.3.2(IPCP) | 255.255.255.255 | – | |
R1 | G0/1 | 10.1.2.1(lo0) | 255.255.255.255 | – |
G0/0 | 10.1.1.1 | 255.255.255.252 | – | |
R2 | G0/0 | 10.1.1.2 | 255.255.255.252 | – |
G0/1 | 10.1.1.5 | 255.255.255.252 | – | |
G0/3(internet) | DHCP | – | – | |
R3 | G0/1 | 10.1.1.6 | 255.255.255.252 | – |
G0/0 | 10.1.1.9 | 255.255.255.252 | – | |
R4 | G0/0 | 10.1.1.10 | 255.255.255.252 | – |
G0/1 | 10.1.3.1(lo0) | 255.255.255.255 | – |
これらの通りに設定する。
Dialerについては前にPPPoEの設定時に設定する。
PPPoEの設定
PPPoE設定は以前に行ったのでそれをもとに設定。
R1, R4(PPPoEサーバ)
(config)#username <user> password 0 <pass>
(config)#in lo 0
(config-if)#ip add <ip> 255.255.255.255
(config-if)#no shut
(config-if)#exit
(config)#ip local pool <POOL名> <クライアントに割り当てるiP>
(config)#int Virtual-Template 1
(config-if)#mtu 1454
(config-if)#ip unnumberd lo 0
(config-if)#peer default ip address pool <POOL名>
(config-if)#ppp authentication chap
(config-if)#ppp ipcp dns 8.8.8.8
(config-if)#exit
(config)#bba-group pppoe <bbaグループ名>
(config-bba-group)#virtual-template 1
(config-bba-group)#exit
(config)#int g0/1
(config-if)#pppoe enable group <bbaグループ名>
(config-if)#no shut
A-Router, B-Router(PPPoEクライアント)
(config)#int dialer 1
(config-if)#ip add negotiated
(config-if)#ip mtu 1454
(config-if)#encapsulation ppp
(config-if)#dialer pool 1
(config-if)#dialer-group 1
(config-if)#ppp authentication chap callin
(config-if)#ppp chap hostname <user>
(config-if)#ppp chap password <pass>
(config-if)#ppp ipcp dns accept
(config-if)#exit
(config)#dialer-list 1 protocol ip permit
(config)#int g0/1
(config-if)#pppoe enable
(config-if)#pppoe-client dial-poool-number 1
(config-if)#no shut
(config-if)#exit
(config)#ip route 0.0.0.0 0.0.0.0 dialer 1
OSPFの設定
次にOSPFの設定を行う。
R1,R2,R3,R4がOSPFに所属する。
これらの間のネットワークは全てarea0に所属し、イーサネットとはいえネットワーク間に2台のルータしか存在しないため、OSPFタイプはPoint-to-Pointで動作させる。
また、R2のInternet宛の通信はシミュレータの関係上NAPTにしてあり、
このスタティックルートをデフォルトルートとして広告させる。
R1, R4についてはPPPoEとして直接接続のルートをlo0, PPPoEクライアント宛の2つを持っており、
これらは集約してOSPFに再配布させる。
例)R1 lo0:10.1.2.1, G0/1:10.1.2.2 → 集約:10.1.2.0/24(OSPFにredistribute)
ココが正直自分も理解できていない。
PPPoEに関するIPアドレスの設計方法と再配布方法など、
今回は繋がれば良しとしているが本来はどうなのだろう…
各ルータ
対象インターフェースのOSPFを有効化する。
(config)#router ospf 1
(config-router)#network <network address> 0.0.0.3 area 0
OSPFタイプをPoint-to-Pointに変更する。
(config)#int g0/0
(config-if)#ip ospf network point-to-point
R2
デフォルトルートを広告する。
//NAPT設定
(config)#access-list 1 permit any
(config)#ip nat inside souce list 1 interface G0/3 overload
(config)#int g0/3
(config-if)#ip nat outside
(config-if)#ip add dhcp
(config-if)#no shut
(config)#int g0/0
(config-if)#ip nat inside
(config)#int g0/1
(config-if)#ip nat inside
(config-if)#exit
(config)#ip route 0.0.0.0 0.0.0.0 <ネクストホップ>
//デフォルトルート広告
(config)#router ospf 1
(config-if)#default-information originate
R1, R4
PPPoEの直接接続リンクを再配布
(config)#router ospf 1
(config-router)#redistribute connected
集約
(config)#router ospf 1
(config-router)#summary-address 10.1.?.0 255.255.255.0
R1, R4のルート情報を確認
これらのようにR1,R4の直接接続ネットワークが集約されて広告されている。
ここで注意したいのがルーティングループ。詳しくは下の内容。
ルーティングループ
上記の写真を見ると、集約したルートにNull0インターフェースが追加されている。
10.1.3.0/24, 10.1.2.0/24これは手動で入れたわけではなく、自動で追加された。
これは集約した際に重要になるもので、実際に届いたら破棄する。
上の例を見てもうとわかるように、R3には集約ルートを広告しているため、
R4側でアサインされていないアドレス宛の通信だった場合はR4からデフォルトルートに流れてしまい、ループが発生してしまう。これを防ぐために、実際に届いたら破棄するNull0が追加されている。
以上の設定が完了すると、全てのノードが通信可能になる。
(UbuntuとCentOSはNAPT環境のため現在は疎通不可)
次にA-RouterとB-RouterでIPsecのVPNを構築し、プライベートアドレス通しで通信させる。
IPsec-VPN
A-RouterとB-RouterでIPsec-VPNでリンクするように設定する。
インターネットへの通信は各ルーターからそれぞれ外に出る。
これを実装するにはACLに気をつける必要がある。
PAT設定
まずはA-RouterとB-RouterのPAT(NAPT)を有効にする。
(config)#ip access-list extended NAPT
(config-ext-nacl)#10 deny ip any 192.168.2.0 0.0.0.255 //A-Routerの場合。Bは192.168.1.0
(config-ext-nacl)#20 permit ip any any
A-RouterでCent宛の通信にNAPTが適用されている場合、Centに届くパケットの
送信元がグローバルIPアドレスになってしまい、帰りのパケットがIPsecの対象外になってしまう。
そこで、上のように相手側のプライベートアドレス宛はNAPTの対象から外す。
(config)#ip nat inside source list NAPT interface dialer 1 overload
(config)#int dialer 1
(config-if)#ip nat outside
(config-if)#int g0/0
(config-if)#ip nat inside
これでIPsecを経由する通信以外は通常通りネットワークに出るようになった。
次にIPsec-VPNの設定を行う。
IPsec-VPN設定
IPsec-VPNにはフェーズ1、フェーズ2がある。
フェーズ1
フェーズ1のポリシーを設定する。
ISAKMPポリシーを設定する。
番号は優先度。
(config)#crypt isakmp policy 1
ISAKMP SAについて、
暗号化アルゴリズム、ハッシュアルゴリズム、認証方式、DHグループ、 事前共有鍵を決定する。
これらは対向のVPN終端装置と揃える必要がある。
※見ての通り、対向のIPアドレスが必要になる。
ISAKMPではMainモード、Aggressiveモードがあり、動的IP(グローバルが動的、リモートアクセスVPN)の場合はAggressiveモードにする。今回はMainモード。
(config-isakmp)#encr aes 128
(config-isakmp)#hash sha
(config-isakmp)#authentication pre-share
(config-isakmp)#group 2
(config-isakmp)#exit
(config)#crypto isakmp key <PASS> address <PeerのIP>
フェーズ2
フェーズ2のポリシーを設定する。
フェーズ2ではフェーズ1で作成したISAKMP SAの上にIPsec SAを生成する。
(config)#crypt ipsec transform-set <NAME> <トランスフォーム1> <トランスフォーム2>
トランスフォームには種類があり、ESP,AHの暗号化や認証の組み合わせを設定する。
今回は、esp-aes 256, esp-sha-hmacの組み合わせ。
モードはデフォルトのtunnelモード
IPsec-VPNを経由させる通信をACLで設定する。
(config)#access-list 100 permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255 //A-Router。Bは逆
暗号マップの設定
(config)#crypt map <MAPNAME> 1 ipsec-isakmp
(config-crypto-map)#set peer 10.1.3.2 //A-Routerの場合。(対向アドレス)
(config-crypto-map)#match address 100
(config-crypto-map)#set transform-set <NAME> //トランスフォームセットの名前
インターフェースへの適用
(config)#int dialer 1
(config-if)#crypto map <MAPNAME> //暗号マップを適用させる
以上で設定は完了。
確認
ISAKMP SAの確認
#show crypto isakmp sa
IPv4 Crypto ISAKMP SA
dst src state conn-id status
10.1.3.2 10.1.2.2 QM_IDLE 1001 ACTIVE
IPsec SAの確認
#show crypto ipsec sa
接続の確認
UbuntuからApacheを起動しているCentOSにアクセスしてみる。
アクセスすることが出来た。
次にパケットをキャプチャした内容を見てみる。
A-RouterのG0/0(LAN側)
A-RouterのG0/1(WAN側)
CentOS宛の通信はESPに変わり対向ルータに送られている。
B-RouterのG0/0(LAN側)
B-Routerにて届いたESPを外し、LANに転送される。
IPsecVPNのACL外の通信はNAPTされインターネットに送信される。
下の例はUbuntuからGoogleのDNSに問い合わせしている例。
SlaxからもVPNを経由出来ている。
以上。