메인 컨텐츠로 가기

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

GNU 가상 사설 이더넷

Martin Brown, 자유기고가, IT 컨설턴트/프리랜서 작가
Martin Brown은 8년 넘게 기술 필자로 활약해왔다. Brown은 다양한 주제를 다루는 수 많은 책을 집필했고 기사를 작성했다. Brown은 펄, 파이썬, 자바(Java™), 자바스크립트, 베이직, 파스칼, 모듈라-2, C, C++, 레볼, gawk, 셸 스크립트, 윈도우(Windows®), 솔라리스, 리눅스, BeOS, 맥 OS X을 비롯하여 웹 프로그래밍, 시스템 관리, 통합에 이르리까지 다양한 개발 언어와 플랫폼을 경험했다. Brown은 마이크로소프트(Microsoft®) SME(Subject Matter Expert)이며 ServerWatch.com, LinuxToday.com, IBM developerWorks에 주기적으로 기고한다. Brown은 또한 컴퓨터월드, 애플 블로그, 기타 사이트에 주기적으로 블로그 기사를 올린다. 연락 주소는 Brown이 운영하는 웹 사이트를 참조하기 바란다.

요약:  보안 통신 콘딧을 제공할 때는 다양한 정보 스트림을 처리할 수 있는 효과적인 통신 채널 제공 방법과 같은 여러 가지 해결 과제와 문제점이 수반된다. GVPE(GNU 가상 사설 이더넷)를 사용하면 전체 네트워크 스택을 효과적으로 에뮬레이트하고 가상 환경을 토대로 TCP, UDP 및 기타 네트워크 기술을 빌드할 수 있으므로 일반적인 단일 또는 다중 채널 솔루션의 대안이 된다. 이 기사에서는 애플리케이션에서 GVPE를 사용하여 통신을 제공하고 웹 사이트에서 GVPE를 사용하여 사설 및 공용 네트워크를 통해 보안 연결을 제공하는 방법을 살펴본다. 특히, Amazon EC2, 클라우드 또는 공용/사설 웹 성능 배치와 같은 분산형 인프라 프로젝트에서의 GVPE 사용에 관해 알아보자.

기사 게재일:  2011 년 9 월 27 일
난이도: 중급 원문:  보기 PDF:  A4 and Letter (74KB | 15 pages)Get Adobe® Reader®
페이지뷰:  992 회
의견:  


일반적인 가상 사설 네트워크 솔루션

대부분의 일반적인 VPN 솔루션은 단일 연결을 지원하는 방식으로 작동한다. 그 연결은 데스크탑 컴퓨터에서 사무실까지의 연결일 수 있으며, 그럴 경우 TCP 및/또는 UDP 기반 통신과 같은 일부 전송 프로토콜만 지원하도록 제한될 수 있다.

단일 연결이나 네트워크 및 라우팅된 연결을 지원하는 것은 괜찮지만, 시스템에 호스트 및/또는 네트워크를 더 추가하려고 하면 시스템이 더 복잡해진다. 예를 들어, 여러 호스트와 네트워크를 범위로 하고 다른 기본 프로토콜을 통해 통신을 제공하는 VPN 솔루션을 제공하기가 복잡한데다 자원도 부족할 수 있다.

이에 대한 간단한 예를 그림 1에서 볼 수 있다. 일반적인 VPN 솔루션을 사용할 때, VPN Client 1과 VPN Client 2 간의 라우팅은 VPN Host를 통해 모든 네트워크 트래픽을 라우팅해야만 가능하다. 특히 개별 호스트가 모두 동일한 네트워크 상에 있거나 인터넷과 같은 공용 인터페이스를 통해 통신 중인 경우 이와 같은 방법은 많은 비용이 든다.


그림 1. 일반적인 VPN 솔루션
일반적인 VPN 솔루션을 보여주는 그림

사용하려는 애플리케이션이 TCP 또는 UDP 기반인 경우 프로토콜 한계는 괜찮다. 회사 인트라넷(HTTP)이나 메일 서비스(IMAP, SMTP)에 액세스해야 하는 상황에서는 이런 제한사항이 문제가 되지 않는다. 그러나 VPN 솔루션 내에서는 라우팅 및 프로토콜 지원에 제한이 있다.


