Vpnc/ko

이 문서는 연결 관리 프로그램 vpnc를 활용하여 시스코 VPN 집중화 장비에 워크스테이션을 연결하는 방법을 자세히 다룹니다.

도입부
이 글을 읽는다면 가정에서나 여행중이든 사무실 네트워크망에 연결해야 할 경우일겁니다. 대부분의 회사에서는 Cisco 3000 VPN 집중화 장비를 VPN 기능이 필요한 곳에 활용하고 있고, 대부분의 리눅스 생초보가 윈도우를 사용하도록 강요 받으리라 생각합니다. 글쎄요. 이 문서는 시스코 VPN 장비에 연결하는 방법을 정말 가능하게, 젠투 워크스테이션 내지는 랩톱에서 터널링을 충분히 동작하게끔 하는 방법을 안내합니다.

이 문서에서 취급하는 내용

 * 기본 동작 안내
 * VPN에 관련된 DNS 및 라우팅 문제 논의
 * VPN 세션 관리 예제
 * 쓸모 있는 (기대되는) 요령

이 문서에서 취급하지 않는 내용

 * VPN/암호화 기술 심층 안내
 * 에 대한 기능별 설명

가정
여기서 가정할 사항은:


 * 젠투를 설치했음
 * 인터넷에 연결했음
 * Cisco 3000 VPN 집중화 장비에 연결했음
 * 새 커널을 설정, 빌드, 설치하는 방법을 이미 알고 있음

커널 설정
리눅스에서 VPN 연결을 개방할 수 있으려면 커널에서 Universal TUN/TAP device driver support 항목을 활성화해야합니다. 이게 뭐고 왜 필요할까요? 아래에 커널 설정 상자에서 비교적 간단한 설명을 보여드리겠습니다:

다음 명령을 활용하면 커널에서 TUN/TAP을 지원하는지 확인할 수 있습니다:

위에서 보신 바와 같이  설정을 통해 모듈로 컴파일합니다. 설정에서 비활성화했다면 커널 항목 선택에서 활성화하고, 다시 빌드하고, 설치하고, 다시 부팅한 후 다음 단계로 넘어가기 전에 여기로 다시 돌아오십시오.

TUN/TAP 기능을 커널에서 바로 지원하도록 빌드했다면, 다음과 같이 출력에서 내용을 살펴볼 수 있습니다.

TUN/TAP 지원 기능을 모듈로 빌드했다면,  모듈을 먼저 불러와야합니다:

이제 모듈을 불러왔으니  출력을 확인해보겠습니다. 다음과 같은 내용을 볼 수 있어야합니다:

필요 프로그램 설치
이제 커널 설정을 동작하게 했으니, 를 설치해야합니다:

지원하는 여러 USE 플래그를 확인하시고 환경에 제대로 적용했는지 살펴보십시오. 다음 오류로 나중에 몇가지 문제가 생긴다면 hybrid-auth USE 플래그를 활성화해야합니다:

예제 설정
다음 부분 진행을 좀더 매끄럽게 하려면, 동작하는 환겨에 대한 설정 예제가 필요합니다. 여기 예시를 보여드리기 위해 여러 대의 컴퓨터를 보유했다고 가정합니다. 모든 컴퓨터는 192.168.0.0 / 255.255.255.0 네트워크에 있습니다. 궁금해할 법한 LAN 환경은 iptables 방화벽, DHCP, 캐싱 DNS, 등을 활용하는 젠투 박스로 동작하며, ISP에서 제공하는 공용 IP 주소 너머로 LAN에 매스커레이딩합니다. 사무실에서 VPN을 가동하게 하고 싶은 LAN에 워크스테이션도 있습니다.

예제에서 워크스테이션 설정은 다음과 같습니다:

