EdgeRouter - EdgeRouter와 USG의 사이트 투 사이트 정책 기반 IPsec VPN

download at 2017-09-07T17:50:01Z origin

 Overview


이 문서는 EdgeRouter와 UniFi 보안 게이트 웨이 (USG) 사이에서의 정책 기반 사이트 투 사이트 IPsec VPN 을 구성하는 방법에 대하여 서술합니다.

정책 기반 VPN 은 로컬, 원격지 서브넷 정의에 따라서 특징지을 수 있습니다. 정책 기반 VPN 타입과 달리 경로 기반 VPN은 가상 터널 인터페이스 (VTI)와 라우팅 엔트리 사용도에 따라서 특징 지을 수 있습니다.

book_25x25.png NOTES & REQUIREMENTS: EdgeOS 1.9.7 이상의 펌웨어가 설치된 모든 EdgeRouter 모델에서 적용 가능합니다. 커맨드라인 인터페이스와 UniFi 컨트롤러, 기본 네트워킹에 대한 지식이 요구됩니다. 해당 주제에 대한 내용은 관련 문서 섹션의 문서를 확인하시기 바랍니다.

이 문서에서 사용한 장비:

UniFi 보안 게이트웨이 (USG)

  • 피어의 테스트 클라이언트 (Host1 and Server1)

Table of Contents


  1. 네트워크 다이어그램
  2. Steps: 정책기반 VPN
  3. Steps: USG VPN
  4. Steps: 테스트 및 검증
  5. 관련 문서

네트워크 다이어그램


맨위로 가기

네트워크 토폴로지는 아래와 같으며, EdgeRouter와 USG에서 사용한 인터페이스는 다음과 같습니다:

ER-X

  1. eth0 (WAN) - 203.0.113.1
  2. eth1 (LAN) - 192.168.1.1/24

USG

  1. eth0 (WAN) - 192.0.2.1
  2. eth1 (LAN) - 172.16.1.1/24

image1


Steps: 정책 기반 VPN


맨위로 가기

라우팅과 인터페이스 설정은 이미 완료했으며, 서로 통신이 가능하다고 가정합니다.

IPsec과 관련있는 UDP 포트와 프로토콜은 다음과 같습니다:

  1. UDP 500 (IKE)
  2. ESP (프로토콜 50)
  3. UDP 4500 (NAT-T)

생성할 VPN 타입은 정책 기반 VPN이며, 원격지, 로컬 서브넷을 사용하며 해당 서브넷 정보가 없으면 프록시 ID를 사용합니다. 이 값들은 정확하게 두 피어간에 일치해야하며, 서로 동일한 내용을 가지고 있어야합니다. 터널을 통해서 미리 정해진 값들만 프록시 ID에서 전송 가능합니다. ER 예제에서는 192.168.1.0/24 가 LAN에서 존재하며, UniFi에서는 172.16.1.0/24를 사용합니다.

ER 환경설정을 수행하고 USG 환경설정을 진행합니다.

www.png  GUI STEPS: 라우터의 웹 관리 포탈(GUI)로 접속합니다.

1. IPsec 피어와 ER 보안 설정을 정의합니다. (<secret>을 원하는 비밀번호로 변경합니다.)

VPN > IPsec Site-to-Site > +Add Peer

  • 고급 옵션 확인하기
  • NAT에서 방화벽을 자동으로 열고, 제외하기
Peer: 192.0.2.1
Description: IPsec
Local IP: 203.0.113.1
Encryption: AES-256
Hash: SHA1
DH Group: 14
Pre-shared Secret: <secret>
Local subnet: 192.168.1.0/24
Remote subnet: 172.16.1.0/24

info_i_25x25.png

Note

WAN 연결에 고정 IP 주소가 아닌 값도 사용 가능합니다. DHCP에 경우 CLI로 진행하십시오. PPPoE 인터페이스와 로드밸런싱은 0.0.0.0으로 로컬 IP를 설정하는 것을 권장합니다.

image4

CLI_circle.png CLI STEPS (DHCP): 커맨드라인 인터페이스에 접속합니다. GUI의 CLI 버튼을 사용하거나 PuTTY와 같은 프로그램을 사용합니다.

  1. 환경설정 모드로 진입합니다.
configure
  1. IPsec VPN 피어 환경설정을 확인합니다. (관련된 결과만 아래에 표시하였습니다.)
show vpn
ipsec {
   site-to-site {
       peer 192.0.2.1 {
           local-address 203.0.113.1
           }
...
  1. (선택사항) 로컬 IPsec 피어 주소를 제거합니다.
delete vpn ipsec site-to-site peer 192.0.2.1 local-address
  1. (선택사항) WAN 인터페이스 로컬 IPsec DHCP 피어 주소를 정의합니다.
set vpn ipsec site-to-site peer 192.0.2.1 dhcp-interface eth0
  1. (선택사항) IPsec 오프로딩 기능을 활성화하여 ESP 성능을 향상합니다.
set system offload ipsec enable (this requires a reboot to become active)
  1. 변경사항을 커밋합니다.
commit
  1. 환경설정을 저장합니다.
save

Steps: USG VPN


맨위로 가기

가장 최신 버전의 UniFi를 사용하고, 장치가 인터넷에 접근 가능하도록 확인하십시오.

www.png  GUI STEPS: UniFi 컨트롤러 웹 관리 포털에 접속합니다.

  1. Devices 섹션에서 USG에 퍼블릭 IP 주소를 부여합니다. Properties 패널을 확장하여 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

  1. 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에서 사용할 새로운 네트워크를 생성합니다. (<secret>을 원하는 패스워드로 변경합니다.)

  • 고급 옵션 확인
  • 다이나믹 라우팅 해제
  • 완벽 포워딩 비밀유지(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: <secret>
IPsec Profile: Customized

Advanced Options
Key Exchange Version: IKEv1
Encryption: AES-256
HASH: SHA1
DH Group: 14
PFS: Enable Perfect Forward Secrecy
Dynamic Routing: Disabled (uncheck)

image8


Steps: 테스트 및 검증


맨위로 가기

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. 외부 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 로그 히스토리를 확인할 수 있습니다.

  1. 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

관련 문서


맨위로 가기