GNU 가상 사설 이더넷으로 들어가기

GNU 가상 사설 이더넷을 사용하면 여러 호스트에서 완전한 가상 네트워크를 구성하고 빌드할 수 있다. 일반적인 VPN의 지점간 접근 방식과는 달리, GVPE에서는 가상 네트워크에 포함할 호스트 수를 원하는 만큼 설정할 수 있고 원할 때 언제든지 호스트를 작동하거나 중지할 수 있다.

이 기사에서 자세히 다루지는 않겠지만, GVPE는 새로운 연결 방법을 통해 작동할 수도 있다. 예를 들어, 기본 IP, HTTP(프록시를 통하는 방법 포함), DNS 및 ICMP에서 가상 네트워크를 지원하는 네트워크 트래픽을 라우팅할 수 있다. HTTP 프록시를 통하거나 공용 네트워크 외부의 디바이스를 통해 외부와 연결하기 위해 내부적으로 제한되는 컴퓨터 간에 가상 네트워크를 빌드할 때 이 방법을 사용할 수 있다.

GVPE에 의해 작성된 네트워크 인터페이스도 일반 네트워크 디바이스이므로, 연결 시 IP 프로토콜 이외의 프로토콜을 라우팅할 수 있다. 그 밖에도, 가상 네트워크 상에서 전송되는 정보는 그림 2에 표시된 것처럼 가상 네트워크 내에서 자동으로 적당한 호스트로 라우팅되고 구성된다.


그림 2. GVPE를 사용하는 VPN 솔루션
GVPE를 사용하는 VPN 솔루션을 보여주는 그림

기존의 VPN과 비교할 때, 패킷의 라우팅과 배포가 훨씬 더 유연하다. 더 중요한 점은, 호스트 간 통신이 다양한 전송 프로토콜을 통해 이루어질 수 있기 때문에, Amazon EC2와 IBM Cloud, 내부 클라우드와 그리드 솔루션, 데스크탑과 클라이언트와 같은 공용 클라우드의 호스트에 존재하는 가상 네트워크를 작성하는 데 GVPE를 사용할 수 있다는 사실이다. 그림 3에서 이 점을 확인할 수 있다.


그림 3. 공용 및 사설 네트워크에서 가상 네트워크 작성
GVPE를 사용하여 공용 및 사설 네트워크 VPN 솔루션에서 가상 네트워크 작성

편의를 위해 가상 네트워크 내부의 모든 호스트에 대한 구성 정보가 공유되므로, 설정 및 구성 확장이 매우 용이하다.


GVPE 보안

GNU 가상 사설 이더넷의 보안은 공용/개인 키 메커니즘을 사용하는 OpenSSL 라이브러리를 통해 처리된다. 가상 네트워크 내부의 각 호스트에는 고유한 호스트 키가 제공되고 통신 채널을 암호화하는 데 공용 버전이 사용된다.

한편, 가상 사설망(VPN)이 이더넷 레벨 네트워크 환경을 기반으로 하므로, 각각의 호스트가 기본 이더넷 네트워크에 존재하는 것처럼 각 호스트에는 고유한 MAC 주소도 제공된다. 즉, 발신인(필요한 경우에는 수신인)의 MAC 주소를 사용하여 정보의 원본을 확인할 수 있으므로 보안 레벨이 더욱 강화되는 효과를 볼 수 있다.

하지만, 단순하고 빠른 처리를 위해 보안 네트워크의 인증과 설정은 일반적인 비밀번호 또는 인증 확인 응답 메커니즘이 아니라 공용/개인 키를 통해서만 처리된다. 따라서 부팅 시간 중에 GVPE 설치를 설정하고 사용할 수 있으므로, 연결을 수동 설정할 필요 없이 장애 또는 다시 부팅 시 가상 네트워크가 다시 작성될 수 있다.


GVPE 설치

