EdgeRouter - IPsec L2TP 서버 ================================ download at 2017-10-21T12:04:02Z `origin `_ Overview -------------- 이 문서는 EdgeRouter를 사용하여 레이어 2 터널링 프로토콜 (L2TP) 서버를 로컬 인증을 통해서 설정하는 방법에 대하여 설명합니다. L2TP에 RADIUS 인증을 사용하는 방식은 `RADIUS를 사용한 L2TP IPsec VPN 서버 문서 `__ 를 확인해 주세요. 이 문서는 *'미리 정의된 시크릿'* 인증을 바탕으로하므로 *'자격증명 기반'* 인증을 다룹니다. |book_25x25.png| .. note:: EdgeRouter에 EdgeOs 1.9.1 이상의 펌웨어가 설치 가능해야하며 커맨드 라인에 대한 기초 지식과 네트워킹에 대한 기본 지식이 요구됩니다. 기본 지식은 `관련문서 <#related%20articles>`__ 를 참조하세요. 해당 내용에는 이 문서에서 사용된 설정을 확인 할 수 있습니다. 이 문서에서 사용한 장비: - `EdgeRouter-X (ER-X) `__ - 피어로 사용된 테스트 클라이언트 (Host1, Server1) 목차 -------------- #. `네트워크 다이어그램 <#network%20diagram>`__ #. `Steps - L2TP 서버  <#port%20forwarding>`__ #. `Steps - 방화벽 룰  <#optional>`__ #. `Steps - 윈도우 클라이언트 <#windows%20client>`__ #. `Steps - 테스트 및 검증 <#testing>`__ #. `관련문서 <#related%20articles>`__ -------------- 네트워크 다이어그램 -------------- `맨 위로 이동 <#top>`__ 네트워크 토폴로지는 다음과 같이 표현할 수 있습니다. IP 주소와 Host1에서 사용된 인터페이스들, 클라이언트 라우터는 이 예제와 관련이 없습니다. L2TP 용어를 사용하면, ER-X는 'L2TP 서버''이고, Host1은 'L2TP 클라이언트''로 정의합니다. 다음 인터페이스는 ER에서 사용된 값입니다: #. eth0 (WAN) - 203.0.113.1 #. eth1 (LAN) - 192.168.1.1/24 |image1| -------------- Steps - L2TP 서버 -------------- `맨 위로 이동 <#top>`__ 이 예제에서 ER는 **기본설정 마법사**를 통해서 미리 기본설정을 하였다고 가정합니다. 이 문서의 목적은 적절한 위장 룰이 사용되어 호스트에 있는 LAN을 통해서 인터넷과 통신을 할 수 있다고 가정합니다. UDP 포트와 L2TP와 관련된 프로토콜은 다음과 같습니다: #. UDP 1701 (L2TP) #. UDP 500 (IKE) #. ESP (Protocol 50) #. UDP 4500 (NAT-T)  |CLI_circle.png| .. note:: **커맨드라인 사용하기** 커맨드라인 인터페이스에 접근합니다. GUI에 표시된 CLI 버튼 대신에 PuTTY와 같은 프로그램을 사용할 수 있습니다. 1. 설정 모드에 진입한다 :: configure 2. 서버 인증을 설정한다. (을 여러분이 원하는 비밀번호로 변경하세요). :: set vpn l2tp remote-access ipsec-settings authentication mode pre-shared-secret set vpn l2tp remote-access ipsec-settings authentication pre-shared-secret |info_i_25x25.png|  .. Note:: 시크릿 키에 '인용기호'를 사용하게 된다면 같은 인용기호를 클라이언트에서 사용하지 않도록 주의하십시요 예를 들어, **set vpn l2tp remote-access ipsec-settings authentication pre-shared-secret ' 에서 **\ *sup3rSecure*\ **'** 는 반드시 *sup3rSecure *\ 로 클라이언트에서 입력해야 합니다. 3. 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 |info_i_25x25.png|  .. Note:: IP 주소를 서브넷으로 입력 할 수 있습니다. 단, IP 주소와 DHCP 서버 주소, 다른 장비에서 사용하는 주소와 겹치지 않도록 주의하십시요. 로컬 서브넷으로 주소를 정의하는 것은 권장하지 않습니다. 로컬 서브넷으로 주소를 정의하는 것은 어플리케이션의 멀티캐스트 (discovery) 이슈를 발생 시킬 수 있습니다. 4. 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 5. WAN 인터페이스를 L2TP 리퀘스트를 클라이언트로부터 받을 수 있도록 설정한다. 다음의 구문 중에서 **단 하나**만 설정이 가능합니다. 여러분의 상황에 따라서 최적의 커맨드를 선택하시기 바랍니다: (A) WAN 인터페이스가 DHCP를 통해서 주소를 입력 받는 경우. :: set vpn l2tp remote-access dhcp-interface eth0 (B) WAN 인터페이스가 고정 (static) 주소로 설정되어 있는 경우 (외부 주소 값을 변경한다). :: set vpn l2tp remote-access outside-address 203.0.113.1 (C) WAN 인터페이스가 PPPoE를 통해서 주소를 입력받는 경우 또는 Dual WAN 로드 밸런싱을 사용하는 경우. :: set vpn l2tp remote-access outside-address 0.0.0.0 |info_i_25x25.png| .. Note:: 다수의 업링크가 사용되는 경우 C를 사용하세요 (**Dual WAN 로드 밸런싱**). A 또는 B 옵션은 L2TP 서버가 하나의 WAN 주소만 허용 가능합니다. 6. 로컬 \ ** **\ 인증을 설정한다. ( 를 원하는 패스워드로 교체하세요) :: set vpn l2tp remote-access authentication mode local set vpn l2tp remote-access authentication local-users username user1 password set vpn l2tp remote-access authentication local-users username user2 password 7. (선택사항) IPsec 인터페이스가 L2TP를 사용할 수 있도록 설정한다. 이 단계는 펌웨어 버전에 의존성을 갖고 있습니다. 공식적으로 이 명령어는 1.8.5 버전부터는 사용을 자제하도록 권고하고 있습니다. 더 많은 정보는 `EdgeMAX EdgeRouter software release v1.8.5 `__ 의 *기능 향상 및 버그 수정* 섹션을 참고하세요. :: set vpn ipsec ipsec-interfaces interface eth0 8. (선택사항) L2TP 트래픽을 조절하기 위해 MTU를 낮추기. MTU 값을 낮추었을 때 L2TP 터널링의 성능이 향상되는가에 실험을 진행하였습니다. 외부 WAN 인터페이스가 PPPoE (1492 byte MTU)를 사용할 때 성능 향상이 이루어 짐을 확인 할 수 있었습니다. :: set vpn l2tp remote-access mtu 9. (선택사항) 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) 10. 수정 사항을 커밋한다 :: commit 11. 설정을 저장한다. :: save -------------- Steps - 방화벽 룰 -------------- `맨 위로 이동 <#top>`__ WAN\_LOCAL 룰은 **기본 설정 마법사** 를 통해서 생성한 기본값은 어떤 요청도 연결하지 않는다 입니다. L2TP, ESP, IKE를 위한 방화벽 룰은 VPN 트래픽을 받아들이기 위해서 필요합니다. 1. 설정 모드로 진입한다. :: configure 2. WAN 인터페이스의 L2TP, IKE, NAT-T, ESP의 방화벽 룰을 추가한다. |warning_25x25.png| .. 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 |info_i_25x25.png| .. Note:: WAN 인터페이스에 적용되는 로컬 방화벽 룰이 환경에 따라서 다를 수 있습니다. 이름 스킴이 무엇이든지 올바른 방화벽 룰은 WAN 인터페이스에 적용되어야 한다는 점입니다. \ **set interfaces ethernet eth0 firewall local name  **\ 구문을 사용해서 직접 적용할 수도 있습니다. 3. 변경 사항을 커밋한다. :: commit  4. 설정을 저장한다. :: save  -------------- Steps - 윈도우 클라이언트 -------------- `맨 위로 이동 <#top>`__ L2TP 서버에 많은 애플리케이션과 다양한 운영체제가 연결되는 다양한 방식이 있습니다. 이 글에서는 Windows 10 VPN 클라이언트에 대하여 서술합니다. Windows 10 VPN 클라이언트가 이 방법을 사용하는 이유는 가장 많이 사용되는 방식이며, 많은 사용자들이 활발히 사용하고 있는 방식이기 때문입니다. 1. **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) 2. **Network** **Connections (WIN+X) > ER-L2TP Adapter properties** 를 선택합니다. :: Security > Allow these protocols > Microsoft CHAP Version 2 (MS-CHAP v2) |info_i_25x25.png| .. Note:: EdgeRouter가 NAT 설정 아래 있거나, L2TP 서버에 연결할 수 없는 경우, 윈도우 운영체제의 NAT 디바이스 아래에 위치한 서버,라우터로 흐르는 IPsec 트래픽을 조작하는 방식이 문제일 가능성이 있습니다. 이러한 경우 step 3의 hotfix 를 적용합니다. 3. |power_bolt_25x25.png|\ (Hotfix) **registry (WIN+R) > regedit** 를 실행한다. 다음 레지스트리 서브트리로 이동합니다: :: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent 새로운 DWORD (32-bit) 값을 생성합니다: :: AssumeUDPEncapsulationContextOnSendRule DWORD 값을 2로 수정합니다. (기본값 0) 이후 컴퓨터를 재시작합니다. -------------- Steps - 테스팅 & 검증 -------------- `맨 위로 가기 <#top>`__ 마지막 단계는 외부 인터페이스에서 L2TP 트래픽이 잘 도착하는지 로그를 통해서 시험하고 검증하는 단계입니다. L2TP VPN에 문제가 생길 경우, 로그 파일을 통해서 문제를 확인 하십시오. L2TP 세션을 생성하고 난 이후에는 다음의 명령어를 통해서 커넥션을 검증할 수 있습니다: 1. 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] |info_i_25x25.png| .. 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 3. 외부 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 |info_i_25x25.png| .. 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 |info_i_25x25.png| .. Note:: 위의 결과는 실시간 캡쳐의 결과입니다. 아무런 결과를 얻지 못한 경우, 트래픽이 방화벽에서 거부당했음을 의미합니다. **show vpn log \| no-more** 명령어를 통해서 전체 IPsec 로그를 확인할 수 있습니다. 5. 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) 7. 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 -------------- 관련문서 -------------- `Back to Top <#top>`__ - `EdgeRouter - RADIUS를 사용한 IPsec L2TP 서버 `__ - `EdgeRouter - NAT-T를 사용하여 내부서버에 L2TP-트래픽 포워딩하기 `__ - `EdgeRouter - 듀얼 WAN 로드 밸런싱 기능 `__ - `네트워킹 개론 - SSH로 커넥션을 생성하는 방법 `__ .. |book_25x25.png| image:: /hc/article_attachments/115012686207/book_25x25.png .. |image1| image:: /hc/article_attachments/115017507127/mceclip0.png .. |CLI_circle.png| image:: /hc/article_attachments/115013437528/CLI_circle.png .. |info_i_25x25.png| image:: /hc/article_attachments/115012689667/info_i_25x25.png .. |warning_25x25.png| image:: /hc/article_attachments/115013906487/warning_25x25.png .. |power_bolt_25x25.png| image:: /hc/article_attachments/115012691767/power_bolt_25x25.png