Asus RT-AC68U OpenVPN 서버 설정

Asus RT-AC68U에서 OpenVPN 서버를 설정하는 방법에 관해 설명한다. 이에 관해 잘 아는 것은 아니지만 의외로 국내 자료를 찾지 못해 정리해 본다. 참고로 정식 펌웨어에서는 PPTP만을 지원한다. 멀린(Merlin) 펌웨어에는 OpenVPN이 기본으로 포함되어 있으며 여기서는 이를 사용하는 것을 전제로 한다. 멀린 펌웨어는 여기서 받을 수 있다.

먼저 DDNS를 설정해 둔다. DDNS는 IP 주소가 바뀌어도 도메인 정보를 이용해 접속할 수 있도록 해 주는 서비스이다. WAN 메뉴에서 DDNS 탭을 선택하고, DDNS 클라이언트 사용을 선택한 후 호스트 이름도 입력한 다음 적용한다.

DDNS 설정

DDNS 설정

#1 짧고 간단한 방법

이것저것 신경쓰지 않고 간단히 설정하려면 이 방법을 따른다.

  1. 공유기 웹 화면 접속 후 VPN 메뉴 선택 -> VPN 서버 탭을 선택한다.
  2. VPN 서버 종류를 OpenVPN으로 선택 후 Server 1을 선택한다. 참고로 멀린 펌웨어에서는 OpenVPN 서버를 2개 지원한다.
  3. VPN 서버 활성화를 ON으로 선택한다.
VPN 서버설정

VPN 서버설정

VPN Status 탭에서 OpenVPN Server 1이 Running 상태이면 정상이다. OpenVPN 구성 파일 내보내기로 받은 ovpn 파일은 클라이언트에서 VPN 서버에 접속할 때 사용한다. 그 외 자세한 내용은 VPN 서버 탭에 있는, 각 운영 체제와 모바일 기기별 설정 방법을 참조한다.

#2 다소 길고 복잡한 방법

인증서를 직접 생성하거나 서명한 인증서를  등록하려면 이 방법을 따른다. 여기서는 인증서를 직접 생성 후 등록하는 법을 설명하므로 서명한 인증서를 등록하려면 생성 과정만 건너뛰면 된다. 참고로 윈도우즈를 기본으로 설명한다.

사용하는 O/S 환경에 맞는 OpenVPN 설치 파일을 받아 설치한다. 파일은 여기에서 받을 수 있다. 클라이언트와 RSA 인증 관리 스크립트만 필요하므로 설치할 내용에 OpenVPN Service와 Add OpenVPN to PATH 항목은 선택하지 않아도 된다. 다만 OpenVPN RSA Certificate Management Scripts는 꼭 있어야 한다. 키 생성은 다음 과정을 따른다.

  1. 명령 프롬프트를 열고 OpenVPN 설치 디렉터리 아래에 있는 easy-rsa 디렉터리로 이동한다.
  2. easy-rsa 디렉터리에서 init-config를 입력후 엔터를 입력한다. 이렇게 하면 vars.sample 파일을 vars.bat 파일로 복사한다.
  3. vars.bat 파일을 텍스트 편집기로 열고 다음 내용을 적절히 바꾼 후 저장하고 편집기를 종료한다.
    set KEY_COUNTRY=US
    set KEY_PROVINCE=CA
    set KEY_CITY=SanFrancisco
    set KEY_ORG=OpenVPN
    set [email protected]
  4. 명령 프롬프트에서 varsclean-all을 차례로 실행한다. vars를 실행할 때 표시하는 openssl.cnt 파일을 열 수 없다는 메시지는 무시해도 된다clean-all을 실행하면 ‘지정한 파일을 찾을 수 없다’는 메시지를 표시하지만 무시해도 된다.
  5. 명령 프롬프트에서 build-ca를 실행한다. 앞에서 입력한 값이 이미 기본으로 입력되어 있으므로 엔터만 입력하면 되지만 Common Name에는 인증 기관을 식별할 수 있는 이름으로 적절히 입력해 주는 게 좋다. 이 과정을 마치면 easy-rsa\keys 디렉터리에 ca.crt와 ca.key 파일이 생긴다.
  6. 명령 프롬프트에서 build-key-server server1을 입력한다. 마지막에 있는 server1은 다른 이름으로 바꿀 수 있는데 만약 server라고만 입력한다면 이후에 묻는 Common Name 항목에도 server라고 입력해야 한다. Common Name을 제외한 나머지는 기본 값을 사용하면 된다. Sign the certificate와 commit에 대한 물음에는 y를 입력한다.
  7. 각 클라이언트에서 사용할 키는 명령 프롬프트에서 build-key client1을 입력해 만든다. client1은 예를 들면 my-laptop 등으로 바꿀 수 있지만 이때도 Common Name 항목에는 동일하게 입력해야 한다. 마찬가지로 Sign the certificate와 commit에 대한 물음에는 y를 입력한다.
    참고로 여기서는 클라이언트별로 키를 다르게 사용하지 않으며, 간단한 방법에서 본 것처럼 OpenVPN 구성 파일을 받아 모든 클라이언트에서 공통으로 사용하므로 client1으로 하나만 만든다.
  8. 명령 프롬프트에서 build-dh를 입력해 Diffie Hellman 매개변수를 생성한다. 이는 암호화에 필요하다. 실행하면 easy-rsa\keys 디렉터리에 dh1024.pem 파일이 생긴다.