동적 네트워크 디바이스 작성을 지원하는 데 필요한 추가 네트워킹 드라이버를 설치해야 할 수도 있지만, GVPE는 Linux®와 다수의 UNIX® 배포 버전에서 작동한다. Solaris, Mac OS X 및 Windows®를 포함한 다양한 플랫폼에서 이 서비스를 사용하는 방법에 관한 자세한 정보는 gvpe.osdep 매뉴얼 페이지를 참조한다(mingw 또는 cygwin 사용). 이 설치 작업을 수행할 때 Linux를 사용할 것이다.

GVPE를 설치하기 전, 커널에 TUN/TAP 네트워크 커널 드라이버가 포함되도록 구성되었는지 확인해야 한다. 커널 구성에서 이 드라이버를 사용해야 한다. Debian/Ubuntu 및 Fedora를 포함한 다수의 데스크탑 Linux 설치 버전에서는 이미 TUN/TAP 드라이버를 사용하도록 설정되어 있을 수도 있다.

설치 작업을 계속 진행하려면 OpenSSL과 OpenSSL 헤더/라이브러리도 설치되어 있어야 한다. 그 밖에도, 실제로 설치 작업을 수행하기 전에 어떤 암호화 및 다이제스트 방법을 사용할지, OpenSSL 설치에서 지원할 항목은 무엇인지 등 몇 가지 사항을 결정해야 한다.

GVPE는 aes-128, aes-192, aes-256 및 bf(blowfish) 암호와 sha512, sha256, sha1, ripemd160, md5 및 md4 다이제스트 알고리즘을 지원한다.

목록 1에 표시된 것처럼, openssl 도움말을 사용하여 지원되는 암호 및 메시지 다이제스트 형식의 목록을 결정할 수 있다.


목록 1. OpenSSL의 도움말

$  openssl help
openssl:Error: 'help' is an invalid command.

Standard commands
asn1parse         ca                ciphers           crl
crl2pkcs7         dgst              dh                dhparam
dsa               dsaparam          ec                ecparam
enc               engine            errstr            gendh
gendsa            genrsa            nseq              ocsp
passwd            pkcs12            pkcs7             pkcs8
prime             rand              req               rsa
rsautl            s_client          s_server          s_time
sess_id           smime             speed             spkac
verify            version           x509

Message Digest commands (see the 'dgst' command for more details)
md2               md4               md5               mdc2
rmd160            sha               sha1

Cipher commands (see the 'enc' command for more details)
aes-128-cbc       aes-128-ecb       aes-192-cbc       aes-192-ecb
aes-256-cbc       aes-256-ecb       base64            bf
bf-cbc            bf-cfb            bf-ecb            bf-ofb
camellia-128-cbc  camellia-128-ecb  camellia-192-cbc  camellia-192-ecb
camellia-256-cbc  camellia-256-ecb  cast              cast-cbc
cast5-cbc         cast5-cfb         cast5-ecb         cast5-ofb
des               des-cbc           des-cfb           des-ecb
des-ede           des-ede-cbc       des-ede-cfb       des-ede-ofb
des-ede3          des-ede3-cbc      des-ede3-cfb      des-ede3-ofb
des-ofb           des3              desx              idea
idea-cbc          idea-cfb          idea-ecb          idea-ofb
rc2               rc2-40-cbc        rc2-64-cbc        rc2-cbc
rc2-cfb           rc2-ecb           rc2-ofb           rc4
rc4-40            rc5               rc5-cbc           rc5-cfb
rc5-ecb           rc5-ofb

여기에 나열한 모든 다이제스트 및 암호가 다 지원되는 것은 아니지만, OpenSSL에서는 사용할 암호 및 다이제스트를 지원해야 한다.

구성 스크립트에 --enable-digest 옵션을 사용하여 다이제스트를 설정하고 --enable-cipher에 사용할 암호를 설정한다. 이 정보를 지정하지 않으면 ripemd160 다이제스트와 aes-128 암호가 사용된다.

GVPE 및 GVPE 구성 파일을 설치할 위치도 정해야 한다. 기본 접두부는 /usr/local이다(/usr/local/bin에서 명령을 실행하여 /usr/local/etc/gvpe에서 구성을 찾음).

