EdgeRouter - EdgeRouter와 윈도우 서버 RRAS 사이의 IPsec 정책 기반 사이트 투 사이트 VPN¶
download at 2017-10-13T18:56:03Z origin
Overview
이 문서는 EdgeRouter와 라우팅, 원격 접근 (RRAS)를 사용한 윈도우 서버 사이의 정책 기반 IPsec VPN을 구성하는 방법을 서술합니다. 윈도우 서버의 실제 VPN 세팅은 윈도우 방화벽의 'Connection Security Rules' 를 사용하였습니다.
정책 기반 VPN 은 로컬, 원격지 서브넷 정의에 따라서 특징지을 수 있습니다. 정책 기반 VPN 타입과 달리 경로 기반 VPN에 따라서 달라지며, 가상 터널 인터페이스 (VTI)와 라우팅 엔트리 사용도에 따라서 특징 지을 수 있습니다.
NOTES & REQUIREMENTS: EdgeOS 1.9.7 이상의 펌웨어가 설치된 모든 EdgeRouter 모델에서 적용 가능합니다. 커맨드라인 인터페이스와 UniFi 컨트롤러, 기본 네트워킹에 대한 지식이 요구됩니다. 해당 주제에 대한 내용은 관련 문서 섹션의 문서를 확인하시기 바랍니다.
이 문서에서 사용한 장비:
- EdgeRouter-X (ER-X)
- RRAS를 사용하는 윈도우 서버 2016
- 피어의 테스트 클라이언트 (Host1 and Host2)
Table of Contents
네트워킹 다이어그램
네트워크 토폴로지는 아래와 같으며 EdgeRouter와 윈도우 서버에서 사용하는 인터페이스는 다음과 같습니다:
ER-X
- eth0 (WAN) - 203.0.113.1
- eth1 (LAN) - 192.168.1.1/24
Windows Server
- eth0 (WAN) - 192.0.2.1
- eth1 (LAN) - 172.16.1.1/24
Steps: 정책기반 VPN
라우팅과 인터페이스 환경설정은 양쪽 피어에 모두 설정되어 있으며 피어에 접속이 가능하다고 가정합니다.
IPsec과 관련있는 UDP 포트와 프로토콜은 다음과 같습니다:
- UDP 500 (IKE)
- ESP (프로토콜 50)
- UDP 4500 (NAT-T)
생성할 VPN 타입은 정책 기반 VPN이며, 원격지, 로컬 서브넷을 사용하며 해당 서브넷 정보가 없으면 프록시 ID를 사용합니다. 이 값들은 정확하게 두 피어간에 일치해야하며, 서로 동일한 내용을 가지고 있어야합니다. 터널을 통해서 미리 정해진 값들만 프록시 ID에서 전송 가능합니다. 예제에서는 ER은 192.168.1.0/24 주소를 LAN에서 보유하고 있으며, UniFi는 172.16.1.0/24 주소를 사용합니다.
환경설정은 주로 ER-Left에 대하여 서술합니다. 이후에는 윈도우 서버에서 VPN을 설정합니다.
GUI STEPS: 라우터의 웹 관리 포탈 (GUI)에 접속합니다.
- 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
Encryption: AES-128
Hash: SHA1
DH Group: 2
Pre-shared Secret: <secret>
Local subnet: 192.168.1.0/24
Remote subnet: 172.16.1.0/24
Note
WAN 커넥션에 비 고정 IP 주소를 사용할 수 있습니다. PPPoE 인터페이스나 로드밸런싱을 사용하는 경우에는 로컬 IP 'any'위에 0.0.0.0 사용을 권장합니다.
CLI STEPS: 커맨드라인 인터페이스에 접속합니다. GUI의 CLI 버튼을 사용하거나 PuTTY와 같은 프로그램을 사용합니다.
- 환경설정 모드에 진입합니다.
configure
- 현재 IPsec VPN 피어 환경설정을 확인합니다. (관련 정보만 아래에 출력됩니다.)
show vpn
ipsec {
esp-group FOO0 {
lifetime 3600
pfs enable
proposal 1 {
encryption aes128
hash sha1
}
}
...
- 완전 순방향 비밀성(PFS)을 비활성화합니다.
set vpn ipsec esp-group FOO0 pfs disable
- (선택사항) WAN 커넥션이 DHCP를 사용한다면 로컬 IPsec 피어 주소를 제거합니다.
delete vpn ipsec site-to-site peer 192.0.2.1 local-address
- (선택사항) WAN 커넥션이 DHCP 를 사용한다면 WAN 인터페이스의 로컬 IPsec DHCP 피어 주소를 정의합니다.
set vpn ipsec site-to-site peer 192.0.2.1 dhcp-interface eth0
- (선택사항) IPsec 오프로딩 기능을 활성화하여 ESP 성능을 향상시킵니다.
set system offload ipsec enable (this requires a reboot to become active)
- 변경내역을 커밋하고 환경설정을 저장합니다.
commit ; save
Steps: RRAS VPN
윈도우 방화벽 기능이 비활성화 되어 있고 인터넷에 연결되어 있음을 확인하십시오. 실제 VPN은 윈도우 방화벽 기능을 사용하여 'Connection Security Rules'에서 초기화 합니다.
WINDOWS STEPS: 윈도우 서버에 로그인합니다.
- Routing and Remote Access (RRAS) role을 인스톨합니다.
Server Manager > Manage > Add Roles and Features > Remote Access > DirectAccess And VPN (RAS) + Routing
- LAN 라우팅에 RRAS 기능을 활성화 합니다.
Routing and Remote Access Console (RRAS) > Configure and Enable Routing and Remote Access > Custom Configuration > LAN Routing
- RRAS 서비스를 구동합니다.
- 윈도우 방화벽에서 연결 보안 룰을 정의합니다.
Windows Firewall with Advanced Security Console > Connection Security Rules > New Rule
Rule Type: Tunnel
Tunnel Type: Custom configuration
No, Send all network traffic that matches this connection security rule through the tunnel
Requirements: Require authentication for inbound and outbound connections
터널 종단을 정의합니다:
Computers in endpoint 1: 172.16.1.0/24
Local tunnel endpoint 1: 192.0.2.1
Computers in endpoint 2: 192.168.1.0/24
Local tunnel endpoint 2: 203.0.113.1
Note
위자드에서 사용하는 'endpoint 1' 용어와 'endpoint 2'용어는 로컬, 원격 사이트를 의미합니다. Endpoint 1은 로컬 사이트 (외부 IP와 내부 RRAS 서버 서브넷)을 의미하며 endpoint 2는 원격 사이트 (외부 IP와 EdgeRouter의 내부 서브넷)을 의미합니다.
인증 방식을 정의합니다 (<secret>을 원하는 비밀번호로 설정합니다.):
Authentication Methods > Advanced > Customize > First Authentication Methods > Add
Preshared key: <secret>
- 관련 네트워크 위치에 룰을 적용하고 이름을 부여합니다. (IPsec으로 이름을 정의하였습니다.)
- (선택사항) 윈도우 서버에서 보안 설정을 수정합니다.
터널 암호화, 해싱, 생애주기 세팅은 'Windows Firewall with Advanced Security Console' 에서 변경 가능합니다.
Windows Firewall with Advanced Security on Local Computer > Properties > IPsec Settings > IPsec Defaults > Customize
Note
단계 1(IKE)는 '키 교환(Main Mode)', 단계 2(ESP)는 '데이터 보호(Quick Mode)'를 의미합니다. 다른 중요한 구별점은 IKE/ESP 생애주기가 분단위로 설정한다는 점입니다.
Steps: 테스팅 및 검증
IPsec VPN을 설정하고 난 이후에는 커넥션/상태를 다음 명령어를 통해서 검증할 수 있습니다.
- IPsec 보안 옵션을 검증하고 ER의 상태를 확인합니다:
show vpn ipsec sa
peer-192.0.2.1-tunnel-1: #1, ESTABLISHED, IKEv1, 95360d2823c27bce:7c2fd132ab42aac1
local '203.0.113.1' @ 203.0.113.1
remote '192.0.2.1' @ 192.0.2.1
AES_CBC-128/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024
established 79s ago, reauth in 28017s
peer-192.0.2.1-tunnel-1: #1, INSTALLED, TUNNEL, ESP:AES_CBC-128/HMAC_SHA1_96
installed 79 ago, rekeying in 2693s, expires in 3521s
in c2cc1044, 400 bytes, 10 packets, 9s ago
out 05afb9b4, 600 bytes, 10 packets, 9s 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: 107 seconds, since Sep 13 17:41:14 2017
malloc: sbrk 376832, mmap 0, used 272336, free 104496
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 99 seconds 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: 95360d2823c27bce_i* 7c2fd132ab42aac1_r, pre-shared key reauthentication in 7 hours
peer-192.0.2.1-tunnel-1[1]: IKE proposal: AES_CBC_128/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024
peer-192.0.2.1-tunnel-1{1}: INSTALLED, TUNNEL, ESP SPIs: c2cc1044_i 05afb9b4_o
peer-192.0.2.1-tunnel-1{1}: AES_CBC_128/HMAC_SHA1_96, 480 bytes_i (12 pkts, 3s ago), 720 bytes_o (12 pkts, 3s 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=aes128-sha1-modp1024!
keyexchange=ikev1
ikelifetime=28800s
esp=aes128-sha1!
keylife=3600s
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]
Note
실시간 캡쳐의 결과이므로 아무런 결과가 발견되지 않는다면 클라이언트가 트래픽을 생성하지 않거나 트래픽 업스트림이 차단당한 것일수도 있습니다.
4. ER IPsec VPN 로그를 확인합니다:
sudo swanctl --log
15[KNL] creating acquire job for policy 192.168.1.1/32[tcp/44385] === 172.16.1.10/32[tcp/https] with reqid {1}
15[IKE] initiating Main Mode IKE_SA peer-192.0.2.1-tunnel-1[1] to 192.0.2.1
15[ENC] generating ID_PROT request 0 [ SA V V V V ]
15[NET] sending packet: from 203.0.113.1[500] to 192.0.2.1[500] (156 bytes)
13[NET] received packet: from 192.0.2.1[500] to 203.0.113.1[500] (212 bytes)
13[ENC] parsed ID_PROT response 0 [ SA V V V V V V ]
13[ENC] generating ID_PROT request 0 [ KE No NAT-D NAT-D ]
15[ENC] parsed ID_PROT response 0 [ KE No NAT-D NAT-D ]
15[ENC] generating ID_PROT request 0 [ ID HASH N(INITIAL_CONTACT) ]
11[ENC] parsed ID_PROT response 0 [ ID HASH ]
11[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]
11[ENC] generating QUICK_MODE request 3410743081 [ HASH SA No ID ID ]
15[ENC] parsed QUICK_MODE response 3410743081 [ HASH SA No ID ID ]
15[IKE] CHILD_SA peer-192.0.2.1-tunnel-1{1} established with SPIs c2cc144_i 059b4_o and TS 192.168.1.0/24 === 172.16.1.0/24
Note
실시간 캡쳐 결과이므로 출력이 보이지 않는다면, 트래픽이 방화벽을 통해서 허용되었는지 확인하십시오. 다른 방법으로는 show vpn log | no-more명령어를 통해서 전체 IPsec 로그 히스토리를 확인할 수 있습니다.
- 윈도우 서버에서 메인 모드 (IKE), 퀵 모드 (ESP)의 IPsec 보안 설정을 확인합니다:
Windows Firewall with Advanced Security Console > Monitoring > Security Associations
Note
RRAS 서버에서 ER 서브넷에 연결 하기위해서 VPN을 초기화 하지 못할 수도 있습니다. 초기화 하지 못하는 이유는 RRAS 서버가 여전히 원격 서브넷 (192.168.1.0/24)로 기본 경로(route print -4)를 사용하여 라우팅 하고 있을수도 있습니다. RRAS 서버에서 클라이언트를 통해 들어오는 모든 트래픽은 방화벽 룰을 적용하고 VPN에 포워딩 됩니다. 즉, RRAS 서버의 클라이언트에서 VPN에 핑을 수행하여 활성화 할 수 있으며, RRAS 서버 직접 핑을 수행할 수 없습니다.
- Host1 과 Host2사이에 터널을 통해 트래픽을 전송해봅니다:
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
관련 문서