vpnc 설정
이제 를 설치했고 동작하는 예제를 적용했으니   설정 방법의 기초를 다루어보겠습니다. 설정 파일은 설정할 프로파일을 얼마나 두느냐에 따라 몇 군데에 놓을 수 있습니다. 기본적으로 는 에서 연결 설정을 찾습니다. 파일이 없으면 에서 찾습니다. 이 설정은 단일 프로파일 예제를 다루며 설정 파일 위치를 활용합니다. 파일이 없는 지 확인하십시오.

위에서 보여드린 설정 파일 예제를 여러분이 진행하는 설정 과정에서 적당한 값으로 바꾸어야합니다. 게이트웨이 옵션은 완전한 도메인 이름 또는 IP 주소가 될 수 있습니다. ID와 비밀 옵션은 네트워크 관리자가 제공해야합니다. 만약 이 정보를 제공받을 수 없지만 공식 시스코 VPN 클라이언트를 활용하는 윈도우 머신에서 설정을 보유하고 있다면 해당 프로파일을 내보내기만 하면 됩니다. 사용자 이름 및 암호 옵션은 윈도우 NT 도메인 계정처럼 일반 네트워크 접속에 활용합니다.

윈도우 머신에서 프로파일을 끌어냈다면, 란 파일이 나왔을 겁니다. 이 파일은 필요한 모든 정보가 들어있습니다. 아래는 내용의 예제입니다:

위 예제에서 ,  ,   항목을 볼 수 있습니다. 및  는 설정에 따라 가져오거나 아니면 가져오지 않을 수도 있습니다. 동작하는 vpnc 설정을 만들려면 vpnc를 넣은 를 활용할 수 있습니다.

설정 시험
이제 제 위치에 설정을 저장했으니 설정을 시험해 볼 차례입니다. 를 시작하려면 다음을 따르십시오:

명령 출력에서 보시는 바와 같이 (루트 계정으로)  를 실행하면 암호를 물어봅니다. 암호를 입력하고 나면, 입력한 암호가 나타나지 않는데  프로세스는 자동으로 백그라운드 프로세스로 전환합니다.

위의 명령 출력에서 보신 바와 같이 에서 다음의 역할을 처리했습니다:


 * VPN 터널을 통하는 트래픽을 처리하는 가상 tun0 네트워크 인터페이스를 만듬
 * VPN 제공자로부터 tun0 장치의 IP 주소를 가져옴
 * VPN 게이트웨이에 기본 라우팅 정보를 설정

여기서, 워크스테이션은 VPN으로 호스트간 통신을 수행할 수 있습니다. 가 VPN 게이트웨이의 기본 경로를 설정하기 때문에, 추가 경로로 인터넷이나 다른 곳을 따로 지정하지 않아도, 모든 네트워크 트래픽은 VPN을 거쳐 돕니다. 어떤 경우에는 연결 기본 형식으로 충분하겠지만 대부분의 경우 추가 과정이 필요합니다.

붙여볼만한 추가 기능은:


 * VPN용 DNS
 * VPN 가상 터널 아래로만 트래픽을 거쳐가게 하는 경로 설정. 이 방법을 쓰면 VPN에 연결한 상태에서도 개인용 웹/p2p 등을 활용하지 않고 인터넷을 탐색할 수 있습니다. 트래픽은 터널을 거칩니다.
 * 가 기본적으로 원하는 작업을 충분히 수행하지 않으므로, 이 모두를 관리하는 스크립트

VPN 세션을 끝낼 준비가 되었다면 를 실행하십시오. 예제는 아래에 있습니다.

DNS 설정
불행하게도  에서는 새로 구축한 터널의 DNS를 설정하거나 관리할 수 없습니다. 사용자는 DNS를 처리하는 방법을 결정할 수 없습니다. 연결할 때 트래픽이 VPN 터널을 거쳐가는지 여부는 상관 없이 모든 DNS 요청에 대한 VPN DNS를 활용하는 를 덮어쓸 수 있습니다. 이 방식은 매우 기능적인 해결책이며 터널 연결만 필요하다면, 직접 처리하고, 끊은 다음, 더 이상의 내용은 읽지 마십시오. 허나, 상당히 긴 시간동안 터널에 연결한 채로 둘 수 있도록 하고 싶고, 개별 드래픽에 대한 요청을 처리하도록 DNS 서버를 동작하게 하겠다면, 계속 읽어내려하십시오.

