VPN 선택하기

김정균의 이미지

이번에 KLDP 를 Neowiz 의 전용랙으로 이전하면서 KLDP 에 VPN 시스템을 도입하려고 삽질을 하고 있습니다. 처음에는 IPSec 을 하기 위해서 OpenSwan 을 염두에 뒀었는데, 당치도 않은 장황한 영어 매뉴얼에 포기를 하고 (T.T), 상대적으로 자료가 많은 OpenVPN 과 PPTP 중에 선택을 하려 하고 있습니다.

그런데, 이 두녀석들이 딱 마음에 드는 것이 없네요. 원래는 PPTP 쪽으로 마음이 기울였었는데 현실적으로 OpenVPN 의 손을 들어줘야 하는 상황이 되었습니다.

일단 두녀석 모두의 단점으로는.. 관리자가 접속자의 password 를 너무 쉽게 알 수 있다는 점이었습니다. 좀 경악 스럽더군요. 일단 OpenVPN 의 경우에는 debug mode 에서 사용자의 password 를 로그에 남기거나 stdout 으로 볼 수 있다는 좀 황당한 디버깅 모드에 놀랐고.. PopTop 의 pptpd 의 경우에는 암호화를 하기 위해서는 chap-secrets 에 plain text 암호를 기입해야 하든지.. system account 의 계정을 사용하기 위해서는 PAP 이라는 암호화가 되지 않는 프로토콜을 사용해야 한다는 것입니다. 좀 당황스럽더군요 --; (VPN 업체의 계정 서비스는 받지 말든지 패스워드를 엄한 것으로 사용해야 겠다는 다짐이 박박 듭니다.)

이건 공통적인 것이고, 일단 PPTP 와 OpenVPN 의 장단점으로는..

1. OpenVPN
   - system account 와 쉽게 통합이 가능하다.
   - bluefish 라는 암호화 알고리즘을 이용한다.
   - 시스템쪽에서 귀찮은 작업이 없다.
   - 별로 장점이 보이지를 않습니다.
 
2. PPTP
   - 클라이언트가 윈도우즈에 기본으로 있다 (2000 이상)
   - 이거 밖에 없군요 --;

단점으로는..

1. OpenVPN
   - 클라이언트 프로그램을 설치해야 한다.
   - 용어가 어렵다. (tun/tap tun 은 대충 알겠는데 tap 은 좀 힘들었습니다.)
   - routing 방식에 대한 글은 많은데, 실제로 routing 방식으로 환경 구성하기가 쉽지
     않습니다. bridging 방식의 글은 홈페이지에 영어(?)로 친절하게 적혀 있더군요 --;
   - gateway 선택을 서버에서 강제로 지정한다.
 
2. PPTP
   - DHCP Enabled 가 무조건 No 다. 이건 DNS 를 VPN 망에서 사용해야 할 경우
     치명적입니다. KLDP 의 경우 DNS view 를 이용하여 내부망과 외부망의 IP 를
     다르게 받기 때문에 DNS 가 VPN 에서 지정된 것이 primary 로 잡혀줘야 하는데
     PPTP 는 방법이 없더군요. (아니면 못찾았던지..) ppp-dhcp 라는 모듈이 있어
     이것을 사용해 보았는데, IP 만 할당해 주지, windows 에서는 여전히 NO 로
     나옵니다.
   - PAP/CHAP 용어가 너무 어렵습니다.
   - 서버에서 해줘야 할 것이 너무 많음. 특히 MPPE 와 생소한 ppp 를 다뤄야 한다는
     점에서...

그 외에도 많았지만.. 생각이 잘 안나네요. PPTP 를 이용하고 싶은데.. DNS 문제가 치명적이라 아무래도 OpenVPN 을 선택해야 할 것 같네요. OpenVPN 이 client 측에서 gateway 를 선택할 수 있으면 좋기는 한데.. (방법이 없지는 않습니다. 수동으로 route 명령을 이용해서 gateway 를 변경하면 되기는 합니다...만 좀 암울하죠 T.T)

