Cisco1812J VPN Settings
VPN の設定のしかたがよくわからないので試していた。Cisco VPN Client を使って 1812J に Remote Access VPN をする (EZVPN) ときの設定のメモ。おおむねマニュアル通りで良いのだけど、NAT(PAT/Static NAT) との組み合わせでちょっとはまったのでざっと残しておく。
参考はこの辺
Ciscoのページは、Site-to-Site と Remote access VPN の設定とを混ぜて書いてあるものが多いので注意…。最初 VPN の設定とかよくわからないまま見て混乱してしまった。
Diagram/NAT
テスト環境をこんな感じで作った。
VPN Client (192.168.1.102) | ----+----------------+------------------- 192.168.1.0/24 | 1812J, Fa0/outside (192.168.1.32) 1812J, Fa1/inside (172.16.1.2) | ----+----------------+------------------- 172.16.1.0/24 | Web Server (172.16.1.16)
NAT 設定
- 1812J は Internet 接続用ルータとして使用するので、inside to outside に関しては NAT (pat) をする。
- Web Server は Internet から接続させるために Static NAT を設定する。
interface FastEthernet0 ip address 192.168.1.32 255.255.255.0 ip nat outside ! interface FastEthernet1 ip address 172.16.1.2 255.255.255.0 ip nat inside ! ip nat inside source list 100 interface FastEthernet0 overload ip nat inside source static tcp 172.16.1.16 80 interface FastEthernet0 80 ! access-list 100 permit icmp 172.16.0.0 0.0.127.255 any access-list 100 permit ip 172.16.0.0 0.0.127.255 any access-list 100 deny ip any any log
VPN
AAAとユーザアカウント
ユーザ情報はローカルで。
aaa new-model aaa authentication login USERAUTH local aaa authorization network GROUPAUTH local aaa session-id common
ISAKMPポリシの設定
crypto isakmp policy 1 encr aes 256 hash sha authentication pre-share group 2
VPN クライアントのグループ定義
crypto isakmp client configuration group VPNCLIENT key xxxxxxxxx dns 192.168.2.16 pool VPN_POOL acl 110 save-password pfs netmask 255.255.255.0 ! access-list 110 permit ip 172.16.0.0 0.0.127.255 any ! ip local pool VPN_POOL 172.16.255.1 172.16.255.254
VPN クライアントの ISAKMP プロファイル
VPNグループ定義と人称設定の関連づけ。
crypto isakmp profile VPNCLIENT_PROFILE match identity group VPNCLIENT client authentication list USERAUTH isakmp authorization list GROUPAUTH client configuration address respond !
IPSec 暗号セットの定義
crypto ipsec transform-set VPN_SET esp-aes 256 esp-sha-hmac
EzVPN Dynamic Map の定義
アクセス元 (VPN Client) は固定 IP ではなく動的に変化するので Dynamic Map を使用する。
crypto dynamic-map DYNMAP 1 set transform-set VPN_SET set isakmp-profile VPNCLIENT_PROFILE reverse-route !
reverse-route を入れておくとルーティングテーブルに VPN Pool の情報が追加される。内部で動的ルーティングにより経路制御を行っている場合は VPN 機器のルーティングテーブルに入れた上で再配布させる。
暗号マップの定義
crypto map EZVPN-MAP 1 ipsec-isakmp dynamic DYNMAP
インタフェースへの適用
interface FastEthernet0 crypto map EZVPN-MAP !
VPN Client Setting
リモートアクセスVPN - Ciscoコンフィグ (EzVPNリモート) 参照。
接続できたら確認する。
- VPN Client
- [ステータス]-[統計情報]
- "ルートの詳細" タブで Split Tunneling の情報がわかる。cmd.exe で "route PRINT" でもいいけど。
- [ステータス]-[統計情報]
- Router
Router#sh crypto session detail Crypto session current status Code: C - IKE Configuration mode, D - Dead Peer Detection K - Keepalives, N - NAT-traversal, X - IKE Extended Authentication Interface: FastEthernet0 Session status: UP-ACTIVE Peer: 192.168.1.102 port 53366 fvrf: (none) ivrf: (none) Phase1_id: VPNCLIENT Desc: (none) IKE SA: local 192.168.1.32/500 remote 192.168.1.102/53366 Active Capabilities:CDX connid:2011 lifetime:22:48:26 IPSEC FLOW: permit ip 0.0.0.0/0.0.0.0 host 172.16.255.10 Active SAs: 2, origin: dynamic crypto map Inbound: #pkts dec'ed 43 drop 0 life (KB/Sec) 4555253/24509 Outbound: #pkts enc'ed 68 drop 0 life (KB/Sec) 4555248/24509 Router#
NAT設定
PAT
上の設定で VPN 接続はできるのだけど、そのままだと PAT 設定と干渉してしまう。VPN接続後、VPN Client から Web Server への ping をしてみると
vpn client (pool: 172.16.255.x) --------- 1812J ------------- Web server (172.16.1.16) src: 172.16.255.x dst: 172.16.1.16 -------------- icmp request ---------------> src: 192.168.1.32 src: 172.16.1.16 dst: 172.16.255.x <------------- icmp response <-------------- dst: 172.16.255.x
このように戻りのパケットに NAT がかかった状態になってしまうため通信が成立しない。PAT を併用する場合は VPN Pool に対しては PAT から除外する必要がある。
- 参照: NAT オーバーロードと Cisco Secure VPN クライアントを使用する IPSec Router-to-Router の設定 – テクニカルサポート – Cisco Systems
PAT 対象を指定している ACL で pool ip range を deny してやる。
access-list 100 deny icmp any 172.16.255.0 0.0.0.255 access-list 100 deny ip any 172.16.255.0 0.0.0.255 access-list 100 permit icmp 172.16.0.0 0.0.127.255 any access-list 100 permit ip 172.16.0.0 0.0.127.255 any access-list 100 deny ip any any log
Static NAT
この上でさらに VPN Client から Web Server に対して内部のアドレス HTTP アクセスする (tcp/80, src:172.16.255.x, dst:172.16.1.16) とやはりうまくいかない。現象としては同様で、戻りのパケットに対して NAT がかかってしまう。
これも static nat の設定に引っかかってしまうためで、外から tcp/80 のアクセスをさせるための設定が VPN で接続したときのトラフィックに引っかかってしまうようだ。
とりあえずいまは Web (apache) で VirtualHost でポートを変えて Listen させ、内部接続用と外部接続用でポート使い分けるようにして回避しておく。
というようなあたりで、NAT と併用しないのであればそれほど難しくはないのだけど、NAT 併用し始めたときにどういう順序で何が処理されるのかを把握できていないとハマる。(この辺の話はハマっていて Twitter でぼやいたら @H_Shinonome さんに教えていただきました。)
VPN やってみたときにうまくいかない場合 (VPNトンネル張れて接続できているのに通信ができない場合) はルーティングか NAT 設定あたりの確認が必要ということで。今回コケたのは
- "reverse-route" + 再配布していなくて経路が足りなかった (最初は L3 Switch が Router/Web 間にある環境で試していたのだけど、VPN pool へのルートがなかったのでパケットが Web Server に届いていなかった。ややこしいので上の図のように間に hop がない環境でやり直した。)
- 上記の通り NAT 設定との干渉。VPN Client にどういうパケットが届いているかは、VPN Client でパケットキャプチャして確認する: Wireshark で "Cisco Systems VPN Adapter" というインタフェースを指定すると、トンネル内に流しているパケットが確認できる。