이상적인 설정은 DNS 설정을 VPN 관련, 기타 두가지로 분류할 수 있게 합니다. 이 설정 과정에서 VPN 관련 DNS 요청은 VPN 터널의 반대편 종단에 있는 DNS 서버에서 응답하며 기타 모든 요청은 로컬 또는 ISP에 있는 DNS 서버에서 계속 응답합니다. 이는 곧, 여기서 시연할 설정입니다.

그래서, 어떻게 설정해서 example.org의 호스트의 요청만 DNS 서버가 있는 VPN으로 보낼까요? 글쎄 말입니다. 로컬 DNS 서버를 설치해야 하겠지만 생각보다 꽤 쉬우니까 걱정하지 않으셔도 됩니다. 우리가 원하는 방식의 설정을 처리할 수 있는 프로그램 꾸러미는 상당히 많지만, 시연 의도를 맞추기 위해 를 활용하겠습니다. 이머지 해보죠:

이제 를 시작 옵션에 추가해야합니다. 다음 옵션을 요구에 맞춰 편집하십시오. .example.org 대신 적당한 도메인과 VPN 터널에 붙은 유효한 DNS 서버 IP 주소로 바꾸십시오.

다음, 에 있는 처음 항목이 localhost, 인지, 그 다음 항목은 dmsmasq 시작에 실패했을 때 DNS 트래픽을 다뤄야 할 백업 DNS 서버의 위치가 따라는지 확인하십시오. 확인하지 않으면 DNS 요청을 포워딩해야 할 때 현재 캐시에 없습니다. 예제를 아래에 보여드립니다.

이제 VPN 터널 DNS 규칙을 설정했으니 를 시작해야합니다.

라우팅 테이블 설정
VPN 터널만을 거쳐가는 트래픽이 링크를 거쳐가는 이상적인 가정을 해보겠습니다. 여기서 VPN 터널을 설정했으며, 추가 경로를 지정하기 전 모든 트래픽은 터널을 거쳐갑니다. 이 문제를 바로 잡으려면 VPN에서 어떤 네트워크를 활용할 수 있는지 알아야합니다. 필요한 정보를 찾는 쉬운 방법은 네트워크 관리자에게 물어보는 방법이지만 때로는 일부 질문에 답변하기를 주저하기도 합니다. 로컬 네트워크 관리자가 필요한 정보를 알려주지 않으면, 몇가지를 시도해보고 오류를 찾아봐야 합니다.

VPN 터널을 시작했다면 에서 터널에 기본 라우팅 정보를 설정합니다. 따라서 일반 기본 라우팅 설정으로 되돌려 기대대로 돌아가게 해야 합니다.

이전에 VPN의 DNS 서비스를 설정했다면, example.org 도메인을 처리할 DNS 서버를 지정했습니다. 여기에 192.168.125.0 서브넷에 대한 라우팅 규칙을 추가하여 DNS 요청이 동작하게 해야합니다.

여기서, 일려진 네트워크(이를 테면, 192.168.160.0 서브넷의 경우, TUN/TAP 가상 장치에서 받은 IP 주소가 있음)의 추가 라우팅 설정을 추가해야합니다. 친한 네트워크 관리자가 필요한 정보를 줬다면, 그걸로 대박입니다. 안줬다면 자주 연력할 호스트에 ping 명령을 실행하여 라우팅 테이블을 어떻게 갖춰야 할 지 생각해내야합니다.

위 예제에서 보신 바와 같이 ping은   설정이 제대로 안되어 있음을 보여줍니다. 따라서 서브넷에 라우팅 설정을 추가해야합니다.

몇가지 및  명령을 처리하고 나면, 여러분의 방식대로 제대로 동작하는 라우팅 테이블을 갖춰져 있어야합니다.