이런 의사결정을 한 후 다음을 수행하여 GVPE를 컴파일하고 설치한다.

  1. GVPE 패키지를 다운로드한다.
  2. GVPE 패키지를 추출한다.
    • $ tar zxf gvpe-2.2.tar.gz
  3. gvpe-2.2 디렉토리로 변경한다.
    • $ cd gvpe-2.2
  4. Configure를 실행하여 사용할 옵션을 설정한다.
    • $ configure --prefix=/usr/local --enable-digest=sha512 --enable-cipher=aes-256
  5. 컴파일:
    • $ make
  6. 설치:
    • $ make install

설치에 필요한 명령과 문서가 복사된다. 구성 파일은 각 시스템마다 고유하게 설정해야 한다.


가상 네트워크 설정

가상 네트워크를 설정하려면 다음 6가지 단계를 수행해야 한다. 원하는 만큼 많은 수의 시스템에서 이 단계를 수행할 수 있지만, 데모의 목적상 처음에는 한 가상 네트워크를 공유하는 두 시스템에 대한 솔루션만 설정하기로 한다.

  1. 전체 네트워크에 대한 구성 설정
  2. 공용/개인 키 작성
  3. 각 호스트 상의 네트워크를 설정하기 위한 스크립트 작성
  4. 각 시스템에 GVPE 구성 복사
  5. 각 시스템에 대한 호스트 키 설정
  6. GVPE 시작

각 단계를 개별적으로 설명한다.

구성 스크립트

구성 파일은 전체 구성과 구조의 핵심이다. 각 시스템에서 가상 네트워크의 레이아웃과 구성을 파악하기 위해 구성 파일을 사용하므로, 네트워크에 있는 모든 시스템이 구성 파일을 공유한다.

네트워크에 있는 각각의 호스트에 대해 노드 이름(가상 네트워크 내에서 호스트 식별)과 그 호스트와 통신하기 위한 공용 전송으로 사용될 호스트 이름 또는 통신 대상의 두 가지 값만 설정하면 된다. 우선, 표준 TCP/IP 네트워크에 대한 액세스 권한이 있다고 가정하자.

파일의 첫 부분에서는 모든 노드에서 사용할 글로벌 옵션을 지정하며, 사용자가 직접 각각의 개별 노드에 대한 옵션을 지정한다. 목록 2에 gvpe.conf라는 예제 구성 파일이 표시되어 있다.


목록 2. gvpe.conf 구성 파일

# Specify the use of UDP and the default port

enable-udp = yes
udp-port = 407

# Set the name of the virtual device created

ifname = vpn0

# Set the first node

node = private1
hostname = 192.168.1.20

# Set the second node

node = private2
hostname = remote.example.com

이 구성 파일에서는 첫 번째 노드인 private1을 설정하고 IP 주소를 지정한다(이 경우에는 로컬 네트워크 상의 IP 주소). 두 번째 노드의 경우 호스트 이름이 사용되며, 그 호스트의 IP 주소는 GVPE가 시작될 때 확인된다.

글로벌 옵션은 UDP 사용과 UDP 포트를 설정하고 작성될 가상 디바이스의 이름을 구성한다. 편의를 위해, 디바이스 이름을 vpn0으로 설정했다. 이는 /dev에 있거나 ifconfig의 출력에서 확인할 수 있는 이름이며, 가상 네트워크 디바이스와 라우팅을 구성하는 데 필요하다.

공용/개인 키 작성

각 호스트에 대한 공용/개인 키를 작성해야 한다. 이 키는 호스트의 암호화 및 식별에 모두 사용된다. 제어 명령인 gvpectrl: $ gvpectrl -c /usr/local/etc/gvpe -g를 사용하면 자동으로 작성할 수 있다.

이 명령을 사용하면 구성 디렉토리에 두 개의 디렉토리가 작성된다. Hostkeys 디렉토리에는 각 호스트에 대한 호스트 키(개인) 정보가 포함된다. Pubkeys 디렉토리에는 각 호스트에 대한 공용 키가 포함된다.

