EdgeRouter - IPsec L2TP 서버¶
download at 2017-10-21T12:04:02Z origin
Overview
이 문서는 EdgeRouter를 사용하여 레이어 2 터널링 프로토콜 (L2TP) 서버를 로컬 인증을 통해서 설정하는 방법에 대하여 설명합니다. L2TP에 RADIUS 인증을 사용하는 방식은 RADIUS를 사용한 L2TP IPsec VPN 서버 문서 를 확인해 주세요. 이 문서는 '미리 정의된 시크릿' 인증을 바탕으로하므로 '자격증명 기반' 인증을 다룹니다.
Note
EdgeRouter에 EdgeOs 1.9.1 이상의 펌웨어가 설치 가능해야하며 커맨드 라인에 대한 기초 지식과 네트워킹에 대한 기본 지식이 요구됩니다. 기본 지식은 관련문서 를 참조하세요. 해당 내용에는 이 문서에서 사용된 설정을 확인 할 수 있습니다.
이 문서에서 사용한 장비:
- EdgeRouter-X (ER-X)
- 피어로 사용된 테스트 클라이언트 (Host1, Server1)
목차
네트워크 다이어그램
네트워크 토폴로지는 다음과 같이 표현할 수 있습니다. IP 주소와 Host1에서 사용된 인터페이스들, 클라이언트 라우터는 이 예제와 관련이 없습니다. L2TP 용어를 사용하면, ER-X는 'L2TP 서버''이고, Host1은 'L2TP 클라이언트''로 정의합니다.
다음 인터페이스는 ER에서 사용된 값입니다:
- eth0 (WAN) - 203.0.113.1
- eth1 (LAN) - 192.168.1.1/24
Steps - L2TP 서버
이 예제에서 ER는 **기본설정 마법사**를 통해서 미리 기본설정을 하였다고 가정합니다. 이 문서의 목적은 적절한 위장 룰이 사용되어 호스트에 있는 LAN을 통해서 인터넷과 통신을 할 수 있다고 가정합니다.
UDP 포트와 L2TP와 관련된 프로토콜은 다음과 같습니다:
- UDP 1701 (L2TP)
- UDP 500 (IKE)
- ESP (Protocol 50)
- UDP 4500 (NAT-T)
Note
커맨드라인 사용하기 커맨드라인 인터페이스에 접근합니다. GUI에 표시된 CLI 버튼 대신에 PuTTY와 같은 프로그램을 사용할 수 있습니다.
- 설정 모드에 진입한다
configure
- 서버 인증을 설정한다. (<secret>을 여러분이 원하는 비밀번호로 변경하세요).
set vpn l2tp remote-access ipsec-settings authentication mode pre-shared-secret
set vpn l2tp remote-access ipsec-settings authentication pre-shared-secret <secret>
Note
시크릿 키에 '인용기호'를 사용하게 된다면 같은 인용기호를 클라이언트에서 사용하지 않도록 주의하십시요 예를 들어, set vpn l2tp remote-access ipsec-settings authentication pre-shared-secret ' 에서 ***sup3rSecure***' 는 반드시 *sup3rSecure *로 클라이언트에서 입력해야 합니다.
- VPN 클라이언트가 사용할 IP 정보를 생성합니다.
set vpn l2tp remote-access client-ip-pool start 192.168.100.240
set vpn l2tp remote-access client-ip-pool stop 192.168.100.249
Note
IP 주소를 서브넷으로 입력 할 수 있습니다. 단, IP 주소와 DHCP 서버 주소, 다른 장비에서 사용하는 주소와 겹치지 않도록 주의하십시요. 로컬 서브넷으로 주소를 정의하는 것은 권장하지 않습니다. 로컬 서브넷으로 주소를 정의하는 것은 어플리케이션의 멀티캐스트 (discovery) 이슈를 발생 시킬 수 있습니다.
- VPN 클라이언트가 사용할 DNS 서버를 설정한다.
set vpn l2tp remote-access dns-servers server-1 8.8.8.8
set vpn l2tp remote-access dns-servers server-2 8.8.4.4
DNS 서버의 내부 IP를 라우터에 직접 할당할 수 있습니다. 이러한 경우, DNS 포워딩을 활성화 해야합니다. (이미 활성화 되어 있다면) 내부 IP 주소를 listen-address로 등록합니다.
set vpn l2tp remote-access dns-servers server-1 192.168.1.1
set service dns forwarding options "listen-address=192.168.1.1"
set service dns forwarding cache-size 150
set service dns forwarding listen-on eth1
- WAN 인터페이스를 L2TP 리퀘스트를 클라이언트로부터 받을 수 있도록 설정한다.
다음의 구문 중에서 **단 하나**만 설정이 가능합니다. 여러분의 상황에 따라서 최적의 커맨드를 선택하시기 바랍니다:
- WAN 인터페이스가 DHCP를 통해서 주소를 입력 받는 경우.
set vpn l2tp remote-access dhcp-interface eth0
- WAN 인터페이스가 고정 (static) 주소로 설정되어 있는 경우 (외부 주소 값을 변경한다).
set vpn l2tp remote-access outside-address 203.0.113.1
- WAN 인터페이스가 PPPoE를 통해서 주소를 입력받는 경우 또는 Dual WAN 로드 밸런싱을 사용하는 경우.
set vpn l2tp remote-access outside-address 0.0.0.0
Note
다수의 업링크가 사용되는 경우 C를 사용하세요 (Dual WAN 로드 밸런싱). A 또는 B 옵션은 L2TP 서버가 하나의 WAN 주소만 허용 가능합니다.
- 로컬 ** **인증을 설정한다. (<password> 를 원하는 패스워드로 교체하세요)
set vpn l2tp remote-access authentication mode local
set vpn l2tp remote-access authentication local-users username user1 password <password>
set vpn l2tp remote-access authentication local-users username user2 password <password>
- (선택사항) IPsec 인터페이스가 L2TP를 사용할 수 있도록 설정한다.
이 단계는 펌웨어 버전에 의존성을 갖고 있습니다. 공식적으로 이 명령어는 1.8.5 버전부터는 사용을 자제하도록 권고하고 있습니다. 더 많은 정보는 EdgeMAX EdgeRouter software release v1.8.5 의 기능 향상 및 버그 수정 섹션을 참고하세요.
set vpn ipsec ipsec-interfaces interface eth0
- (선택사항) L2TP 트래픽을 조절하기 위해 MTU를 낮추기.
MTU 값을 낮추었을 때 L2TP 터널링의 성능이 향상되는가에 실험을 진행하였습니다. 외부 WAN 인터페이스가 PPPoE (1492 byte MTU)를 사용할 때 성능 향상이 이루어 짐을 확인 할 수 있었습니다.
set vpn l2tp remote-access mtu <mtu-value>
- (선택사항) VPN 사용자에게 특정한 인증 프로토콜을 요청한다.
set vpn l2tp remote-access authentication require [ pap | chap | mschap | mschap-v2 ]
- PAP - 패스워드 인증 방식 프로토콜
- CHAP - 챌린지 핸드셰이크 인증 방식 프로토콜 (Challenge Handshake Authentication Protocol)
- MS-CHAP - 마이크로소프트 방식의 챌린지 핸드셰이크 인증 방식 프로토콜 (Microsoft Challenge Handshake Authentication Protocol)
- MS-CHAP-V2 - 마이크로소프트 방식의 챌린지 핸드셰이크 인증 방식 버전 2 프로토콜 (Microsoft Challenge Handshake Authentication Protocol Version 2)
- 수정 사항을 커밋한다
commit
- 설정을 저장한다.
save
Steps - 방화벽 룰
WAN_LOCAL 룰은 기본 설정 마법사 를 통해서 생성한 기본값은 어떤 요청도 연결하지 않는다 입니다. L2TP, ESP, IKE를 위한 방화벽 룰은 VPN 트래픽을 받아들이기 위해서 필요합니다.
- 설정 모드로 진입한다.
configure
- WAN 인터페이스의 L2TP, IKE, NAT-T, ESP의 방화벽 룰을 추가한다.
Attention
방화벽 룰이 현재의 룰을 덮어쓰지 않도록 주의하세요. 각 룰이 show firewall name WAN_LOCAL **를 통해서 확인했을 때 올바르게 적용되었는지 한번 더 확인해 보거나, GUI의 **Firewall / NAT > Firewall Policies > WAN_LOCAL > Actions > Edit Ruleset 를 통해서 확인해 보십시오.
set firewall name WAN_LOCAL rule 30 action accept
set firewall name WAN_LOCAL rule 30 description IKE
set firewall name WAN_LOCAL rule 30 destination port 500
set firewall name WAN_LOCAL rule 30 log disable
set firewall name WAN_LOCAL rule 30 protocol udp
set firewall name WAN_LOCAL rule 40 action accept
set firewall name WAN_LOCAL rule 40 description L2TP
set firewall name WAN_LOCAL rule 40 destination port 1701
set firewall name WAN_LOCAL rule 40 log disable
set firewall name WAN_LOCAL rule 40 protocol udp
set firewall name WAN_LOCAL rule 50 action accept
set firewall name WAN_LOCAL rule 50 description ESP
set firewall name WAN_LOCAL rule 50 log disable
set firewall name WAN_LOCAL rule 50 protocol esp
set firewall name WAN_LOCAL rule 60 action accept
set firewall name WAN_LOCAL rule 60 description NAT-T
set firewall name WAN_LOCAL rule 60 destination port 4500
set firewall name WAN_LOCAL rule 60 log disable
set firewall name WAN_LOCAL rule 60 protocol udp
Note
WAN 인터페이스에 적용되는 로컬 방화벽 룰이 환경에 따라서 다를 수 있습니다. 이름 스킴이 무엇이든지 올바른 방화벽 룰은 WAN 인터페이스에 적용되어야 한다는 점입니다. **set interfaces ethernet eth0 firewall local name <firewall name> **구문을 사용해서 직접 적용할 수도 있습니다.
- 변경 사항을 커밋한다.
commit
- 설정을 저장한다.
save
Steps - 윈도우 클라이언트
L2TP 서버에 많은 애플리케이션과 다양한 운영체제가 연결되는 다양한 방식이 있습니다. 이 글에서는 Windows 10 VPN 클라이언트에 대하여 서술합니다. Windows 10 VPN 클라이언트가 이 방법을 사용하는 이유는 가장 많이 사용되는 방식이며, 많은 사용자들이 활발히 사용하고 있는 방식이기 때문입니다.
- Settings (WIN+I) > Network & Internet > Add a VPN connection 를 선택합니다.
- VPN Provider: Windows (built-in)
- Connection name: ER-L2TP
- Server name: ER의 외부 WAN IP-주소
- VPN Type: 미리 공유된 L2TP/IPsec의 키, 자격증명 (L2TP/IPsec with pre-shared key or certificate)
- Network Connections (WIN+X) > ER-L2TP Adapter properties 를 선택합니다.
Security > Allow these protocols > Microsoft CHAP Version 2 (MS-CHAP v2)
Note
EdgeRouter가 NAT 설정 아래 있거나, L2TP 서버에 연결할 수 없는 경우, 윈도우 운영체제의 NAT 디바이스 아래에 위치한 서버,라우터로 흐르는 IPsec 트래픽을 조작하는 방식이 문제일 가능성이 있습니다. 이러한 경우 step 3의 hotfix 를 적용합니다.
- (Hotfix) registry (WIN+R) > regedit 를 실행한다.
다음 레지스트리 서브트리로 이동합니다:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent
새로운 DWORD (32-bit) 값을 생성합니다:
AssumeUDPEncapsulationContextOnSendRule
DWORD 값을 2로 수정합니다. (기본값 0) 이후 컴퓨터를 재시작합니다.
Steps - 테스팅 & 검증
마지막 단계는 외부 인터페이스에서 L2TP 트래픽이 잘 도착하는지 로그를 통해서 시험하고 검증하는 단계입니다. L2TP VPN에 문제가 생길 경우, 로그 파일을 통해서 문제를 확인 하십시오. L2TP 세션을 생성하고 난 이후에는 다음의 명령어를 통해서 커넥션을 검증할 수 있습니다:
- ER의 IPsec 프로세스 상태를 검증한다:
sudo ipsec statusall
Status of IKE charon daemon (strongSwan 5.2.2, Linux 3.10.14-UBNT, mips):
uptime: 49 seconds, since Jul 17 14:01:59 2017
malloc: sbrk 376832, mmap 0, used 272072, free 104760
worker threads: 11 of 16 idle, 5/0/0/0 working, job queue: 0/0/0/0, scheduled: 0
Listening IP addresses:
192.168.1.1
203.0.113.1
10.255.255.0
Connections:
remote-access: 203.0.113.1...%any IKEv1, dpddelay=15s
remote-access: local: [203.0.113.1] uses pre-shared key authentication
remote-access: remote: uses pre-shared key authentication
remote-access: child: dynamic[udp/l2f] === dynamic[udp] TRANSPORT, dpdaction=clear
Security Associations (1 up, 0 connecting):
remote-access[1]: ESTABLISHED 30 seconds ago, 203.0.113.1[203.0.113.1]...192.0.2.1[172.16.1.10]
remote-access[1]: IKEv1 SPIs: 7ef8fd033bea7f4c_i 27eaafddd951c8dc_r*, rekeying disabled
remote-access[1]: IKE proposal: AES_CBC_256/HMAC_SHA1_96/PRF_HMAC_SHA1/ECP_384
remote-access{1}: INSTALLED, TRANSPORT, ESP in UDP SPIs: c009fce1_i cd73f1b4_o
remote-access{1}: AES_CBC_128/HMAC_SHA1_96, 3594 bytes_i (36 pkts, 18s ago), 675 bytes_o (17 pkts, 27s ago)
remote-access{1}: 203.0.113.1/32[udp/l2f] === 192.0.2.1/32[udp/l2f]
Note
커넥션이 생성되지 않은 경우, IPsec 프로세스를 sudo ipsec restart 명령어를 입력하여 다시 실행시키세요
2. 방화벽 룰에 따라서 트래픽 카운팅을 증가시키고 있는지 검증한다.
show firewall name WAN_LOCAL statistics
------------------------------------------
IPv4 Firewall "WAN_LOCAL" [WAN to router]
Active on (eth0,LOCAL)
rule packets bytes action description
---- ------- ----- ------ -----------
10 2926 271414 ACCEPT Allow established/related
20 0 0 DROP Drop invalid state
30 19 5512 ACCEPT IKE
40 5 655 ACCEPT L2TP
50 0 0 ACCEPT ESP
60 8 1088 ACCEPT NAT-T
10000 69 9516 DROP DEFAULT ACTION
- 외부 WAN 인터페이스를 통해서 도착하는 L2TP 트래픽을 캡쳐한다:
sudo tcpdump -i eth0 -n udp dst port 500 or port 4500 or port 1701
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
IP 192.0.2.1.500 > 203.0.113.1.500: isakmp: phase 1 I ident
IP 203.0.113.1.500 > 192.0.2.1.500: isakmp: phase 1 R ident
IP 192.0.2.1.500 > 203.0.113.1.500: isakmp: phase 1 I ident
IP 203.0.113.1.500 > 192.0.2.1.500: isakmp: phase 1 R ident
IP 192.0.2.1.4500 > 203.0.113.1.4500: NONESP-encap: isakmp: phase 1 I ident[E]
IP 203.0.113.1.4500 > 192.0.2.1.4500: NONESP-encap: isakmp: phase 1 R ident[E]
IP 192.0.2.1.4500 > 203.0.113.1.4500: NONESP-encap: isakmp: phase 2/others I oakley-quick[E]
IP 203.0.113.1.4500 > 192.0.2.1.4500: NONESP-encap: isakmp: phase 2/others R oakley-quick[E]
IP 192.0.2.1.4500 > 203.0.113.1.4500: NONESP-encap: isakmp: phase 2/others I oakley-quick[E]
IP 192.0.2.1.4500 > 203.0.113.1.4500: UDP-encap: ESP(spi=0xc009fce1,seq=0x1), length 164
IP 192.0.2.1.4500 > 203.0.113.1.4500: UDP-encap: ESP(spi=0xc009fce1,seq=0x2), length 164
Note
위의 결과는 실시간 캡쳐의 결과입니다. 아무런 결과가 표시되지 않는 경우, 트래픽이 클라이언트로부터 생성되지 않거나, 트래픽 업스트림에 트래픽이 통과되지 않고 있음을 의미합니다. 결과값은 있으나 커넥션이 맺어지지 않은 경우, 방화벽 룰을 한번 더 확인해 보세요.
4. ER IPsec VPN 로그를 캡쳐한다:
sudo swanctl --log
[NET] received packet: from 192.0.2.1[500] to 203.0.113.1[500] (408 bytes)
[IKE] 192.0.2.1 is initiating a Main Mode IKE_SA
[IKE] remote host is behind NAT
[CFG] looking for pre-shared key peer configs matching 203.0.113.1...192.0.2.1[172.16.0.10]
[CFG] selected peer config "remote-access"
[IKE] IKE_SA remote-access[15] established between ...
[IKE] CHILD_SA remote-access{5} established with SPIs ...
[KNL] 10.255.255.0 appeared on ppp0
Note
위의 결과는 실시간 캡쳐의 결과입니다. 아무런 결과를 얻지 못한 경우, 트래픽이 방화벽에서 거부당했음을 의미합니다. show vpn log | no-more 명령어를 통해서 전체 IPsec 로그를 확인할 수 있습니다.
- IPSec 보안 제휴(SAs) 방식 확인:
show vpn ipsec sa
remote-access: #545, ESTABLISHED, IKEv1, b0a8c5df5ff1b225:a251946b15ebaaae
local '203.0.113.1' @ 203.0.113.1
remote '172.16.0.10' @ 192.0.2.1
AES_CBC-256/HMAC_SHA1_96/PRF_HMAC_SHA1/ECP_384
established 351s ago
remote-access: #17, INSTALLED, TRANSPORT-in-UDP, ESP:AES_CBC-128/HMAC_SHA1_96
installed 8 ago
in cd49a319, 0 bytes, 0 packets
out 47a8a786, 0 bytes, 0 packets
local 76.237.8.193/32[udp/l2f]
remote 192.0.2.1/32[udp/l2f]
6. 원격 접근 유저와 인터페이스:
show vpn remote-access
Active remote access VPN sessions:
User Time Proto Iface Remote IP TX pkt/byte RX pkt/byte
---------- --------- ----- ----- --------------- ------ ------ ------ ------
ubnt 00h01m22s L2TP l2tp0 192.168.100.240 4 58 86 7.4K
show interfaces
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface IP Address S/L Description
--------- ---------- --- -----------
l2tp0 10.255.255.0 u/u User: ubnt (192.168.100.240)
- Host1의 트래픽을 Server1으로 터널링을 통해서 트래픽을 주고 받기:
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
관련문서