Cisco 800MシリーズでIPSec VPNを構築

#背景
Ciscoのルーターを使ってSite-to-Site VPNを構築する方法はたくさん出てくるのですが、個人レベルでも購入できるCisco 800Mシリーズのルーターを使ってVPNを構築したいと思いました。
ここでは一般家庭によくあるフレッツPPPoE接続でVPNを構築すべく、いろいろと苦労した上に接続できた記録を残しておきます。

※ネットワークエンジニアじゃありませんので素人がやってると思ってください。
※おかしな点、セキュリティ上マズいことあったら教えてもらえると助かります

【追記】
フレッツならIPv6オプションを使ってインターネットを経由せずにVPN構築したほうが高速です。


#前提条件
・少なくとも片側のグローバルIPアドレスが固定アドレスであること
そうでない場合は、DDNSを使う方法があるそうですが、今回は固定IPを持っていたため試していません。




#ネットワーク構成
拠点Aと拠点BをインターネットVPNで接続します。
片側が固定IPである必要がありますが、もう片側は動的IPとなる、ごく一般的な家庭の構成を想定しています。
ここでは、拠点BのPCから拠点Aのファイルサーバーへアクセスすることを目的とします。
セグメント違いのL3VPNとなるため、VPN越しにゲームのローカル対戦などはできないと思われます。

![Untitled Diagram(1).png](https://qiita-image-store.s3.amazonaws.com/0/124395/a7514f5c-02dc-1525-6f07-dfa99a964e0b.png)

#拠点A側の設定
※主要部分のみ抜粋

```
!
crypto isakmp policy 10
 encr aes 256
 authentication pre-share
 group 2
crypto isakmp key XXXXXXXXXXXXXXXXXXXXXXXXXX address 0.0.0.0        
crypto isakmp keepalive 30 periodic
!
!
crypto ipsec transform-set ESP-AES256-SHA1 esp-aes 256 esp-sha-hmac 
 mode tunnel
!
!
!
crypto dynamic-map AT-VPN 10
 set security-association lifetime seconds 86400
 set transform-set ESP-AES256-SHA1 
 match address VPN_TRAFFIC
!
!
crypto map VPN 1 ipsec-isakmp dynamic AT-VPN 
!
!
!
!
!
interface GigabitEthernet0/0
 no ip address
!
interface GigabitEthernet0/1
 no ip address
!
interface GigabitEthernet0/2
 no ip address
!
interface GigabitEthernet0/3
 no ip address
!
interface GigabitEthernet0/4
 no ip address
 duplex auto
 speed auto
 pppoe enable group global
 pppoe-client dial-pool-number 1
!
interface GigabitEthernet0/5
 no ip address
 shutdown
 duplex auto
 speed auto
!
interface Vlan1
 ip address 192.168.1.1 255.255.255.0
 ip nat inside
 ip virtual-reassembly in
 ip tcp adjust-mss 1414
!
interface Dialer1
 mtu 1454
 ip address negotiated
 ip access-group INTERNET in
 ip nat outside
 ip inspect CBAC out
 ip virtual-reassembly in
 encapsulation ppp
 ip tcp adjust-mss 1414
 dialer pool 1
 dialer idle-timeout 0
 dialer-group 1
 ppp authentication chap callin
 ppp chap hostname xxxxx@xxxxx
 ppp chap password 0 xxxxxxx
 ppp ipcp dns request accept
 crypto map VPN
!
ip forward-protocol nd
no ip http server
no ip http secure-server
!
!
ip dns server
ip nat inside source list 100 interface Dialer1 overload
ip route 0.0.0.0 0.0.0.0 Dialer1 permanent
!
ip access-list extended INTERNET
 permit icmp any host 1.1.1.1
 permit udp any host 1.1.1.1 eq isakmp
 permit esp any host 1.1.1.1
 permit ahp any host 1.1.1.1
 deny   ip any any
ip access-list extended VPN_TRAFFIC
 permit ip 192.168.1.0 0 0.255.255.255 192.168.2.0 0.255.255.255
ip access-list extended nat-list
 permit ip object-group local_lan_subnets any
!
dialer-list 1 protocol ip permit
!
!
access-list 100 deny   ip 192.168.1.0 0 0.255.255.255 192.168.2.0 0.255.255.255
access-list 100 permit ip 192.168.1.0 0 0.255.255.255 any
!
!
!
```


#拠点B側の設定
※主要部分のみ抜粋

```
crypto isakmp policy 10
 encr aes 256
 authentication pre-share
 group 2
crypto isakmp key XXXXXXXXXXXXXXXXXXXXXXXXXXXXX address 1.1.1.1
crypto isakmp keepalive 30 periodic
!
!
crypto ipsec transform-set ESP-AES256-SHA1 esp-aes 256 esp-sha-hmac 
 mode tunnel
!
!
!
crypto map VPN 10 ipsec-isakmp 
 set peer 1.1.1.1
 set transform-set ESP-AES256-SHA1 
 match address VPN_TRAFFIC
!
!
!
!
!
interface GigabitEthernet0/0
 no ip address
!
interface GigabitEthernet0/1
 no ip address
!
interface GigabitEthernet0/2
 no ip address
!
interface GigabitEthernet0/3
 no ip address
!
interface GigabitEthernet0/4
 no ip address
 duplex auto
 speed auto
 pppoe enable group global
 pppoe-client dial-pool-number 1
!
interface GigabitEthernet0/5
 no ip address
 shutdown
 duplex auto
 speed auto
!
interface Vlan1
 ip address 192.168.2.1 255.255.0.0
 ip nat inside
 ip virtual-reassembly in
 ip tcp adjust-mss 1414
!
interface Dialer1
 mtu 1454
 ip address negotiated
 ip access-group INTERNET in
 ip nat outside
 ip inspect CBAC out
 ip virtual-reassembly in
 encapsulation ppp
 ip tcp adjust-mss 1414
 dialer pool 1
 dialer idle-timeout 0
 dialer-group 1
 ppp authentication chap callin
 ppp chap hostname xxxx@xxxxx
 ppp chap password 0 xxxxxxxxxx
 ppp ipcp dns request accept
 crypto map VPN
!
ip forward-protocol nd
no ip http server
no ip http secure-server
!
!
ip dns server
ip nat inside source list 100 interface Dialer1 overload
ip route 0.0.0.0 0.0.0.0 Dialer1 permanent
!
ip access-list extended INTERNET
 permit ip host 1.1.1.1 any
 deny   ip any any
ip access-list extended VPN_TRAFFIC
 permit ip 192.168.2.0 0.255.255.255 192.168.1.0 0 0.255.255.255
ip access-list extended nat-list
 permit ip object-group local_lan_subnets any
!
dialer-list 1 protocol ip permit
!
!
access-list 100 deny   ip 192.168.2.0 0.255.255.255 192.168.1.0 0 0.255.255.255
access-list 100 permit ip 192.168.2.0 0.255.255.255 any
!
!
```