각 호스트는 통신을 위해 공용 키가 필요할 것이므로, 가상 네트워크에 있는 모든 호스트에 공용 키를 복사해야 한다. 각각의 특정 호스트에서는 호스트 키만 필요하다. 즉, 가상 네트워크에서 private1로 작동 중인 호스트에는 private1 호스트 키(hostkeys/private1에 있을 것임)만 복사하면 된다.

네트워크 초기화 스크립트

각 호스트에서 가상 네트워크가 작성되면 새로 작성된 네트워크 디바이스에 IP 주소를 지정하여 구성하고 시스템 간에 데이터를 라우팅할 수 있도록 라우팅을 구성해야 한다.

각 시스템에서 GVPE가 시작될 때 가상 인터페이스 설정을 위해 if-up 스크립트(interface up의 축약어)가 실행된다. GVPE는 이를 통해 (노드 이름, 인터페이스 이름 및 GVPE에서 생성된 MAC 주소 식별과 같은) 정보를 설정하기 위한 스크립트에서 사용할 수 있는 몇 가지 표준 쉘 환경 변수를 제공한다.

아래 목록 3에서 if-up 스크립트 샘플을 볼 수 있다.


목록 3. if-up 스크립트 샘플

#!/bin/sh
ip link set $IFNAME address $MAC mtu $MTU up
[ $NODENAME = private1 ] && ip addr add 10.0.1.1 dev $IFNAME
[ $NODENAME = private2 ] && ip addr add 10.0.2.1 dev $IFNAME
ip route add 10.0.0.0/16 dev $IFNAME

첫 행에서는 지정된 MTU를 사용하여 인터페이스의 MAC 주소를 설정한다. 이런 변수는 GVPE에 의해 설정되므로, 이 명령은 실제로는 ip link vpn0 address fe:fd:80:00:00:01 mtu 1500 up과 같은 형태로 확장된다.

두 번째 및 세 번째 행에서는 가상 사용자의 IP 주소를 설정한다. 인라인 테스트를 통해 어떤 호스트에 어떤 IP 주소를 지정할지 선택할 수 있다. 여기서 가상 네트워크의 IP 주소를 설정한다. 아직 사용하고 있지 않은 네트워크 범위를 선택해야 한다(전형적인 예: 10.0.0.0 범위 또는 192.168.0.0 범위).

이 경우에는 private1로 지정된 노드는 IP 주소 10.0.1.1에서, private2로 지정된 노드는 IP 주소 10.0.2.1에서 설정된다.

마지막 행에서는 새로 작성된 가상 인터페이스를 통해 10.0.0.0 네트워크에 대한 모든 트래픽을 경로 재지정하는 기본 라우팅을 설정한다.

각 시스템에 구성 복사

이제 스크립트, 구성 및 키 정보가 있으므로, 각 시스템에 이 정보를 복사할 필요가 있다. 현재 네트워크에는 추가 시스템이 하나밖에 없으므로 한 번만 구성을 복사하면 되지만, 각자의 네트워크에 있는 각 시스템에 대해 이 프로세스를 반복할 수 있다.

복사 작업은 rsync를 사용하거나 scp, sftp 또는 NFS와 같이 다른 프로토콜을 통해서도 수행할 수 있다. etc/gvpe 디렉토리에서 gvpe.conf, if-up 및 공용 키 디렉토리(pubkey)만 복사하면 된다.

예를 들어, rsync를 사용할 때는 목록 4에 표시된 것처럼 hostkeys 디렉토리를 제외한 모든 내용을 새 시스템에 복사하는 다음 명령을 사용할 수 있다.


목록 4. rsync를 이용한 복사

$ rsync -avzessh /usr/local/etc/gvpe remote.example.com:/usr/local/etc/. 
--exclude hostkeys

이제 private1 노드에서 개인 키를 /usr/local/etc/gvpe/hostkey에 복사한다. 그 노드에 대한 모든 것을 설정했다고 가정하면 $ cp /usr/local/etc/gvpe/hostkeys/private1 /usr/local/etc/gvpe/hostkey를 실행하면 된다.

private2가 될 호스트에서는 생성된 디렉토리에서 private2 호스트 키를 복사한다. 목록 5에서와 같이, remote.example.com 호스트에서는 scp 명령이 사용된다.


목록 5. scp를 이용한 복사