현재 상황에서는.. OpenVPN 의 경우 클라이언트에서 gateway 를 선택할 수 있는 방법이 있다면 OpenVPN 의 승! 아니면.. PPTPd 에서 클라이언트의 ppp device 가 DHCP enabled 가 될 수 있도록 하여, ppp 에서 전달된 DNS 가 primary 로 사용을 할 수 있다면 PPTPd 승! 이 될 듯 싶습니다. 이도저도 아니라면.. DNS 문제의 한계로 OpenVPN 승 이겠네요. 절대적으로 OpenVPN 이 유리하군요. --;

일단.. 이 두녀석의 구축기는 안녕 리눅스 White Paper 로 올라갈 예정이며, 이 두녀석들 때문에 oops-firewall 의 기능도 많이 변경이 되었습니다. :-) 안녕 리눅스로 VPN 구축이 상당히 쉬워질 듯 싶네요 ㅋㅋ

댓글

권순선의 이미지

혹 vpn을 구축해 보신 다른 분들의 경험을 들어볼 수 있으면 좋을 것 같습니다. o'reilly에서 예전에 vpn 구축 관련된 서적이 있는데 잘 안팔리는지... 98년도에 2판이 나온 이후로는 개정판이 안나오네요. http://www.oreilly.com/catalog/vpn2/

익명사용자의 이미지

갑자기 vpn 시스템을 구축하려는 이유가 궁금합니다.

김정균의 이미지

일단은 보안적인 이슈 때문입니다. KLDP 시스템에 대해서 full time 관리를 할 수 있는 사람이 없기 때문에 조금이라도 보안성을 강화 할 수 있는 요소라면 해 놓는 것이 유리하다고 판단이 되기 때문이죠.

그리고 이때까지는 하고 싶어도 할 수 없는 환경 구조였고, 이제는 할 수 있는 환경이 되었기 때문에 하려는 것이죠.

gogoonee의 이미지

예전(4달전)에 openvpn 으로 잠시 사용했던적이 있는데 password 방식이 아닌 publickey 방식 접속 설정이 가능했던 기억이 납니다.

김정균의 이미지

key 를 배제한 이유는 발급및 관리가 귀찮아서 --; IPSec 을 포기한 이유도 이것이 결정적이죠.

윗글에서 다 적지 못한 부분이 있었는데.. 이런 저런 이유로..

1. system account 를 이용해야 한다.
2. VPN 연결시에 VPN 에서 지정한 DNS 가 primary 로 올라와야 한다.

가 일단 기본 조건이었습니다.

익명사용자의 이미지

gateway를 마음대로 지정하고 싶다는 말이 정확히 어떤것인지는 잘 모르겠습니다.

일단 제가 예전에 해봤던 기억으로는

'수동으로 route 명령을 이용'하는 방법과 유사한 방법이긴한데

OpenVPN Client쪽의 conf파일에 route 항목을 지정해주면

Connect시에 지정된 라우팅이 반영되었다가

Disconnect하면 다시 원래의 라우팅으로 회복되었던 것 같습니다.

김정균의 이미지

음 바로 그 기능을 찾고 있었는데요. 서버측에서는 redirect gateway 를 지정하면.. 클라이언트에서 gateway 가 VPN 쪽을 이용하게 되는데,, 서버측에서 redirect gateway 를 지정하지 않았을 경우, 클라이언트 설정에서 gateway 를 VPN 쪽을 것을 지정할 수 있는지 여부가 궁금했었습니다. 찾다가 지쳐서.. (솔직히 pptpd 가지고 씨름하느라.. 별로 찾아 보지는 못했습니다만.. ^^)

익명으로의 이미지

- 클라이언트에서 직접 연결 시 PPTP

- 사이트 대 사이트 연결 시 IPSEC
보통 본,지점간 연결 시 IPSEC를 이용합니다.
A사이트의 게이트웨이와 B사이트의 게이트웨이단에 설치해서
두 사이트를 연결 해서 사용하죠
보통 회사나 기관에서 많이 사용하는 걸로 아는데요.
물론 클라이언트에서 직접 연결하는 방식도 되지만...

각각 장단이 있죠

문태준의 이미지

다른 분들 경험담이나 구축기도 많이 올라오면 좋으련만...

---------------------------
문태준
http://tunelinux.pe.kr
http://database.sarang.net

---------------------------
문태준
http://groups.google.co.kr/group/sysadminstudy 시스템어드민 공부모임
http://tunelinux.pe.kr
http://database.sarang.net

