EdgeRouter - EdgeRouter와 USG 사이에서 IPsec 경로기반 (VTI) 사이트 투 사이트 VPN 구성하기 ============================================================== download at 2017-08-30T17:43:02Z `origin `_  Overview -------------- 이 문서는 EdgeRouter와 고정 라우팅을 사용한 `UniFi 보안 게이트웨이 (USG) `__ 를 사용하여 경로 기반 사이트 투 사이트 IPsec VPN을 구성하는 방법에 대하여 서술합니다. 경로 기반 VPN은 가상 터널 인터페이스와 라우팅 엔트리의 사용에 따라 특징 지을 수 있습니다. 이에 반해 정책 기반 VPN은 로컬, 원격지 서브넷의 정의에 따라서 타입이 달라지게 됩니다. 이 문서에서는 고정 라우팅을 사용하지만, 터널에 OSPF를 사용하는 등의 동적 라우팅 프로토콜도 사용이 가능합니다. |book_25x25.png| **NOTES & REQUIREMENTS:** EdgeOS 1.9.7 이상의 펌웨어가 설치된 모든 EdgeRouter 모델에서 적용 가능합니다. 커맨드라인 인터페이스와 UniFi 컨트롤러, 기본 네트워킹에 대한 지식이 요구됩니다. 해당 주제에 대한 내용은 `관련 문서 <#related%20articles>`__ 섹션의 문서를 확인하시기 바랍니다. 이 문서에서 사용한 장비: - `EdgeRouter-X (ER-X) `__ - `UniFi 보안 게이트웨이 (USG) `__ - 피어의 테스트 클라이언트 (Host1 and Server1) Table of Contents -------------- #. `네트워크 다이어그램 <#diagram>`__ #. `Steps: 경로 기반 VPN <#policy%20vpn>`__ #. `Steps: USG VPN <#juniper%20vpn>`__ #. `Steps: 테스팅 및 검증 <#testing%20verification>`__ #. `관련 문서 <#related%20articles>`__ -------------- 네트워크 다이어그램 -------------- `맨위로 가기 <#top>`__ 네트워크 토폴로지는 아래와 같으며, EdgeRouter와 USG에서 사용한 인터페이스는 다음과 같습니다: **ER-X** #. eth0 (WAN) - 203.0.113.1 #. eth1 (LAN) - 192.168.1.1/24 #. vti0 -   **USG** #. gi0/0 (WAN) - 192.0.2.1 #. gi0/1 (LAN) - 172.16.1.1/24 #. vti64 - |image1.png| -------------- Steps: 경로 기반 VPN -------------- `맨위로 가기 <#top>`__ 라우팅과 인터페이스 설정은 이미 완료했으며, 서로 통신이 가능하다고 가정합니다. IPsec과 관련있는 UDP 포트와 프로토콜은 다음과 같습니다: #. UDP 500 (IKE) #. ESP (프로토콜 50) #. UDP 4500 (NAT-T) VPN 타입은 IPsec 터널의 고정 VTI(IPIP 캡슐화)로 명명합니다. 패킷이 VTI 인터페이스 (vti0)를 통해서 라우팅 되고, IPsec에 의하여 암호화 됨을 의미합니다. 고정 갸ㅕㅇ로는 사이트 사이에서 라우팅 기능을 가속하기 위해 사용합니다. ER 환경설정을 수행하고 USG VPN 환경설정을 진행합니다. |www.png|  **GUI STEPS:** 라우터의 웹 관리 포탈(GUI)로 접속합니다. 1. IPsec 피어와 ER 보안 설정을 정의합니다. (을 원하는 비밀번호로 변경합니다.) **VPN > IPsec Site-to-Site > +Add Peer** - 고급 옵션 보기 - NAT에서 방화벽을 자동으로 열고, 제외하기 :: Peer: 192.0.2.1 Description: IPsec Local IP: 203.0.113.1 (needs to be the local public IP address, not any) Encryption: AES-256 Hash: SHA1 DH Group: 14 Pre-shared Secret: Local subnet: 192.168.1.0/24 (does not matter because it will be removed later) Remote subnet: 172.16.1.0/24 (does not matter because it will be removed later) |info_i_25x25.png| .. Note:: 경로 기반 VTI 구성은 현제 동적 피어 주소와 동적 DNS를 사용한 전체 주소 도메인 네임 (FQDN)을 지원하지 않습니다. VTI 종단은 이미 알고 있는 IP로의 연결이 필요합니다. \ **local-address any**\ , \ **peer 0.0.0.0**\ 와 같은 주소는 동작하지 않습니다. |image4| |CLI_circle.png| **CLI STEPS:** 커맨드라인 인터페이스에 접속합니다. GUI의 CLI 버튼을 사용하거나 PuTTY와 같은 프로그램을 사용합니다.   1. 환경설정 모드로 진입합니다. :: configure 2. IPsec VPN 피어 환경설정을 확인합니다. (관련된 결과만 아래에 표시하였습니다.) :: show vpn ipsec {    site-to-site {        peer 192.0.2.1 {            local-address 203.0.113.1            tunnel 1 {                esp-group FOO0                local {                    prefix 192.168.1.0/24                }                remote {                    prefix 172.16.0.0/22                }            } ... 3. IPsec 터널을 제거합니다. :: delete vpn ipsec site-to-site peer 192.0.2.1 tunnel 1 4. VPN이 사용할 VTI를 생성합니다. (이 인터페이스는 IP 주소를 정의할 필요가 없습니다.) :: set interfaces vti vti0 |info_i_25x25.png| .. Note:: GRE 터널과 달리, VTI 인터페이스는 24 바이트의 추가 IPsec 오버헤드가 존재하지 않습니다. MTU는 자동으로 IPsec 오버헤드 만큼 낮추게 됩니다. 이 MTU 값을 \ **set interfaces vti vti0 mtu **\ 명령어를 사용하여 조정 할 수 있습니다. 5. VTI로 향할 원격 서브넷 라우팅 엔트리를 생성합니다. :: set protocols static interface-route 172.16.1.0/24 next-hop-interface vti0 6. 이전에 생성한 VTI 인터페이스와 IPsec 피어 설정을 연결합니다. :: set vpn ipsec site-to-site peer 192.0.2.1 vti bind vti0 set vpn ipsec site-to-site peer 192.0.2.1 vti esp-group FOO0 7. (선택사항) IPsec 오프로딩 기능을 활성화하여 ESP 성능을 향상합니다. :: set system offload ipsec enable (this requires a reboot to become active) 8. 변경사항을 커밋합니다. :: commit 9. 환경설정을 저장합니다. :: save -------------- Steps: USG VPN -------------- `맨위로 가기 <#top>`__ 가장 최신 버전의 UniFi를 사용하고, 장치가 인터넷에 접근 가능하도록 확인하십시오. |www.png|  **GUI STEPS:** UniFi 컨트롤러 웹 관리 포털에 접속합니다. 1. USG에 퍼블릭 IP를 부여합니다. :: Devices > USG > Configuration > WAN Connection Type: Static IP IP address: 192.0.2.1 Preferred DNS: 192.0.2.2 Subnet Mask: 255.255.255.252 Router: 192.0.2.2 |image6| 2. LAN 네트워크를 수정하거나 기본 설정대로 진행합니다. (시나리오에 따라서 다릅니다.) :: Settings > Networks > LAN > edit Name: LAN Purpose: Corporate Parent Interface: LAN Gateway/Subnet: 172.16.1.1/24 DHCP Server: Enable DHCP Range: 172.16.1.10 - 172.16.1.150 |image7| 3. IPsec에서 사용할 새로운 네트워크를 생성합니다. (을 원하는 패스워드로 변경합니다.) - 고급 옵션 보기 - Dynamic Routing 체크하기 - Perfect Forward Secrecy (PFS) 체크하기 :: Settings > Networks > + Create New Network Name: IPsec Purpose: Site-to-Site VPN VPN Type: IPsec VPN Enabled: Enable this Site-to-Site VPN Remote Subnets: 192.168.1.0/24 Peer IP: 203.0.113.1 Local WAN IP: 192.0.2.1 Pre-Shared Key: IPsec Profile: Customized Advanced Options Key Exchange Version: IKEv1 Encryption: AES-256 HASH: SHA1 DH Group: 14 PFS: Enable Perfect Forward Secrecy Dynamic Routing: Enabled (check) |image8| -------------- 테스팅 및 검증 -------------- `맨위로 가기 <#top>`__ IPsec VPN을 설정하고, 커넥션/상태를 다음 명령어를 통해서 검증합니다. 1. IPsec 보안 설정과 ER 상태를 검증합니다: :: show vpn ipsec sa peer-192.0.2.1-tunnel-vti: #4, ESTABLISHED, IKEv1, 24d45792c4976ca4:f4b8de413b632a7c  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 13s ago, reauth in 85578s  peer-192.0.2.1-tunnel-vti: #1, INSTALLED, TUNNEL, ESP:AES_CBC-128/HMAC_MD5_96    installed 13 ago, rekeying in 42249s, expires in 43187s    in  cf09bc59,    500 bytes,     5 packets,     5s ago    out 769b07da,    500 bytes,     5 packets,     5s ago    local  0.0.0.0/0    remote 0.0.0.0/0 sudo ipsec statusall Status of IKE charon daemon (strongSwan 5.2.2, Linux 3.10.14-UBNT, mips):  uptime: 22 minutes, since Mar 12 09:34:36 2017  malloc: sbrk 376832, mmap 0, used 272632, free 104200  worker threads: 11 of 16 idle, 5/0/0/0 working, job queue: 0/0/0/0, scheduled: 8 Listening IP addresses:  203.0.113.1  192.168.1.1  10.255.12.1 Connections: peer-192.0.2.1-tunnel-vti:  203.0.113.1...192.0.2.1  IKEv1 peer-192.0.2.1-tunnel-vti:   local:  [203.0.113.1] uses pre-shared key authentication peer-192.0.2.1-tunnel-vti:   remote: [192.0.2.1] uses pre-shared key authentication peer-192.0.2.1-tunnel-vti:   child:  0.0.0.0/0 === 0.0.0.0/0 TUNNEL Routed Connections: peer-192.0.2.1-tunnel-vti{1}:  ROUTED, TUNNEL peer-192.0.2.1-tunnel-vti{1}:   0.0.0.0/0 === 0.0.0.0/0 Security Associations (1 up, 0 connecting): peer-192.0.2.1-tunnel-vti[4]: ESTABLISHED 74 seconds ago, 203.0.113.1[203.0.113.1]...192.0.2.1[192.0.2.1] peer-192.0.2.1-tunnel-vti[4]: IKEv1 SPIs: 24d45792c4976ca4_i f4b8de413b632a7c_r*, pre-shared key reauthentication in 23 hours peer-192.0.2.1-tunnel-vti[4]: IKE proposal: AES_CBC_256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_2048 peer-192.0.2.1-tunnel-vti{1}:  INSTALLED, TUNNEL, ESP SPIs: cf09bc59_i 769b07da_o peer-192.0.2.1-tunnel-vti{1}:  AES_CBC_128/HMAC_MD5_96, 500 bytes_i (5 pkts, 66s ago), 500 bytes_o (5 pkts, 66s ago) peer-192.0.2.1-tunnel-vti{1}:   0.0.0.0/0 === 0.0.0.0/0 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-vti        left=203.0.113.1        right=192.0.2.1        leftsubnet=0.0.0.0/0        rightsubnet=0.0.0.0/0        ike=aes256-sha256-modp2048!        keyexchange=ikev1        ikelifetime=86400s        esp=aes128-md5!        keylife=43200s        rekeymargin=540s        type=tunnel        compress=no        authby=secret        mark=9437185        auto=route        keyingtries=%forever #conn peer-192.0.2.1-tunnel-vti 3. 외부 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 [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-vti{1} established with SPIs cad56e88_i 86968a35_o and TS 0.0.0.0/0 === 0.0.0.0/0 |info_i_25x25.png| .. Note:: 실시간 캡쳐 결과이므로 출력이 보이지 않는다면, 트래픽이 방화벽을 통해서 허용되었는지 확인하십시오. 다른 방법으로는 \ **show vpn log \| no-more**\ 명령어를 통해서 전체 IPsec 로그 히스토리를 확인할 수 있습니다. 5. 터널을 통해서 전송된 트래픽을 캡쳐해보고, 터널의 ER 상태를 확인합니다: :: show interfaces vti vti0 vti0: mtu 1400 qdisc noqueue state UNKNOWN group default    link/ipip 203.0.113.1 peer 192.0.2.1    inet 10.255.12.1/30 scope global vti0       valid_lft forever preferred_lft forever    RX:  bytes    packets     errors    dropped    overrun      mcast          1600         19          0          0          0          0    TX:  bytes    packets     errors    dropped    carrier collisions          1332         14          0          0          0          0 show interfaces vti vti0 capture IP 172.16.1.10 > 192.168.1.10: ICMP echo request, id 12993, seq 18, length 64 IP 192.168.1.10 > 172.16.1.10: ICMP echo reply, id 12993, seq 18, length 64 IP 172.16.1.10 > 192.168.1.10: ICMP echo request, id 12993, seq 19, length 64 IP 192.168.1.10 > 172.16.1.10: ICMP echo reply, id 12993, seq 19, length 64 6. 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 ms -------------- 관련 문서 -------------- `맨위로 가기 <#top>`__ - `EdgeRouter - EdgeRouter와 USG 사이의 IPsec 정책기반 사이트 투 사이트 VPN 구성하기 `__ - `EdgeRouter - IPsec 경로기반 (VTI) 사이트 투 사이트 VPN `__ - `EdgeRouter - 하드웨어 오프로딩 `__ - `네트워킹 개론 - SSH로 연결을 맺는 방법 `__ .. |book_25x25.png| image:: /hc/article_attachments/115018511588/book_25x25.png .. |image1.png| image:: /hc/article_attachments/115018779648/image1.png .. |www.png| image:: /hc/article_attachments/115018779668/www.png .. |info_i_25x25.png| image:: /hc/article_attachments/115018688307/info_i_25x25.png .. |image4| image:: /hc/article_attachments/115019851528/mceclip2.png .. |CLI_circle.png| image:: /hc/article_attachments/115018688367/CLI_circle.png .. |image6| image:: /hc/article_attachments/115018577728/mceclip2.png .. |image7| image:: /hc/article_attachments/115018578148/mceclip6.png .. |image8| image:: /hc/article_attachments/115018815448/mceclip0.png