EdgeRouter - TLS와 다중 WAN OpenVPN Server ======================================================= download at 2017-08-09T14:53:06Z `origin `_ Overview -------------- 이 문서는 OpenVPN 서버 클라이언트 모드를 TLS를 사용하여 설정하는 방법을 서술합니다. 다중 WAN 인터페이스를 다룰 수 있는 방법을 의미합니다. 1.7.0 버전부터는 로드 밸렁신 위자드에서 기본 환경 설정을 아래의 설정에 따라서 얻을 수 있습니다. WAN 커넥션이 있는 환경에서는 사용자가 WAN+2LAN, 또는 WAN+2LAN2 위자드를 사용하여 기본 설정을 완료할 수 있습니다. Table of Contents -------------- `예제 환경 <#example%20environment>`__ `Steps to Follow <#steps%20to%20follow>`__ #. `인증 자격 증명을 생성하기 <#step%201>`__ #. `서버 자격 증명과 키 생성하기 <#step%202>`__ #. `파일 옮기기 및 이름 재정의 <#step%203>`__ #. `클라이언트를 위한 자격 증명과 키 값 만들기 <#step%204>`__ #. `디피-헬만 파라미터 파일 생성하기 <#step%205>`__ #. `각 클라이언트에 파일 전송하기 <#step%206>`__ #. `키파일에서 패스워드 제거하기 <#step%207>`__ #. `Router1의 OpenVPN 서버 설정하기 <#step%208>`__ #. `클라이언트 설정하기 <#step%209>`__ #. `방화벽 설정하기 <#step%2010>`__ #. `다중 WAN (MultiWAN) 설정하기 <#step%2011>`__ #. `터널 동작 검증하기 <#step%2012>`__ `트러블 슈팅 <#troubleshooting>`__ --------------   예제 환경 -------------- `맨위로 가기 <#top>`__ **Router 1 EdgeRouter 를 OpenVPN Server로 설정하기**\ : 외부 IP/이름: system1.dyndns.com (외부 IP 주소로 설정 가능합니다) 내부 IP: 192.168.1.1 eth0 WAN1 eth1 WAN2 eth2 LAN 192.168.1.1 vtun0 OpenVPN Tunnel 10.99.99.1 **Router 2 EdgeRouter 를 OpenVPN Client로 설정하기**\ : 외부 IP/이름: system2.dyndns.com (외부 IP 주소로 설정 가능합니다) 내부 IP: 192.168.2.1 eth0 WAN eth1 LAN 192.168.2.1 vtun0 OpenVPN Tunnel 10.99.99.2 *Note: 환경이 위의 구성과 다르다면 본인 환경에 맞도록 정보를 수정하십시오.*  -------------- Steps to Follow -------------- Step 1: 인증 자격 증명 생성하기 `맨위로 가기 <#top>`__ 1. CLI로 사용자 로그인을 하고 운용 모드로 진입합니다. ::  ssh user@Router1  2. 루트 권한을 획득합니다. ::  sudo su  3. 디렉토리를 이동합니다. ::  cd /usr/lib/ssl/misc/ 4. 인증 자격증명을 생성합니다. ::  ./CA.sh -newca  CA certificate filename (or enter to create)  엔터를 입력합니다. ::  [Enter pem pass phrase: 패스워드를 생성합니다. ::  Verifying - Enter PEM pass phrase: 생성한 패스워드를 검증합니다.   **5. 다음 프롬프트에서 필요한 정보를 입력합니다:** :: Country Name (2 letter code) [AU]:US xxx State or Province Name (full name) [Some-State]:California Locality Name (eg, city) []:San Jose Organization Name (eg, company) [Internet Widgits Pty Ltd]:UBNT Organizational Unit Name (eg, section) []:Support Common Name (e.g. server FQDN or YOUR name) []:ER8-Server Email Address []:support@ubnt.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:password123 An optional company name []:UBNT yyy  /usr/lib/ssl/misc/demoCA 와 관련된 파일들을 생성합니다. --------------  Step 2: 서버 자격증명과 키를 생성합니다. `맨위로 가기 <#top>`__ --------------  *Note: step 1에 이어서, 사용자로 로그인 상태이며, /usr/lib/ssl/misc/ 디렉토리에 있다고 가정합니다.* **1. 인증정보 생성하기** :: user@Router1:/usr/lib/ssl/misc# ./CA.sh -newreq **프롬프트에서 다시 필요한 정보를 입력합니다 "Common Name"은 고유한 값이어야합니다.** **2. 인증을 수행합니다.** :: user@Router1:/usr/lib/ssl/misc# ./CA.sh -sign *Note: /usr/lib/ssl/misc/ 디렉토리에 newreq.pem, newkey.pem, newcert.pem 파일을 생성합니다.* --------------  Step 3: 파일을 옮기고 이름을 재정의합니다. `맨위로 가기 <#top>`__ -------------- **/config/auth/에 파일을 옮기고 펌웨어 업그레이드와 명확성을 위해서 이름을 재작성합니다.** *Note: /usr/lib/ssl/misc/ 디렉토리에서 사용자로 로그인된 상황이어야합니다.* **1. cacert.pem 파일 옮기기** :: user@Router1:/usr/lib/ssl/misc# mkdir /config/auth/ user@Router1:/usr/lib/ssl/misc# cp demoCA/cacert.pem demoCA/private/cakey.pem /config/auth/ **2. newcert.pem 파일 옮기고 이름 바꾸기** :: user@Router1:/usr/lib/ssl/misc# mv newcert.pem /config/auth/server.pem **3. newkey.pem 파일 옮기고 이름 바꾸기** :: user@Router1:/usr/lib/ssl/misc# mv newkey.pem /config/auth/server.key  *Note: newkey.pem 파일 확장자를 .key로 변경합니다.* 파일이 올바른 위치에 이동했는지 확인하려면 “ls /config/auth/“ 를 입력합니다. --------------  Step 4: 클라이언트 자격 증명과 키를 생성합니다. `맨위로 가기 <#top>`__ --------------  *Note: /usr/lib/ssl/misc/ 디렉토리에 있고, 운용 모드에 사용자로 로그인 한 상황이어야합니다.* **1. 클라이언트 자격증명 생성하기** :: ./CA.sh -newreq 위와 동일하게 생성하되, 각 클라이언트당 Common Name 값은 고유 값이어야합니다. **2. 인증을 수행합니다.** :: ./CA.sh -sign **3. 각 클라이언트에 고유 Common Name을 갖도록 반복하여 수행합니다.** **4. 클라이언트 파일을 옮기고 이름을 변경합니다.** :: mv newcert.pem /config/auth/cl1.pem mv newkey.pem /config/auth/cl1.key -------------- Step 5: 디피 헬만 파라미터 파일을 생성합니다. `맨위로 가기 <#top>`__ -------------- *Note: /usr/lib/ssl/misc/ 디렉토리에서 루트 권한 ("sudo su")으로 진입하여 로그인 한 상황이어야 합니다.* **1. 디피 헬만 파일 생성하기** :: openssl dhparam -out /config/auth/dhp.pem -2 1024 /config/auth/ 에 dhp.pem 파일을 생성하며 이 과정은 시간이 소요됩니다. -------------- Step 6: 각 클라이언트에 파일을 전송합니다. `맨위로 가기 <#top>`__ -------------- 이 과정은 원격 라우터가 ssh 연결을 받아 들일 수 있다고 가정합니다. (인터넷에서 22번 포트로 입력을 받을 수 있다고 가정합니다.) **1. 클라이언트 라우터에 cacert.pem 파일을 복사합니다.** :: sudo scp /config/auth/cacert.pem user@system2.dyndns.com:/config/auth/ **2. 클라이언트 라우터에 cl1.pem 파일을 복사합니다.** :: sudo scp /config/auth/cl1.pem user@system2.dyndns.com:/config/auth/ **3. 클라이언트 라우터에 cl1.key 파일을 복사합니다.** :: sudo scp /config/auth/cl1.key user@system2.dyndns.com:/config/auth/ *Note: cacert.pem, cl1.pem, cl1.key 파일을 라우터의 /config/auth/ 로 이동합니다.* **4. 각 클라이언트마다 반복하여 수행합니다.** -------------- Step 7: 키파일에서 패스워드를 삭제합니다. `맨위로 가기 <#top>`__ -------------- **Router1:** **1. 루트 사용자 권한으로 진입합니다.** :: sudo su **2. 패스워드 없이 .key 파일을 생성합니다.** :: openssl rsa -in /config/auth/server.key -out /config/auth/server-rmpass.key 패스워드를 입력합니다. **3. server-rmpass.key 파일을 server.key로 이름 변경합니다.** :: mv /config/auth/server-rmpass.key /config/auth/server.key  **Router2:** **1. 루트 사용자 권한으로 진입합니다.** :: sudo su  **2. 패스워드 없이 .key 파일을 생성합니다.** .. raw:: html
:: openssl rsa -in /config/auth/cl1.key -out /config/auth/cl1-rmpass.key  .. raw:: html
패스워드를 입력합니다. **2. cl1-rmpass.key 파일을 cl1.key로 이름을 변경합니다.** :: mv /config/auth/cl1-rmpass.key /config/auth/cl1.key  -------------- Step 8: Router1에 OpenVPN 서버를 설정합니다. `맨위로 가기 <#top>`__ -------------- **1. "exit" 명령어를 입력하여 관리자 권한을 탈출하고 user@Router1으로 다시 로그인합니다.** **2. 환경설정 모드로 진입합니다.** :: configure  **3. 인터페이스를 생성합니다** :: set interfaces openvpn vtun0  **4. vtun0 인터페이스의 수정 모드로 진입합니다.** :: edit interfaces openvpn vtun0  **5. OpenVPN 모드를 설정합니다.** :: set mode server  **6. 해시 값을 설정합니다.** :: set hash sha256  **7. 압축 옵션을 설정합니다.** :: set openvpn-option —comp-lzo  **8. 서버 서브넷을 설정합니다.** :: set server subnet 10.99.99.0/24  **9. 접근 가능한 서브넷을 설정합니다.** :: set server push-route 192.168.1.0/24  **10. TLS 파일의 위치를 설정합니다.** :: set tls ca-cert-file /config/auth/cacert.pem set tls cert-file /config/auth/server.pem set tls key-file /config/auth/server.key set tls dh-file /config/auth/dhp.pem  **11. 클라이언트의 고정 주소를 세팅합니다.** :: set server client ip 10.99.99.2 commit save  *Note: 서버 서브넷은 로컬 서브넷과 다른 값이어야합니다.* *서버 세팅을 push-route 작업을 각 LAN에 터널을 통해 접근 가능하도록 반복합니다.* * 는 고정 퍼블릭 IP, 호스트 이름이어야 합니다.* -------------- Step 9: 클라이언트 설정하기 `맨위로 가기 <#top>`__ -------------- **다른 EdgeRouter에서 클라리언트가 존재하지만, 다른 장비가 클라이언트가 될 수 있습니다.** **user@Router2 로그인합니다.** :: user@Router2  **1. 인터페이스를 생성합니다.** :: set interfaces openvpn vtun0  **2. vtun0 인터페이스의 수정 모드에 진입합니다.** :: edit interfaces openvpn vtun0  **3. OpenVPN 모드를 설정합니다.** :: set mode client  **4. 해시 값을 설정합니다.** :: set hash sha256  **5. 압축 옵션을 설정합니다.** :: set openvpn-option —comp-lzo  **6. OpenVPN 서버의 주소를 설정합니다.** :: set remote-host   **7. TLS 파일의 위치를 설정합니다.** :: set tls ca-cert-file /config/auth/cacert.pem set tls cert-file /config/auth/cl1.pem set tls key-file /config/auth/cl1.key commit save  -------------- Step 10: 방화벽 설정하기 `맨위로 가기 <#top>`__ -------------- **1. Router 1과 Router 2에 UDP 포트 1194를 개방합니다.** :: edit firewall name WAN_LOCAL rule <#> set description OpenVPN set action accept set destination port 1194 set log disable set protocol udp  *Note: 룰 넘버는 WAN\_LOCAL 룰셋에서 사용하지 않는 넘버로 지정해야합니다.*  -------------- Step 11: (적용 가능하다면) 다중 WAN (MultiWAN) 설정하기 `맨위로 가기 <#top>`__ -------------- 이 단계는 다중 WAN 인터페이스가 OpenVPN 터널에 사용된다면 필요합니다. 다음을 확인하세요. \ `정책 기반 라우팅 가이드 `__. -------------- Step 12: 터널이 정상 동작하는지 검증하기 `맨위로 가기 <#top>`__ -------------- **1. 터널이 정상 동작하는지 검증합니다. 활성화된 터널은 연결에 1분정도가 소요되며, 변경사항이 커밋되면 확인할 수 있습니다.** **a. OpenVPN 서버가 설정된 라우터** :: show openvpn status server  **b. OpenVPN 클라이언트가 설정된 라우터** :: show openvpn status client    -------------- 트러블 슈팅 -------------- `맨위로 가기 <#top>`__ **openvpn 환경설정 확인하기** :: configure show interfaces openvpn vtunX    **tcpdump를 사용하여 터널의 트래픽 확인하기** **운용모드 CLI 에서 사용하기** :: sudo tcpdump -i vtunX  *Note: 예제에서는 vtun0을 대상으로 수행하였습니다.*  관련 문서 ---------------- .. raw:: html
-------------- .. raw:: html
- `SSH로 커넥션을 생성하는 방법 `__