VPN 메뉴 -> VPN 세부 사항을 다음처럼 설정한다.

VPN 세부 사항 1

VPN 세부 사항 1

VPN 세부 사항 2

VPN 세부 사항 2

권한 부여 모드 항목에서 Content modification of keys & Certificates를 선택하면 키 입력 창이 뜨며 각 항목에는 아래처럼 해당 파일에서 복사해 입력한다. 단, 내용을 입력할 때는 -----BEGIN CERTIFICATE----------END CERTIFICATE-----와 같은, 시작과 끝을 표시하는 내용을 포함해야 한다.

  • 인증 권한(Certificate Authority): ca.crt
  • 서버 인증(Server Certificate): server1.crt
  • 서버 키(Server Key): server1.key
  • Diffie Hellman 매개변수(Diffie Hellman parameters): dh1024.pem

이제 VPN 서버 탭에서 OpenVPN과 Server1을 선택하고, VPN 서버 활성화를 ON으로 한다. 나머지 클라이언트 설정은 짧고 간단한 방법을 참조한다. 다만 계정 인증을 사용하므로 계정을 추가해야 하는데, 이는 VPN 서버 탭에서 하면 된다.

과정을 모두 마치면 공유기 내 PC와 VPN에 접속한 클라이언트 사이에 RDP, 네트워크 파일 및 디렉터리 공유 등을 사용할 수 있다. 단, 방화벽에서 차단할 수 있으니 연결되지 않을 때는 이를 확인하도록 한다.

# 참고1: TCP와 UDP

VPN 프로토콜로 TCP와 UDP를 선택할 수 있으며 각 장단점에 관해서는 다음 내용을 참조한다.

TCP VPN Vs. UDP VPN: Which one is better?

위 글에 추가로 TCP는 매우 비효율적이므로 꼭 선택해야 하는 상황이거나 UDP를 쓸 때 문제가 있는 것이 아니라면 전적으로 UDP를 선택하는 게 좋다고 한다.

# 참고2: TUN과 TAP

VPN 인터페이스로 TUN과 TAP를 선택할 수 있으며 각각에 대해서는 다음 내용을 참조한다. 간단히 정리하면 TAP는 VPN 클라이언트 역시 동일한 LAN 환경에 있는 것처럼 표시하고 연결해 주지만 네트워크 부하가 더 생긴다. TUN은 기본적으로 네트워크를 서로 분리하므로 각 클라이언트가 서로를 접근하려면 추가 설정이 필요하다. 다른 네트워크에 있는 클라이언트는 직접 볼 수 없으며 IP로 접근할 수 있다.

OpenVPN Wiki: Bridging and Routing

 # 참고3: 기본 서버 포트

OpenVPN에서 사용하는 포트는 1194가 기본이다. 하지만 보안성을 높이고 차단을 회피하기 위해 TCP라면 443으로 변경하는 것을 권하기도 한다.

 

Notes:
1. 하지만 Asus 공유기라면 다른 제품도 큰 차이 없으리라 생각한다.
2. 해당 공유기 사용자 모임에서는 찾을 수 있을 듯하지만 거기까지 찾아 보진 않았다
3. 이 파일만 있으면 되며 그외 키 파일은 필요 없다.
4. 관리자 권한으로 여는 것이 가장 안전하다.
5. 명령 프롬프트는 또 사용하므로 계속 열어 두자.
6. 이후도 마찬가지.
7. 원격 데스크톱 프로토콜
8. HTTPS에서 사용
하지만 Asus 공유기라면 다른 제품도 큰 차이 없으리라 생각한다.
해당 공유기 사용자 모임에서는 찾을 수 있을 듯하지만 거기까지 찾아 보진 않았다
이 파일만 있으면 되며 그외 키 파일은 필요 없다.
관리자 권한으로 여는 것이 가장 안전하다.
명령 프롬프트는 또 사용하므로 계속 열어 두자.
이후도 마찬가지.
원격 데스크톱 프로토콜
HTTPS에서 사용
  • blm

    글 잘 보았습니다.
    다만 저는 위의 세부설정을 따라해도 안드로이드에서 되질않네요.
    연결은 됬다고 떠도 ip에 변화가 없고, 발신 시간, 수신 항목이 공백상태입니다.
    혹시 해결방법을 아시는지요?

    • 폰에서 접속할 때 주의할 점은 VPN으로 접속할 공유기에 와이파이 접속을 한 상태여서는 안 됩니다.

      집 안에서 시험해 보는 것이라면 ovpn 파일을 사용해 안드로이드용 OpenVPN 클라이언트에 프로파일을 등록한 후, 3G/LTE 상태에서 접속하면 그 외에 안 될 만한 부분은 없어 보입니다. 아이폰에서 정상적으로 IP 얻고 접속하는 것은 확인했습니다.

      이미 확인했으리라 생각하지만 ASUS에서 제공하는 도움말도 참고해 보시길 바랍니다. 링크는 다음과 같습니다.
      http://bit.ly/1B0Ooln