EdgeRouter - EdgeRouter와 Azure 사이의 경로 기반 사이트 투 사이트 VPN (BGP over IKEv2/IPsec)

download at 2017-10-07T22:00:15Z origin

 Overview


이 문서는 Azure VPN 게이트웨이와 EdgeRouter 사이에서 고정 라우틱을 사용하여 경로 기반 사이트 투 사이트 IPsec VPN을 구성하는 방법에 대하여 서술합니다.

경로 기반 VPN은 가상 터널 인터페이스(VTI)의 사용과 Azure에 연결할 때 IKEv2를 사용하는지 여부에 따라서 특징지을 수 있습니다. 경로 기반 VPN의 타입과 달리 정책 기반 VPN은 Policy-Based VPN 에서 확인한 것과 같이 로컬, 원격 서브넷의 정의에 따라 달라집니다. 다른 방법에 대한 내용은 Azure Policy-Based (IKEv1/IPsec) 와 Azure Route-Based (BGP over IKEv2/IPsec) 문서를 참조하십시오.

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

이 문서에서 사용한 장비:

  • EdgeRouter-X (ER-X)
  • Azure VPN 게이트웨이
  • 피어의 테스트 클라이언트 (Host1 and Server1)

추가 Azure 요구사항:

  • EdgeRouter의 퍼블릭 IP (NAT 구성을 받지 않아야 합니다)
  • 활성화된 Azure 구독 정보

더 많은 Azure VPN과 요구사항은 About VPN Devices 문서를 참조하세요.


Table of Contents


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

네트워크 다이어그램


맨위로 가기

네트워크 토폴로지는 아래와 같습니다. EdgeRouter (ER)와 Azure VPN 게이트웨이 (GW)의 인터페이스와 IP 주소는 다음과 같습니다:

ER-X

  • eth0 (WAN) - 203.0.113.1
  • eth1 (LAN) - 192.168.1.1/24
  • vti0 -

Azure GW

  • Virtual Gateway - 192.0.2.1
  • Virtual Network - 172.16.0.0/22
  • Default Subnet - 172.16.1.0/24

image1


Steps - 경로 기반 VPN


맨위로 가기

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

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

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

생성하는 VPN 타입은 IPsec 터널의 고정 VTI (IPIP 캡슐화)으로 명명합니다. VTI 인터페이스 (vti0)을 통해 패킷은 라우팅 되며, 이후에 IPsec을 사용하여 암호화 하는 것을 의미합니다. 고정 경로 라우팅은 사이트간 라우팅을 활성화하기 위해 사용합니다.

처음에는 ER의 환경설정에 대하여 설명하고 이후에는 Azure의 게이트웨이에 대하여 설정합니다. Azure IPsec 피어 IP 주소는 Dashboard > All Resources > Public IP address에서 찾아 볼 수 있습니다.

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

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

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

  • 고급 옵션 확인
  • 자동 방화벽 개방과 NAT부터 얻는 트래픽을 제외
Peer: 192.0.2.1 (needs to be the Azure public IP address, not 0.0.0.0)
Description: IPsecAzure
Local IP: 203.0.113.1 (needs to be the local public IP address, not any)
Encryption: AES-256
Hash: SHA1
DH Group: 2
Pre-shared Secret: <secret>
Local subnet: 192.168.1.0/24 (does not matter because it will be removed later)
Remote subnet: 172.16.0.0/22 (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 피어 환경설정을 확인합니다. (관련 정보만 아래에 출력됩니다.)
show vpn
ipsec {
   esp-group FOO0 {
       proposal 1 {
           encryption aes256
           hash sha1
       }
   }
   ike-group FOO0 {
       proposal 1 {
           dh-group 2
           encryption aes256
           hash sha1
       }
   }
   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.1.0/24
               }
           }
...

info_i_25x25.png

Note

Azure VPN 게이트웨이는 다른 암호화, 해싱 기법도 사용할 수 있습니다. 보안 설정으로는 AES256, SHA1을 선택할 수 있습니다. 지원하는 보안 설정은 About VPN Devices 를 참조하십시오.

3. ESP/IKE 생애주기 시간(초 단위)을 변경합니다.

set vpn ipsec esp-group FOO0 lifetime 27000
set vpn ipsec ike-group FOO0 lifetime 28800 (default)
  1. 완전 순방향 비밀성(PFS) 기능을 비활성화 합니다.
set vpn ipsec esp-group FOO0 pfs disable
  1. IKE 키 교환 버전을 1에서 2로 변경합니다.
set vpn ipsec ike-group FOO0 key-exchange ikev2
  1. IPsec 커넥션 타입을 변경합니다.
set vpn ipsec site-to-site peer 192.0.2.1 connection-type respond

info_i_25x25.png

Note