$ cd /usr/local/etc/gvpe
$ scp 192.168.1.20:/usr/local/etc/gvpe/hostkeys/private2 /usr/local/etc/gvpe/hostkey

구성을 완료한 상태에서 GVPE 서비스를 시작하고 두 시스템을 함께 연결할 수 있다.

GVPE 시작

GVPE 프로세스는 간단하고 자동으로 이루어진다. 이 프로세스가 시작될 때는 보통 백그라운드에서 디먼으로 실행된다. 따라서 간단히 $ gvpe만 실행하면 된다.

하지만, 출력에서 몇 가지 로그 정보를 얻을 수도 있다. -l 매개변수를 사용하여 다른 레벨의 로깅을 지정할 수 있다. 테스트를 위해, -D 매개변수를 사용하여 GVPE가 디먼 모드로 전환하지 못하게 할 수도 있다. 또한, 목록 6에 표시된 것처럼 노드 이름을 지정해야 한다.


목록 6. 노드 이름 지정

$ gvpe -D -l info private1
gvpe daemon 2.22 (Jun 13 2010 11:05:50) starting up.

이제 네트워크에서 두 번째 가상 호스트가 될 호스트에서는 private2에서 가상 네트워크를 시작하기 위한 명령을 실행한다. 목록 7에 나타낸 것처럼, 이 명령을 실행하면 UDP를 사용하여 다른 호스트와 연결이 설정된 것으로 표시되어야 한다.


목록 7. private2 가상 네트워크 시작

$ gvpe -l info -D private2
gvpe daemon 2.22 (Jun 13 2010 08:30:01) starting up.
private1(udp/192.168.1.20:407): connection established (direct), protocol version 0.1.

목록 8에 나타낸 것처럼, private1에서 이와 유사한 행이 출력되어야 한다.


목록 8. 또 다른 private2 성공 메시지

private2(udp/192.168.1.10:407): connection established (direct), protocol version 0.1.

Ping을 사용하고 if-up 스크립트에서 설정한 원격 IP 주소를 지정하여 네트워크를 테스트할 수 있다.

예를 들어, private1에서 10.0.2.1로 ping을 실행할 수 있다(목록 9 참조).


목록 9. 10.0.2.1로 ping

$  ping 10.0.2.1
PING 10.0.2.1 (10.0.2.1) 56(84) bytes of data.
64 bytes from 10.0.2.1: icmp_seq=1 ttl=64 time=12.1 ms
64 bytes from 10.0.2.1: icmp_seq=2 ttl=64 time=1.62 ms
^C
--- 10.0.2.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 1.629/6.891/12.154/5.263 ms

전체 가상 네트워크의 상태를 모니터하려면 목록 10에 표시된 것처럼 -s 옵션을 포함한 gvpectrl 명령을 사용한다.


목록 10. 가상 네트워크의 상태 모니터링

$ gvpectrl -s

Configuration

# of nodes:         2
this node:          <unset>
MTU:                1500
rekeying interval:  0
keepalive interval: 0
interface:          vpn0
primary rsa key:    <default>
rsa key size:       1280

 ID#  MAC               Com Conmode   Node        Host:Port
   1  fe:fd:80:00:00:01  Y  always    private1    192.168.1.20:407
   2  fe:fd:80:00:00:02  Y  always    private2    www.example.com:407

(디먼 모드 이외의 모드에서 시작한 경우) Control-C와 함께 kill 명령을 사용하여 연결을 강제 종료할 수 있지만, 최선의 방법은 목록 11에 표시된 gvpectrl 명령을 사용하는 것이다.


목록 11. 연결을 정상적으로 강제 종료

$ gvpectrl --kill
preparing shutdown...
private2(udp/192.168.1.10:407): connection lost
exiting.

물론, 이는 전혀 실제 네트워크를 반영하지 못할 수도 있는 작은 내부 네트워크에 불과하다. 실제로, 이런 가상 네트워크는 공용 네트워크에서 또는 여러 호스트를 함께 단일 가상 네트워크로 연결하는 데 사용될 것이다.


공용 네트워크 상의 배치

