EdgeRouter - IPsec 경로기반 (VTI) 사이트 투 사이트 VPN

download at 2017-09-28T17:30:42Z origin

 Overview


이 문서에서는 경로 기반 사이트 투 사이트 IPsec VPN을 두 EdgeRouters 사이에서 구성하는 방법에 대하여 서술합니다.

경로 기반 VPN은 가상 터널 인터페이스와 라우팅 엔트리의 사용에 따라서 특징지을 수 있습니다. 경로 기반 VPN과 달리 정책 기반 VPN은 로컬, 원격 서브넷 정의에 따라서 달라기재 됩니다. 이 문서의 예제는 고정 라우팅에 집중하며, OPSF를 터널에 사용하여 동적 라우팅 프로토콜을 사용할 수도 있습니다. EdgeRouter - IPsec Policy-Based Site-to-Site VPN 문서를 참조하여 정책 기반 VPN을 구성하는 방법에 대하여 확인하십시오.

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

이 문서에서 사용한 장비:

Table of Contents


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

네트워크 다이어그램


맨위로 가기

ER-Left

  1. eth0 (WAN) - 203.0.113.1
  2. eth1 (LAN) - 192.168.1.1/24
  3. vti0 - 10.255.12.1/30

ER-Right

  1. eth0 (WAN) - 192.0.2.1
  2. eth1 (LAN) - 172.16.1.1/24
  3. vti0 - 10.255.12.2/30

image1


Steps: 경로 기반 VPN


맨위로 가기

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

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

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

생성하는 VPN 타입은 IPsec 터널의 고정 VTI (IPIP 캡슐화)으로 명명합니다. VTI 인터페이스 (vti0)을 통해 패킷은 라우팅 되며, 이후에 IPsec을 사용하여 암호화 하는 것을 의미합니다. GRE (제네릭 라우팅 캡슐화) 터널 (tun0)을 사용하는 것 (IPsec에서 GRE를 활용하는 방식)과 다른 방식입니다.

환경설정은 주로 ER-Left에 대하여 서술합니다. ER-Right 환경설정은 서브넷과 피어링 주소를 제외하고는 모두 동일합니다. ER-RIght 환경설정이 다른 곳은 아래의 결과에 포함하였습니다.

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

  1. ER의 IPsec 피어와 보안 설정(SAs)을 정의합니다. (<secret>을 원하는 패스워드로 변겅합니다.)

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: <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 (DynDNS)를 사용한 전체 주소 도메인 네임을 지원하지 않습니다. VTI 종단에서 알려진 IP 주소로 연결하는 것이 필요하며, local-address any혹은 peer 0.0.0.0 은 정상 동작하지 않습니다.

image4

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

  1. 환경설정 모드로 진입합니다.
configure
  1. VPN이 사용할 VTI를 생성하고 IP 주소를 부여합니다.
set interfaces vti vti0 address 10.255.12.1/30

info_i_25x25.png

Note

RFC1918 IP 주소를 터널 인터페이스에 사용하는 것을 권장합니다. IP 주소는 라우팅 테이블이나 라우터에서 존재하면 안됩니다.

  1. IPsec 피어 환경설정을 확인합니다. (관련 정보만 출력합니다.)
show vpn
ipsec {
   site-to-site {
       peer 192.0.2.1 {
           tunnel 1 {
               esp-group FOO0
               local {
                   prefix 192.168.1.0/24
               }
               remote {
                   prefix 172.16.1.0/24
               }
           }
...
  1. IPsec 터널을 제거합니다.
delete vpn ipsec site-to-site peer 192.0.2.1 tunnel 1
  1. 생성한 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
  1. VTI로 향하는 원격 서브넷 고정 라우팅 엔트리를 생성합니다.
set protocols static interface-route 172.16.1.0/24 next-hop-interface vti0
  1. (선택사항) 고정 라우팅 엔트리를 생성하는 대신에 OSPF와 같은 동적 라우팅 프로토콜을 사용합니다.
set interfaces vti vti0 ip ospf network point-to-point

set protocols ospf passive-interface default
set protocols ospf passive-interface-exclude vti0
set protocols ospf parameters router-id 10.255.12.1
set protocols ospf area 0.0.0.0 network 10.255.12.0/30
set protocols ospf area 0.0.0.0 network 192.168.1.0/24
  1. (선택사항) VTI 인터페이스의 MTU 세팅 값을 낮춥니다.
set interfaces vti vti0 mtu 1400

info_i_25x25.png

Note

GRE 터널과 달리 VTI 인터페이스는 24 바이트의 오버헤드를 요구하지 않습니다. MTU 값은 IPsec 오버헤드에 따라서 자동적으로 낮아질 수 있습니다. 몇 경우에서는 커넥션 (HTTPS 와 SSH)이 실패할 수도 있습니다. 이 경우에는 터널의 MTU 값을 낮추어서 조정할 수 있습니다. 1400은 단편화를 예방하는 좋은 기준점입니다. 상황에 따라서 MTU 값을 조정해야합니다.

  1. (선택사항) IPsec 오프로딩을 활성화하여 ESP 성능을 향상시킵니다.
set system offload ipsec enable (this requires a reboot to become active)
  1. 변경내역을 커밋합니다.
commit
  1. 환경설정을 저장합니다.
save

테스팅 및 검증


맨위로 가기

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

  1. 터널의 ER 상태를 검증하고 터널을 통해 전송하는 트래픽을 캡쳐합니다:
show interfaces vti vti0
vti0: <POINTOPOINT,NOARP,UP,LOWER_UP> 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
  1. Server1 과 Host1사이에 터널을 통해 트래픽을 전송해봅니다:
sudo traceroute -n 192.168.1.10
traceroute to 192.168.1.10 (192.168.1.10), 30 hops max, 60 byte packets
1  172.16.1.1 (172.16.1.1)  1.846 ms  1.824 ms  1.812 ms
2  10.255.12.1 (10.255.12.1)  49.158 ms  53.873 ms  55.646 ms
3  192.168.1.10 (192.168.1.10)  57.799 ms *  59.623 ms

sudo traceroute -n 172.16.1.10
traceroute to 172.16.1.10 (172.16.1.10), 30 hops max, 60 byte packets
1  192.168.1.1 (192.168.1.1)  1.726 ms  1.734 ms  1.712 ms
2  10.255.12.2 (10.255.12.2)  46.268 ms  48.562 ms  49.542 ms
3  172.16.1.10 (172.16.1.10)  56.236 ms *  55.567 ms

관련 문서


맨위로 가기