익명사용자의 이미지

PPTP 또는 L2TP PPP 방식이기 때문에 네트워크 순단 현상이 생길 때 세션을 유지하기 힘듭니다.

IPSec를 추천합니다.
단점:
1. 윈도우 머신에 클라이언트 프로그램을 설치해야 한다는 것이 불편.
2. 윈도우 머신에 방화벽을 해제해야 한다는 것. (ICMP 패킷 주기적으로 체크)

P.S SSL 키 발급이 불편 하지만 PSK 키로 하셔도 됩니다.

김정균의 이미지

흠.. poptop pptpd 에서 DNS view 때문에 VPN 서버에서 클라이언트로 DHCP 정보를 밀어 주는 것을 찾고 있었고, pptpd 에서 DHCP 로 DNS 넘기는 것을 못찾아서 pptpd 사용하는 것을 포기했었는데.. 좀전에 windows pptp 설정을 가만히 보고 있으니, pptp 등록 정보에서 DNS 를 지정할 수 있도록 되어 있군요. 흐.. 왠지 삽질한 기분이네요 :-)

pptpd 의 경우 DHCP 로 DNS 정보를 넘겨줄 필요 없이 client pptp 등록정보에서 DNS 를 기입하도록 하면 됩니다. 혹시 잊어버릴까봐 기록합니다.

onion의 이미지

openVPN windows client는 windows client가 있고 gui client가 있습니다.
gui client에서 client접속후 system의 route명령을 사용할수 있게 프로그램을 뜯는 방법도 있어요..(먼산)
그리고 pptp같은경우도 windows용으로 client program만드는걸보면
pptp connection을 생성할때 DHCP의 여부 또는 기타 다른 몇가지를 지정해서 pptp connection을 생성할 수도 있습니다.
openVPN도 server에서 DHCP의 형식으로 IP의 대역을 잡아서 뿌려줄 수 있는걸로 알고있는데...
그리고 openVPN에서 passwd방식은 radius랑 연동시키면 이래저래 재미있는 일들이 많더군요..(히죽)
나중에 openVPN과 radius와 windows인증을 같이 묶어볼 수 있으면 재미있을거같기는합니다..ㅎㅎ

아 그리고 여담입니다만.. 구형 공유기중 몇가지는.. pptp나 ipsec을 통과시키지 못합니다..
대안은 ssl로 구성하는 openVPN밖에 없더라구요..(울먹)
https덕분에 ssl을 지원못하는 공유기는 없으니까요..-.-;

-----새벽녘의 흡혈양파-----

-----새벽녘의 흡혈양파-----

김정균의 이미지

pptpd 를 사용하려한 이유는 windows 에서 default 이기 때문이었죠. 그리고 poptop 의 pptpd 의 packet 을 떠보면 DHCP 옵션을 넘겨주지 않던 것 같았었는데요. 제가 잘못 알고 있나요??

Arcy의 이미지

이번에 racoon 으로 NAT-T 구성을 사용해 보았는데, 이건 proto 50(ESP) 나 51(AH)를 쓰는 게 아니라 아예 UDP 4500 포트를 암호화해서 쓰더라구요. source port 까지 그대로 가져가야 하는지는 모르겠지만, 뭐 한쪽 방향성이라면 일반 공유기에서도 관계없지 않나 싶군요.

23:48:24.018837 IP x.x.x.x.4500 > y.y.y.y.4500: UDP-encap: ESP(spi=0x0a736f0c,seq=0x2d), length 124
23:48:24.020444 IP y.y.y.y.4500 > x.x.x.x.4500: UDP-encap: ESP(spi=0x01a668de,seq=0x29), length 124

lse0101의 이미지

흠.. 저또한 vpn때문에 고민중이옵니다.;

openswan을 이용해서 하는중인데...

서버실 A <------>사무실B

사무실 B에서 서버실에 A접속하는 경로를 암호화하고

서버실 A쪽에 있는 각각의 서버에 접속을 시도하려 했습니다...

문제는 private nework의 경우는 잘 작동하나

서버실 A는 3개의 네트워크가 존재함...
서버실 A에서 default route를 해서 찾아 주길 바랫으나 그건 안되더군요 -_ㅜ

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.