공용 네트워크 상에 배치할 때는 원격 호스트에서도 기본적인 설정과 구성이 동일하다. 사용자가 설정하는 키가 인증에 사용될 것이며, 암호화는 공용/개인 키를 통해 자동으로 처리될 것이다.

더 중요한 고려사항은 각 호스트와의 통신에 사용하는 통신 방법이다. 다른 VPN 솔루션과는 달리, 동일한 기본 가상 네트워크 환경을 계속 지원하고 작성하는 동안 여러 호스트 간에 서로 다른 기본 전송 방법을 혼합 및 일치시킬 수 있다.

다른 프로토콜을 설정하려면 구성 파일 내에서 각 가상 노드의 프로토콜을 구성하기만 하면 된다. 목록 12에서 이 점을 확인할 수 있으며, 여기서는 구성 파일에 세 개의 호스트(private3, private4, private5)가 새로 추가되었다.


목록 12. 세 개의 호스트 새로 추가

enable-udp = yes
udp-port = 407

# Set the name of the virtual device created

ifname = vpn0

# Set the first node

node = private1
hostname = 192.168.1.20

# Set the second node

node = private2
hostname = remote.example.com

node = private3
hostname = ec2.amazon.com
enable-tcp = yes
tcp-port = 443

node = private4
hostname = 129.168.23.47
enable-rawip = yes

node = private5
hostname = 192.168.100.20
udp-port = 20000

private3의 경우 Amazon EC2를 사용하여 호스트와 통신하고 있다. 이와 같은 외부의 공용 네트워크와 통신할 때는 방화벽에 통신을 제한하는 요소가 있을 수 있다. 사용할 수 있는 대상에 한계가 있지만, 이 예제를 통한 설명을 위해 일반적으로 보안 HTTP 통신에 사용되는 포트인 포트 443에서 직접 TCP/IP 통신을 사용한다. 이는 다른 포트가 방화벽에 의해 정상적으로 차단되는 경우에 유용할 수 있다. 가상 네트워크가 작동하도록 하려면 두 가지 경로 모두에 네트워크 포트 액세스 권한이 있어야 한다.

private4에서는 원시 IP 프로토콜을 사용 중이므로 방화벽이 아니라 호스트에 대한 직접 액세스 권한이 있는 것으로 가정한다. 대부분의 표준 라우터에서 사용하는 NAT(네트워크 주소 변환) 환경을 포함한 대부분의 방화벽에서는 보통 이를 지원하지 않으므로, 완전한 액세스 권한이 있을 때만 사용할 수 있다.

private5에서는 private1과 private2에서 기본적으로 사용되는 UDP 프로토콜을 사용하지만, 다른 포트 번호를 사용할 필요가 있다. 이 경우에는 일반적으로 특수한 권한이 필요한 범위를 벗어나는 포트 번호(1024 미만)를 설정했는데, 이는 사용자에게 루트 액세스 권한이 없는 시스템에서 실행될 수 있다는 뜻이다.


애플리케이션 구성

앞서 설명한 ping 예제에서 보여준 바와 같이, IP 네트워크의 기본 요소들이 이미 작동 중이고 ping과 같은 서비스는 일반적으로 호스트 상의 모든 인터페이스에서 기본적으로 사용된다.

다른 서버와 애플리케이션의 경우 가상 네트워크 인터페이스를 직접 사용하도록 애플리케이션을 구성하거나(이 예제에서는 vpn0), IP 애플리케이션인 경우에는 특정 서버가 바인드하거나 클라이언트가 원격 서버와 통신할 때 연결하는 IP 주소를 구성하고 변경해야 한다.

예를 들어, Apache를 통해 웹 서비스 환경에 대한 연결을 지원하고 수신 대기할 시스템을 구성하려는 경우 Apache 구성에서 Listen 지시문을 새 가상 디바이스 IP 주소(예: Listen 10.0.2.1:80)로 다시 설정해야 한다.

GVPE에서 완전히 새로운 네트워크를 작성 중이므로, 다른 애플리케이션 또는 서비스를 구성할 때와 같은 방법으로 서버나 클라이언트를 구성해야 한다.

