EdgeRouter - EdgeRouter와 Cisco ISR 간의 IPsec 정책기반 사이트 투 사이트 VPN =============================================================== download at 2017-08-30T17:45:32Z `origin `_  Overview -------------- 이 문서는 EdgeRouter와 Cisco ISR 사이의 정책기반 사이트 투 사이트 IPsec VPN을 설정하는 방법에 대하여 서술합니다. 정책 기반 VPN 은 로컬, 원격지 서브넷 정의에 따라서 특징지을 수 있습니다. 정책 기반 VPN 타입과 달리 경로 기반 VPN은 가상 터널 인터페이스 (VTI)와 라우팅 엔트리 사용도에 따라서 특징 지을 수 있습니다. |book_25x25.png| **NOTES & REQUIREMENTS:** EdgeOS 1.9.7 이상의 펌웨어가 설치된 모든 EdgeRouter 모델에서 적용 가능합니다. 커맨드라인 인터페이스와 Cisco IOS, 상급 네트워킹에 대한 지식이 요구됩니다. 해당 주제에 대한 내용은 `관련 문서 <#related%20articles>`__ 섹션의 문서를 확인하시기 바랍니다. 이 문서에서 사용한 장비: - `EdgeRouter-X (ER-X) `__ - Cisco ISR - 피어의 테스트 클라이언트 (Host1 and Server1) Table of Contents -------------- #. `네트워크 다이어그램 <#diagram>`__ #. `Steps: 정책기반 VPN <#policy%20vpn>`__ #. `Steps: Cisco ISR VPN <#juniper%20vpn>`__ #. `Steps: 태스팅 및 검증 <#testing%20verification>`__ #. `관련 문서 <#related%20articles>`__ -------------- 네트워크 다이어그램 -------------- `맨위로 가기 <#top>`__ EdgeRouter와 Cisco ISR에서 사용하는 인터페이스와 네트워크 토폴로지 정보는 아래와 같습니다: **ER-X** #. eth0 (WAN) - 203.0.113.1 #. eth1 (LAN) - 192.168.1.1/24  **Cisco ISR** #. gi0/0 (WAN) - 192.0.2.1 #. gi0/1 (LAN) - 172.16.1.1/24 |image1| -------------- Steps: 정책기반 VPN -------------- `맨위로 가기 <#top>`__ 라우팅과 인터페이스 설정은 이미 완료했으며, 서로 통신이 가능하다고 가정합니다. IPsec과 관련있는 UDP 포트와 프로토콜은 다음과 같습니다: #. UDP 500 (IKE) #. ESP (Protocol 50) #. UDP 4500 (NAT-T) 생성할 VPN 타입은 정책 기반 VPN이며, 원격지, 로컬 서브넷을 사용하며 해당 서브넷 정보가 없으면 프록시 ID를 사용합니다. 이 값들은 정확하게 두 피어간에 일치해야하며, 서로 동일한 내용을 가지고 있어야합니다. 터널을 통해서 미리 정해진 값들만 프록시 ID에서 전송 가능합니다. ER 예제에서는 192.168.1.0/24 가 LAN에서 존재하며, UniFi에서는 172.16.1.0/24를 사용합니다. ER 환경설정을 수행하고 ISR 환경설정을 진행합니다. |CLI_circle.png| **CLI STEPS:** 커맨드라인 인터페이스에 접속합니다. GUI의 CLI 버튼을 사용하거나 PuTTY와 같은 프로그램을 사용합니다. 1. 환경설정 모드로 진입합니다. :: configure 2. 방화벽 룰 자동생성을 허용하고, NAT에서 발생한 IPsec 트래픽을 제외합니다. :: set vpn ipsec auto-firewall-nat-exclude enable 3. IKE 프로포절 (P1)과 보안 설정을 생성합니다. :: set vpn ipsec ike-group FOO0 lifetime 86400 set vpn ipsec ike-group FOO0 proposal 1 dh-group 14 set vpn ipsec ike-group FOO0 proposal 1 encryption aes256 set vpn ipsec ike-group FOO0 proposal 1 hash sha256 4. ESP 프로포절 (P2)과 보안 설정을 생성합니다. :: set vpn ipsec esp-group FOO0 lifetime 43200 set vpn ipsec esp-group FOO0 pfs disable set vpn ipsec esp-group FOO0 proposal 1 encryption aes128 set vpn ipsec esp-group FOO0 proposal 1 hash md5 |info_i_25x25.png| .. Note:: 이 예제에서 보안 설정은 VPN 성능, 지속성, 보안을 극대화하기위해 선택하였습니다. IKE 프로포절은 보안 (AES256 + SHA256)에 주안점을 두고, ESP 프로포절은 성능 (AES128 + MD5)에 주안점을 두었습니다. 보안 설정으로 어떤 설정을 선택하던지, 단계 1 (P1)와 단계 2 (P2)는 양쪽 커넥션에 동일하게 설정해야 합니다. 5. 피어 주소와 미리 공유할 키를 정의합니다. (은 원하는 패스워드로 변경합니다.) :: set vpn ipsec site-to-site peer 192.0.2.1 authentication mode pre-shared-secret set vpn ipsec site-to-site peer 192.0.2.1 authentication pre-shared-secret set vpn ipsec site-to-site peer 192.0.2.1 description IPsec 6. 사이트 투 사이트 VPN 커넥션의 로컬 소스 주소 (퍼블릭 IP)를 정의합니다. :: set vpn ipsec site-to-site peer 192.0.2.1 local-address 203.0.113.1 |info_i_25x25.png| .. Note:: 고정되지 않은 IP 주소를 WAN 커넥션에서 사용할 수도 있습니다. DHCP의 경우에는 **set ... peer 192.0.2.1** **dhcp-interface eth0** 명령어를 사용합니다. PPPoE 인터페이스와 로드밸런싱에서는 **set ... peer 192.0.2.1 local-address 0.0.0.0** 와 **local-address any** 명령어 사용을 권장합니다. 7. IKE 프로포절을 사이트 투 사이트 커넥션에 연결합니다. :: set vpn ipsec site-to-site peer 192.0.2.1 ike-group FOO0 8. 터널을 생성하여 원격지와 로컬 서브넷을 정의하고, ESP 프로포절과 연결합니다. :: set vpn ipsec site-to-site peer 192.0.2.1 tunnel 1 esp-group FOO0 set vpn ipsec site-to-site peer 192.0.2.1 tunnel 1 local prefix 192.168.1.0/24 set vpn ipsec site-to-site peer 192.0.2.1 tunnel 1 remote prefix 172.16.1.0/24 9. (선택사항) IPsec 오프로딩 기능을 활성화 하여 ESP 성능을 향상시킵니다. :: set system offload ipsec enable (this requires a reboot to become active) 10. 변경사항을 커밋합니다. :: commit 11. 환경설정을 저장합니다. :: save -------------- Steps: Cisco ISR VPN -------------- `맨위로 가기 <#top>`__ IOS의 최신 버전과 장비에 인터넷이 연결되어있음을 확인하십시오. Cisco의 사이트 투 사이트 VPN 커넥션은 다음 IPsec 문서를 기준으로 합니다. `Crypto Map Based IPsec VPN Fundamentals `__ |CLI_circle.png|  **CLI STEPS:** IOS의 커맨드라인 인터페이스에 접속합니다. 1. 설정모드로 진입합니다. :: configure terminal 2. IKE 정책(ISAKMP)을 생성하고, EdgeRouter의 보안정책과 매칭합니다. :: crypto isakmp policy 100 encr aes 256 hash sha256 authentication pre-share group 14 lifetime 86400 3. EdgeRouter의 보안정책과 맞는 IPsec 트랜스폼 셋을 생성합니다 (IPsec\_TS) :: crypto ipsec transform-set IPsec_TS esp-aes 128 esp-md5-hmac 4. 피어 주소와 미리 공유할 키 값을 정의합니다. ( 값을 원하는 값으로 정의합니다.) :: crypto isakmp key address 203.0.113.1 5. 원격, 로컬 서브넷을 정의하는 IPsec 접근 리스트 (IPsec\_ACL)를 생성합니다. :: ip access-list extended IPsec_ACL permit ip 172.16.1.0 0.0.0.255 192.168.1.0 0.0.0.255 6. 크립토 맵을 생성하고 IPsec TS와 ACL에 연결합니다. 해당 작업은 P2 동안에 수행합니다. :: crypto map IPsec_CM 100 ipsec-isakmp set peer 203.0.113.1 set transform-set IPsec_TS   match address IPsec_ACL set security-association lifetime seconds 43200 7. WAN 인터페이스에 크립토 맵을 할당합니다. :: interface gi0/0 crypto map IPsec_CM 8. (선택사항) 소스 NAT를 사용한다면, NAT의 변환된 주소에서 발생한 IPsec 트래픽을 제외하는 것을 잊지 마십시오. :: ip access-list extended SourceNAT_ACL deny   ip 172.16.1.0 0.0.0.255 192.168.1.0 0.0.0.255 permit ip 172.16.1.0 0.0.0.255 any |info_i_25x25.png| .. Note:: ACL은 소스 NAT를 위한 이름입니다. 라우트 맵과 ACL이 다를 수 있습니다. 아래는 전체 NAT 환경설정입니다: :: interface gi0/0 ip nat outside interface gi0/1 ip nat inside ip access-list extended SourceNAT_ACL deny   ip 172.16.1.0 0.0.0.255 192.168.1.0 0.0.0.255 permit ip 172.16.1.0 0.0.0.255 any ip nat inside source list SourceNAT_ACL interface gi0/0 overload 9. 스타트업 환경설정에 변경 내역을 작성합니다. :: copy running-config startup-config -------------- Steps: 테스팅 및 검증 -------------- `맨위로 가기 <#top>`__ IPsec VPN을 설정하고 난 이후에는 커넥션/상태를 다음 명령어를 통해서 검증할 수 있습니다. 1. IPsec 보안 옵션을 검증하고 ER의 상태를 확인합니다: :: show vpn ipsec sa peer-192.0.2.1-tunnel-1: #1, ESTABLISHED, IKEv1, 184447c009d51f80:14cc0f13aff401c0  local  '203.0.113.1' @ 203.0.113.1  remote '192.0.2.1' @ 192.0.2.1  AES_CBC-256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_2048  established 237s ago, reauth in 85347s  peer-192.0.2.1-tunnel-1: #1, INSTALLED, TUNNEL, ESP:AES_CBC-128/HMAC_MD5_96    installed 237 ago, rekeying in 41939s, expires in 42964s    in  cb321982,    180 bytes,     3 packets,   231s ago    out 5d4174b1,    180 bytes,     3 packets,   231s ago    local  192.168.1.0/24    remote 172.16.1.0/24  sudo ipsec statusall Status of IKE charon daemon (strongSwan 5.2.2, Linux 3.10.14-UBNT, mips):  uptime: 10 minutes, since Mar 12 09:05:48 2017  malloc: sbrk 376832, mmap 0, used 269320, free 107512  worker threads: 11 of 16 idle, 5/0/0/0 working, job queue: 0/0/0/0, scheduled: 2  Listening IP addresses:  203.0.113.1  192.168.1.1 Connections: peer-192.0.2.1-tunnel-1:  203.0.113.1...192.0.2.1  IKEv1 peer-192.0.2.1-tunnel-1:   local:  [203.0.113.1] uses pre-shared key authentication peer-192.0.2.1-tunnel-1:   remote: [192.0.2.1] uses pre-shared key authentication peer-192.0.2.1-tunnel-1:   child:  192.168.1.0/24 === 172.16.1.0/24 TUNNEL Routed Connections: peer-192.0.2.1-tunnel-1{1}:  ROUTED, TUNNEL peer-192.0.2.1-tunnel-1{1}:   192.168.1.0/24 === 172.16.1.0/24 Security Associations (1 up, 0 connecting): peer-192.0.2.1-tunnel-1[1]: ESTABLISHED 5 minutes ago, 203.0.113.1[203.0.113.1]...192.0.2.1[192.0.2.1] peer-192.0.2.1-tunnel-1[1]: IKEv1 SPIs: 184447c009d51f80_i* 14cc0f13aff401c0_r, pre-shared key reauthentication in 23 hours peer-192.0.2.1-tunnel-1[1]: IKE proposal: AES_CBC_256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_2048 peer-192.0.2.1-tunnel-1{1}:  INSTALLED, TUNNEL, ESP SPIs: cb321982_i 5d4174b1_o peer-192.0.2.1-tunnel-1{1}:  AES_CBC_128/HMAC_MD5_96, 180 bytes_i (3 pkts, 324s ago), 180 bytes_o (3 pkts, 324s ago) peer-192.0.2.1-tunnel-1{1}:   192.168.1.0/24 === 172.16.1.0/24 2. ER IPsec strongSwan 환경설정을 검증합니다: :: sudo cat /etc/ipsec.conf # generated by /opt/vyatta/sbin/vpn-config.pl config setup conn %default        keyexchange=ikev1 conn peer-192.0.2.1-tunnel-1        left=203.0.113.1        right=192.0.2.1        leftsubnet=192.168.1.0/24        rightsubnet=172.16.1.0/24        ike=aes256-sha256-modp2048!        keyexchange=ikev1        ikelifetime=86400s        esp=aes128-md5!        keylife=43200s        rekeymargin=540s        type=tunnel        compress=no        authby=secret        auto=route        keyingtries=%forever #conn peer-192.0.2.1-tunnel-1 3. ER 외부 WAN 인터페이스를 통해서 수신하는 IKE 트래픽을 캡쳐합니다: :: sudo tcpdump -i eth0 -n udp dst port 500    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes IP 203.0.113.1.500 > 192.0.2.1.500: isakmp: phase 1 I ident IP 192.0.2.1.500 > 203.0.113.1.500: isakmp: phase 1 R ident IP 203.0.113.1.500 > 192.0.2.1.500: isakmp: phase 1 I ident[E] IP 192.0.2.1.500 > 203.0.113.1.500: isakmp: phase 1 R ident[E] IP 203.0.113.1.500 > 192.0.2.1.500: isakmp: phase 2/others I oakley-quick[E] IP 192.0.2.1.500 > 203.0.113.1.500: isakmp: phase 2/others R oakley-quick[E] |info_i_25x25.png| .. Note:: 실시간 캡쳐의 결과이므로 아무런 결과가 발견되지 않는다면 클라이언트가 트래픽을 생성하지 않거나 트래픽 업스트림이 차단당한 것일수도 있습니다. 4. ER IPsec VPN 로그를 확인합니다: :: sudo swanctl --log [KNL] creating acquire job for policy 192.168.1.10/32[icmp/8] === 172.16.1.10/32[icmp/8] with reqid {1} [IKE] initiating Main Mode IKE_SA peer-192.0.2.1-tunnel-1[1] to 192.0.2.1 [ENC] generating ID_PROT request 0 [ SA V V V V ] [NET] sending packet: from 203.0.113.1[500] to 192.0.2.1[500] (160 bytes) [NET] received packet: from 192.0.2.1[500] to 203.0.113.1[500] (108 bytes) [ENC] parsed ID_PROT response 0 [ SA V ] [IKE] received NAT-T (RFC 3947) vendor ID [ENC] generating ID_PROT request 0 [ KE No NAT-D NAT-D ] [ENC] parsed ID_PROT response 0 [ KE No V V V V NAT-D NAT-D ] [ENC] generating ID_PROT request 0 [ ID HASH N(INITIAL_CONTACT) ] [ENC] parsed ID_PROT response 0 [ ID HASH ] [IKE] IKE_SA peer-192.0.2.1-tunnel-1[1] established between 203.0.113.1[203.0.113.1]...192.0.2.1[192.0.2.1] [ENC] generating QUICK_MODE request 561157166 [ HASH SA No ID ID ] [ENC] parsed QUICK_MODE response 561157166 [ HASH SA No ID ID N((24576)) ] [IKE] CHILD_SA peer-192.0.2.1-tunnel-1{1} established with SPIs cb321982_i 5d4174b1_o and TS 192.168.1.0/24 === 172.16.1.0/24 |info_i_25x25.png| .. Note:: 실시간 캡쳐 결과이므로 출력이 보이지 않는다면, 트래픽이 방화벽을 통해서 허용되었는지 확인하십시오. 다른 방법으로는 \ **show vpn log \| no-more**\ 명령어를 통해서 전체 IPsec 로그 히스토리를 확인할 수 있습니다. 5. IPsec 보안 설정을 확인하고 ISR의 통계치를 확인합니다: :: show crypto isakmp sa IPv4 Crypto ISAKMP SA dst             src             state          conn-id status 192.0.2.1       203.0.113.1     QM_IDLE           1002 ACTIVE show crypto isakmp sa detail IPv4 Crypto ISAKMP SA C-id  Local           Remote          I-VRF  Status Encr Hash   Auth DH Lifetime Cap. 1002  192.0.2.1       203.0.113.1            ACTIVE aes  sha256 psk  14 23:58:38   show crypto engine connections active Crypto Engine Connections   ID  Type    Algorithm           Encrypt  Decrypt LastSeqN IP-Address 5  IPsec   AES+MD5                   0        3        3 192.0.2.1   6  IPsec   AES+MD5                   3        0        0 192.0.2.1 1002  IKE     SHA256+AES256             0        0        0 192.0.2.1 show crypto ipsec sa interface: GigabitEthernet0/0    Crypto map tag: IPsec_CM, local addr 192.0.2.1   protected vrf: (none)   local  ident (addr/mask/prot/port): (172.16.1.0/255.255.255.0/0/0)   remote ident (addr/mask/prot/port): (192.168.1.0/255.255.255.0/0/0)   current_peer 203.0.113.1 port 500     PERMIT, flags={origin_is_acl,}    #pkts encaps: 3, #pkts encrypt: 3, #pkts digest: 3    #pkts decaps: 3, #pkts decrypt: 3, #pkts verify: 3    #pkts compressed: 0, #pkts decompressed: 0    #pkts not compressed: 0, #pkts compr. failed: 0    #pkts not decompressed: 0, #pkts decompress failed: 0    #send errors 0, #recv errors 0     local crypto endpt.: 192.0.2.1, remote crypto endpt.: 203.0.113.1     path mtu 1500, ip mtu 1500, ip mtu idb GigabitEthernet0/0     current outbound spi: 0xCB321982(3409058178)     PFS (Y/N): N, DH group: none     inbound esp sas:      spi: 0x5D4174B1(1564570801)        transform: esp-aes esp-md5-hmac ,        in use settings ={Tunnel, }        conn id: 1, flow_id: SW:1, sibling_flags 80000040, crypto map: IPsec_CM        sa timing: remaining key lifetime (k/sec): (4274119/42738)        IV size: 16 bytes        replay detection support: Y        Status: ACTIVE(ACTIVE)     inbound ah sas:     inbound pcp sas:     outbound esp sas:      spi: 0xCB321982(3409058178)        transform: esp-aes esp-md5-hmac ,        in use settings ={Tunnel, }        conn id: 2, flow_id: SW:2, sibling_flags 80000040, crypto map: IPsec_CM        sa timing: remaining key lifetime (k/sec): (4274119/42738)        IV size: 16 bytes        replay detection support: Y        Status: ACTIVE(ACTIVE) show crypto map interface GigabitEthernet0/0 Crypto Map IPv4 "IPsec_CM" 100 ipsec-isakmp        Peer = 203.0.113.1        Extended IP access list IPsec_CM            access-list IPsec_ACL permit ip 172.16.1.0 0.0.0.255 192.168.1.0 0.0.0.255        Current peer: 203.0.113.1        Security association lifetime: 4608000 kilobytes/43200 seconds        Responder-Only (Y/N): N        PFS (Y/N): N        Transform sets={                IPsec_TS:  { esp-aes esp-md5-hmac  } ,        }        Interfaces using crypto map IPsec:                GigabitEthernet0/0 6. ISR의 P1 negotiation을 콘솔에서 디버깅합니다: :: debug crypto isakmp ISAKMP (0): received packet from 203.0.113.1 dport 500 sport 500 Global (N) NEW SA ISAKMP: Created a peer struct for 203.0.113.1, peer port 500 ISAKMP: local port 500, remote port 500 ISAKMP:(0):atts are acceptable. Next payload is 0 ISAKMP:(0): sending packet to 203.0.113.1 my_port 500 peer_port 500 (R) MM_SA_SETUP ISAKMP (0): received packet from 203.0.113.1 dport 500 sport 500 Global (R) MM_SA_SETUP ISAKMP:(1001): sending packet to 203.0.113.1 my_port 500 peer_port 500 (R) MM_KEY_EXCH ISAKMP (1001): received packet from 203.0.113.1 dport 500 sport 500 Global (R) MM_KEY_EXCH ISAKMP:(1001):SA authentication status: authenticated ISAKMP:(1001):SA has been authenticated with 203.0.113.1 ISAKMP:(1001):Input = IKE_MESG_INTERNAL, IKE_PHASE1_COMPLETE ISAKMP:(1001): processing ID payload. message ID = 561157166 ISAKMP:(1001):Node 561157166, Input = IKE_MESG_FROM_PEER, IKE_QM_EXCH ISAKMP:(1001):Node 561157166, Input = IKE_MESG_INTERNAL, IKE_GOT_SPI ISAKMP:(1001):Node 561157166, Input = IKE_MESG_FROM_IPSEC, IPSEC_INSTALL_DONE ISAKMP (1001): received packet from 203.0.113.1 dport 500 sport 500 Global (R) QM_IDLE       ISAKMP:(1001):Node 561157166, Input = IKE_MESG_FROM_PEER, IKE_QM_EXCH 7. Server1 과 Host1사이에 터널을 통해 트래픽을 전송해봅니다: :: ping 192.168.1.10 PING 192.168.1.10 (192.168.1.10) 56(84) bytes of data. 64 bytes from 192.168.1.10: icmp_seq=1 ttl=63 time=45.9 ms 64 bytes from 192.168.1.10: icmp_seq=2 ttl=63 time=45.2 ms 64 bytes from 192.168.1.10: icmp_seq=3 ttl=63 time=45.5 ms ping 172.16.1.10 PING 172.16.1.10 (172.16.1.10) 56(84) bytes of data. 64 bytes from 172.16.1.10: icmp_seq=1 ttl=63 time=43.9 ms 64 bytes from 172.16.1.10: icmp_seq=2 ttl=63 time=44.1 ms 64 bytes from 172.16.1.10: icmp_seq=3 ttl=63 time=44.4 -------------- 관련 문서 -------------- `맨위로 가기 <#top>`__ - `EdgeRouter - EdgeRouter와 Cisco ISR 사이의 IPsec 경로 기반 (VTI) 사이트 투 사이트 VPN `__ - `EdgeRouter - EdgeRouter와 Cisco ASA 사이의 IPsec 정책 기반 (VTI) 사이트 투 사이트 VPN `__ - `EdgeRouter - EdgeRouter와 Cisco ASA 사이의 IPsec 경로 기반 (VTI) 사이트 투 사이트 VPN `__ - `EdgeRouter - 하드웨어 오프로딩 `__ - `네트워킹 개론 - SSH로 연결을 생성하는 방법 `__ .. |book_25x25.png| image:: /hc/article_attachments/115018511588/book_25x25.png .. |image1| image:: /hc/article_attachments/115018419427/mceclip1.png .. |CLI_circle.png| image:: /hc/article_attachments/115018511528/CLI_circle.png .. |info_i_25x25.png| image:: /hc/article_attachments/115018511548/info_i_25x25.png