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


예제 환경

Steps to Follow

  1. 인증 자격 증명을 생성하기
  2. 서버 자격 증명과 키 생성하기
  3. 파일 옮기기 및 이름 재정의
  4. 클라이언트를 위한 자격 증명과 키 값 만들기
  5. 디피-헬만 파라미터 파일 생성하기
  6. 각 클라이언트에 파일 전송하기
  7. 키파일에서 패스워드 제거하기
  8. Router1의 OpenVPN 서버 설정하기
  9. 클라이언트 설정하기
  10. 방화벽 설정하기
  11. 다중 WAN (MultiWAN) 설정하기
  12. 터널 동작 검증하기

트러블 슈팅


  예제 환경


맨위로 가기

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: 인증 자격 증명 생성하기

맨위로 가기

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: 서버 자격증명과 키를 생성합니다.

맨위로 가기


 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: 파일을 옮기고 이름을 재정의합니다.

맨위로 가기


/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: 클라이언트 자격 증명과 키를 생성합니다.

맨위로 가기


 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: 디피 헬만 파라미터 파일을 생성합니다.

맨위로 가기


Note: /usr/lib/ssl/misc/ 디렉토리에서 루트 권한 ("sudo su")으로 진입하여 로그인 한 상황이어야 합니다.

1. 디피 헬만 파일 생성하기

openssl dhparam -out /config/auth/dhp.pem -2 1024

/config/auth/ 에 dhp.pem 파일을 생성하며 이 과정은 시간이 소요됩니다.


Step 6: 각 클라이언트에 파일을 전송합니다.

맨위로 가기


이 과정은 원격 라우터가 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: 키파일에서 패스워드를 삭제합니다.

맨위로 가기


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 파일을 생성합니다.

openssl rsa -in /config/auth/cl1.key -out /config/auth/cl1-rmpass.key

패스워드를 입력합니다.

2. cl1-rmpass.key 파일을 cl1.key로 이름을 변경합니다.

mv /config/auth/cl1-rmpass.key /config/auth/cl1.key

Step 8: Router1에 OpenVPN 서버를 설정합니다.

맨위로 가기


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 <clienthostname> ip 10.99.99.2
commit
save

Note: 서버 서브넷은 로컬 서브넷과 다른 값이어야합니다.

서버 세팅을 push-route 작업을 각 LAN에 터널을 통해 접근 가능하도록 반복합니다.

<clienthostname> 는 고정 퍼블릭 IP, 호스트 이름이어야 합니다.


Step 9: 클라이언트 설정하기

맨위로 가기


다른 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 <hostname or public IP of Router1>

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: 방화벽 설정하기

맨위로 가기


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) 설정하기

맨위로 가기


이 단계는 다중 WAN 인터페이스가 OpenVPN 터널에 사용된다면 필요합니다. 다음을 확인하세요. 정책 기반 라우팅 가이드.


Step 12: 터널이 정상 동작하는지 검증하기

맨위로 가기


1. 터널이 정상 동작하는지 검증합니다. 활성화된 터널은 연결에 1분정도가 소요되며, 변경사항이 커밋되면 확인할 수 있습니다.

a. OpenVPN 서버가 설정된 라우터

show openvpn status server

b. OpenVPN 클라이언트가 설정된 라우터

show openvpn status client

트러블 슈팅


맨위로 가기

openvpn 환경설정 확인하기

configure
show interfaces openvpn vtunX

tcpdump를 사용하여 터널의 트래픽 확인하기

운용모드 CLI 에서 사용하기

sudo tcpdump -i vtunX

Note: 예제에서는 vtun0을 대상으로 수행하였습니다.