필요할 때 vpnc 호출
다음은 VPN 연결을 관리하는 예제 스크립트입니다. VPN을 시작할 때 (루트 권한으로) xterm에서 실행할 수 있습니다. 그 다음 VPN을 끊을 때 키만 누르면 됩니다. 분명히 여러분은 설정을 바꿔야 할테니 여러분이 필요한 부가 경로 추가 설정을 기억해두십시오.

부팅할 때 vpnc 시작하기
vpnc 0.4.0-r1에는 다중 설정을 처리하는 초기화 스크립트 파일이 있습니다. 기본 스크립트는  파일을 찾지만 대부분의 설정에서는 가능한 생각만큼 많은 설정을 보유합니다. 서비스를 내리고 시작하기 전에 별도로 만든 스크립트는 각각의 초기화 스크립트(0.5.1-r1 부터)의 이름과 연동하여 실행할 수 있습니다. 이름은,  ,  , 로 끝나며,   디렉터리에 들어있습니다. 일반 이름 형식은 다음 표에 적어두었습니다.

다음 명령으로 vpnc를 기본 런레벨에 추가하십시오(이 경우 표준 설정에 한합니다). 시작시 커널 모듈 자동 적재 기반에 (모듈 기반으로 빌드했을 경우) tun 모듈의 추가를 잊지 마십시오.

설정 파일에 암호를 저장하기 싫다면, 파일을 편집하여 초기화 스크립트에 표준 출력으로 모든 출력을 보여주게 할 수 있습니다. 변수 값을 화면 출력을 기본으로 표시할 지 말 지 yes 또는 no 값을 설정하십시오.

그래픽 원격 접근
RDP (Remote Desktop Protocol) 를 지원하는 리눅스 프로그램을 찾는다면 를 사용해보십시오. GTK+로 작성한 GUI 앱이며 그놈 데스크톱에 어울리지만 꼭 필요하진 않습니다. grdesktop에서 제공하는 GUI 설정 대화상자가 필요없다면  만 설치하십시오. 그러니까, grdesktop은 rdesktop의 프론트엔드일 뿐입니다.

KDE 사용자라면 를 사용해보시면 좋겠습니다. 멋진 VPN 관리 GUI를 나타냅니다.

DNS 항목을 설정하지 않은 윈도우 머신에 연결해야 하고 WINS 서버의 주소를 안다면 머신의 호스트 이름으로 WINS 서버를 요청하는  도구를 사용할 수 있습니다. 불행하게도 이 도구를 이용하려면 를 설치행해야하지만, 윈도우를 실행하는 장치와 동작하게 한다면 마찬가지로 여러가지 기타 쓸만한 도구가 있기 때문에 삼바를 설치하는게 좋습니다.

삼바 및 관련 도구를 설치했다면 wintelbox1 호스트에 대해 192.168.125.11 IP 주소의 WINS 서버를 요청하여 을 시험해보십시오.

부팅시 활용하는 개별 정의 스크립트
파일에 개별적으로 만든 스크립트는 사용자가 vpnc 연결에 지정한 라우팅을 설정하는데 사용할 수 있습니다. 아래 예제에서는 라우팅 테이블을 설정하는 방법을 보여드려 123.234.x.x IP로의 연결만 VPN을 통하고 나머지 연결은 기본 게이트웨이를 거쳐가도록 합니다. 예제에서는 vpnc를 시작하기 전 현재 기본 게이트웨이를 보존하기 위해 work-preup.sh를, 새 기본 게이트웨이를 삭제하고 이전 기본 게이트웨이를 복원하며 vpnc 연결을 활용하여 모든 연결을 123.234.x.x로 라우팅하는 를 사용합니다.

예제 스크립트에서는 vpnc 를 연결할 때 tun1을 tun 장치로 활용한다고 가정합니다. 연결 설정 파일에서 장치 이름을 설정할 수 있습니다.

External resources

 * vpnc homepage
 * kvpnc homepage
 * grdesktop homepage