VPN 커넥션 타입은 주로 비 기능 연결이 재협상 (키링)하는 횟수에 영향을 줍니다. respond 값은 1 으로 설정되어 재시도를 수행하며, initiate 옵션으로 커넥션을 계속해서 재시도 할 수 있습니다.

  1. VPN이 사용할 VTI를 생성합니다. (이 인터페이스는 정의된 IP주소가 필요하지 않습니다.)
set interfaces vti vti0
  1. VTI 인터페이스 타입의 MSS 세팅 값을 낮게 합니다.
set firewall options mss-clamp interface-type vti
set firewall options mss-clamp mss 1350

info_i_25x25.png

Note

GRE 터널과 달리 VTI 인터페이스는 24 바이트의 오버헤드를 요구하지 않습니다. MTU 값은 IPsec 오버헤드에 따라서 자동적으로 낮아질 수 있습니다. 최대 세그먼트 크기 (MSS)는 1350보다 작아야 Azure가 연결될 때의 모든 가능한 조합에 대하여 대응할 수 있습니다.

  1. VTI을 포인팅하는 원격 서브넷을 윟나 라우팅 엔트리를 생성합니다.
set protocols static interface-route 172.16.1.0/24 next-hop-interface vti0
  1. IPsec 터널을 제거합니다.
delete vpn ipsec site-to-site peer 192.0.2.1 tunnel 1
  1. IPsec 피어 설정과 VTI 인터페이스 설정을 연결합니다.
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. (선택사항) IPsec 오프로딩 기능을 활성화 하여 ESP 성능을 향상시킵니다.
set system offload ipsec enable (this requires a reboot to become active)
  1. 변경내역을 커밋합니다.
commit
  1. 환경설정을 저장합니다.
save

Steps - Azure Gateway


맨위로 가기

Microsoft Azure 의 사이트 투 사이트 커넥션은 Azure 포탈에서 'new' 기능을 사용한 것을 바탕으로 진행합니다. 아래의 문서를 참조하세요:

Create a Site-to-Site connection in the Azure portal

info_i_25x25.png

Note

VPN 게이트웨이를 이전의 방법을 통해서 설정할 수도 있습니다. 이 문서의 예제는 자원 관리 매니저 배포 모델인 새로운 방법을 사용합니다.

www.png  GUI STEPS: Azure 관리 포탈 (GUI)에 접속합니다.

  1. 가상 네트워크를 생성합니다.

Dashboard > New > Networking > Virtual Network

Name: ServerNetwork
Address Space: 172.16.0.0/22
Subnet name: default
Subnet Address Space: 172.16.1.0/24
Resource Group: ServerNetwork
  1. 게이트웨이 서브넷을 생성합니다.

Dashboard > Virtual Networks > ServerNetwork > Subnets > + Gateway subnet

Name: GatewaySubnet (Required / cannot be changed)
Address Range: 172.16.0.0/24 (Cannot be the same as the default subnet address space)

image6

  1. 가상 네트워크 게이트웨이를 생성합니다.

Dashboard > New > Networking > Virtual Network Gateway

Name: VirtualGateway
Gateway Type: VPN
VPN Type: Route-Based
SKU: Basic (depends on usage)
Virtual Network: ServerNetwork
Public IP Address: Create new > VirtualGateway

info_i_25x25.png

Note

가상 게이트웨이 프로비저닝은 시간이 소요됩니다. 게이트웨이 스톡 키핑 유닛 (SKU)는 VPN 커넥션의 출력량을 정의합니다. 더 많은 SKU 정보는 About VPN Gateway 에서 찾아볼 수 있습니다.

  1. 로컬 네트워크 게이트웨이를 생성합니다.

Dashboard > New > Networking > Local Network Gateway

Name: LocalGateway
IP Address: 203.0.113.1
Address Space: 192.168.1.0/24

info_i_25x25.png

Note

'address space'는 원격 서브넷으로 정의되며 ER이 사용하는 서브넷에 대응됩니다. 모든 주소 공간과 서브넷은 Azure의 고정 경로가 생성됩니다. 이 경로는 정책기반 VPN의 원격, 로컬 서브넷이 정의된느 것과 같지 않습니다. 이후에는 ID가 정확하게 일치하는지 확인하며, 그렇지 않ㅇ르 경우 VPN은 연결하지 않습니다.

image7

  1. 로컬 게이트웨이와 가상 게이트웨이를 연결하는 VPN 커넥션을 생성합니다.

Daskboard >Virtual Network Gateways > VirtualGateway > Connections > + Add

Name: IPsecER
Connection Type: Site-to-Site (IPsec)
Virtual Network Gateway: VirtualGateway
Local Network Gateway: LocalGateway
Shared Key: <secret>

image8

image9


Steps - 테스팅 및 검증


맨위로 가기

  1. IPsec 보안 옵션을 검증하고 ER의 상태를 확인합니다:
show vpn ipsec sa
peer-192.0.2.1-tunnel-vti: #2, ESTABLISHED, IKEv2, ecdf3193545e701f:ee1b587910cc8b32
 local  '203.0.113.1' @ 203.0.113.1
 remote '192.0.2.1' @ 192.0.2.1
 AES_CBC-256/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024
 established 787s ago, rekeying in 27228s
 peer-192.0.2.1-tunnel-vti: #1, INSTALLED, TUNNEL, ESP:AES_CBC-256/HMAC_SHA1_96
   installed 787 ago, rekeying in 25448s, expires in 26213s
   in  c92b831a,   4180 bytes,    85 packets,     3s ago
   out 596eba1a,   3366 bytes,    62 packets,     3s 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: 26 minutes, since Jul 04 19:48:43 2017
 malloc: sbrk 376832, mmap 0, used 276328, free 100504
 worker threads: 11 of 16 idle, 5/0/0/0 working, job queue: 0/0/0/0, scheduled: 2

Listening IP addresses:
 192.168.1.1
 203.0.113.1
Connections:
peer-192.0.2.1-tunnel-vti:  203.0.113.1...192.0.2.1  IKEv2
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[2]: ESTABLISHED 14 minutes ago, 203.0.113.1[203.0.113.1]...192.0.2.1[192.0.2.1]
peer-192.0.2.1-tunnel-vti[2]: IKEv2 SPIs: ecdf3193545e701f_i ee1b587910cc8b32_r*, rekeying in 7 hours
peer-192.0.2.1-tunnel-vti[2]: IKE proposal: AES_CBC_256/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024
peer-192.0.2.1-tunnel-vti{1}:  INSTALLED, TUNNEL, ESP SPIs: c92b831a_i 596eba1a_o
peer-192.0.2.1-tunnel-vti{1}:  AES_CBC_256/HMAC_SHA1_96, 4343 bytes_i (89 pkts, 12s ago), 3497 bytes_o (65 pkts, 12s 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 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-sha1-modp1024!
       keyexchange=ikev2
       reauth=no
       ikelifetime=28800s
       esp=aes256-sha1!
       keylife=27000s
       rekeymargin=540s
       type=tunnel
       compress=no
       authby=secret
       mark=9437186
       auto=route
       keyingtries=1
#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
[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] <peer-192.0.2.1-tunnel-vti|1> CHILD_SA peer-192.0.2.1-tunnel-vti{1} established with SPIs c02f6d74_i dcfd3294_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. 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.0.10 (172.16.0.10)  1.846 ms  1.824 ms  1.812 ms
2  192.168.1.1 (192.168.1.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

info_i_25x25.png

Note

172.16.0.10 주소는 Azure 게이트웨이 서브넷 주소입니다. 로컬 네트워크에서 Azure로 트래픽을 전송하면 169.254.0.31을 선택하여 다른 경로를 라우팅 할수도 있습니다.

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  169.254.0.31 (169.254.0.31)  46.268 ms  48.562 ms  49.542 ms
3  172.16.1.10 (172.16.1.10)  56.236 ms *  55.567 ms
  1. 터널로 전송되는 트래픽을 캡쳐하고 터널의 ER 상태를 확인합니다:
show interfaces vti vti0
vti0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1436 qdisc noqueue state UNKNOWN group default
   link/ipip 203.0.113.1 peer 192.0.2.1

   RX:  bytes    packets     errors    dropped    overrun      mcast
        51978        593          0          0          0          0
   TX:  bytes    packets     errors    dropped    carrier collisions
        50543        556          0          0          0          0

show interfaces vti vti0 capture
22:40:10.503017 IP 172.16.1.10 > 192.168.1.10: ICMP echo request, id 12993, seq 18, length 64
22:40:10.504918 IP 192.168.1.10 > 172.16.1.10: ICMP echo reply, id 12993, seq 18, length 64
22:40:11.509699 IP 172.16.1.10 > 192.168.1.10: ICMP echo request, id 12993, seq 19, length 64
22:40:11.512768 IP 192.168.1.10 > 172.16.1.10: ICMP echo reply, id 12993, seq 19, length 64
  1. Azure 가상 게이트웨이 커넥션을 확인합니다. (관련 결과만 출력하였습니다.)
Get-AzureRmVirtualNetworkGatewayConnection -Name "IPsecER" -ResourceGroupName "ServerNetwork"

Name                    : IPsecER
ResourceGroupName       : ServerNetwork
Location                : eastus
ProvisioningState       : Succeeded
ConnectionStatus        : Connected
EgressBytesTransferred  : 3854
IngressBytesTransferred : 3104

info_i_25x25.png

Note

검증 명령어는 Azure 파워셸을 필요로 합니다. 윈도우 파워셸을 사용하여 Azure를 관리하는 방법은 Microsoft에서 제공하는 Getting started with Azure PowerShell 문서를 참조하세요.


관련 문서


맨위로 가기