유용하게 활용할 수 있는 한 가지 트릭은 가상 네트워크를 사용할 수 있는 특수한 상황을 구성하는 것이다. if-up 스크립트와 똑같이 etc/gvpe 디렉토리에 있어야 하는 node-up 및 node-down 스크립트를 사용하면 이렇게 구성할 수 있다.

이런 스크립트는 노드가 작동 또는 중지될 때마다 호출된다. 다양한 솔루션에 이 스크립트를 사용할 수 있지만, 공통적인 사항은 어떤 서비스를 시작하거나 서버 및 서비스 존재 여부를 등록하는 것이다.

예를 들어, 그리드 또는 클라우드 환경 내에서 사용 시, node-up 명령을 사용하여 해당 시스템을 이제 사용할 수 있다는 사실을 다른 시스템에서 알 수 있도록 클라우드 또는 네트워크에 새 호스트를 등록하는 스크립트를 호출할 수도 있다.


결론

가상 사설망(VPN)을 작성하는 것은 대체로 복잡한 프로세스이며, 그 결과가 항상 원했던 만큼 실용적이고 유연성이 뛰어난 것은 아니다. GVPE를 사용하면 단순히 몇 가지 특정 프로토콜을 라우팅하고 지원하는 데 사용되는 IP 대상이 아니라, 완전 가상 네트워크를 작성할 수 있다. 뿐만 아니라, GVPE는 계속 보안을 유지하면서도 다시 시작할 수 있고 영구적인 서비스로 손쉽게 설정 및 구성할 수 있다.

이 기사에서는 GVPE와 다른 VPN 솔루션의 주요 차이점을 살펴보았다. GVPE 도구를 이용한 가상 네트워크의 기본적인 설정에 대해서도 자세히 살펴보았다. 공용 통신 네트워크 상에서 GVPE 구성 작업을 하는 방법과 새 가상 네트워크를 사용하여 사용자 정의 애플리케이션으로 작업하는 방법도 알 수 있었다.


참고자료

교육

제품 및 기술

  • DVD로 제공되거나 다운로드할 수 있는 IBM 시험판 소프트웨어를 사용하여 차기 오픈 소스 개발 프로젝트를 구현해 보자.

토론

필자소개

Martin Brown은 8년 넘게 기술 필자로 활약해왔다. Brown은 다양한 주제를 다루는 수 많은 책을 집필했고 기사를 작성했다. Brown은 펄, 파이썬, 자바(Java™), 자바스크립트, 베이직, 파스칼, 모듈라-2, C, C++, 레볼, gawk, 셸 스크립트, 윈도우(Windows®), 솔라리스, 리눅스, BeOS, 맥 OS X을 비롯하여 웹 프로그래밍, 시스템 관리, 통합에 이르리까지 다양한 개발 언어와 플랫폼을 경험했다. Brown은 마이크로소프트(Microsoft®) SME(Subject Matter Expert)이며 ServerWatch.com, LinuxToday.com, IBM developerWorks에 주기적으로 기고한다. Brown은 또한 컴퓨터월드, 애플 블로그, 기타 사이트에 주기적으로 블로그 기사를 올린다. 연락 주소는 Brown이 운영하는 웹 사이트를 참조하기 바란다.

잘못된 도움말 신고

부정사용 신고

감사합니다. 이 항목은 운영자가 관심을 표시했습니다.


잘못된 도움말 신고

부정사용 신고

제출실패 신고. 나중에 다시 실행해주세요.


디벨로퍼웍스 로그인


IBM ID가 필요하세요?
IBM ID를 잊으셨습니까?


비밀번호를 잊으셨습니까?
비밀번호 변경

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

화면상에 보여지는 닉네임을 정하세요.

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

3개의 &이나 대쉬를 포함해주시고 31글자내로 제한해주세요.


developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


아티클 순위

의견

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=20
Zone=AIX와 UNIX
ArticleID=761610
ArticleTitle=GNU 가상 사설 이더넷
publish-date=09272011

태그

Help
검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오.

태그를 더 많이 보거나 적게 보기 위해 슬라이더 막대를 사용하십시오.

인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다.

내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.

검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오. 인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다. 내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.