openswan으로 vpn 만들려고 하는데요..

purenous의 이미지

우선 ipsec.conf 파일은 이렇습니다.

# basic configuration
config setup
# Debug-logging controls: "none" for (almost) none, "all" for lots.
# klipsdebug=none
# plutodebug="control parsing"
interfaces="ipsec0=eth0"
klipsdebug=all
plutodebug=all

# Add connections here
conn l105-r88
# Left security gateway, subnet behind it, next hop toward right.
left=166.104.10.105
leftsubnet=192.168.10.0/24
leftnexthop=166.104.10.88
# Right security gateway, subnet behind it, next hop toward left.
right=166.104.10.88
rightsubnet=172.16.10.0/24
rightnexthop=166.104.10.105
# To authorize this connection, but not actually start it, at startup,
# uncomment this.
keyingtries=0
auth=ah
authby=rsasig
leftrsasigkey=0sAQOh4PMhq10eSboTGI9Plhf7WBDehQV
PusvUPaGrufqglb6UHFySYQTR/sd/30RWUDR4sbVWX3196
Nuc5FGhGBe7TDI3KBVGOOJJRmKHT+KWHLEsDHFILKVItN
csXFi2ZErsx8lJ2iA2N3SHPvJGPJxYUlY03ZqvLLWhg3gTew4
nMw==
rightrsasigkey=0sAQOXZ/puORPAayKmRL+loKYcv2eHJU/
McraTelap3O2cmsNJT3/RqPAaR34Uj0gyhO51S6H9IhLr39
9D2Cu/02LbZ41TC+2gPFpZP4Cv0DS5L0oXq1TmyVHpli3x
kzL7qWcy6yKbCdgj454HwAe7NddSFUNvzzUwZtwEu2tXd
hYAYQ==
auto=start
#Disable Opportunistic Encryption
include /etc/ipsec.d/examples/no_oe.conf

그러니깐 이런 식으로..
172.16.10.0/24(rightsubnet) --- 166.104.10.88(right) === 166.104.10.105(letf) --- 192.168.10.0/24(leftsubnet)

근데 문제는.. rightsubnet 컴퓨터에서 leftsubnet 쪽으로 ping을 걸어놓고 tcpdump로 보면 esp 패킷이 보이긴 하는데요..

ipsec look으로 보면 생성된 터널 정보는 보이지 않고

armyant Sat Oct 29 12:05:00 KST 2005
cat: /proc/net/ipsec_spigrp: No such file or directory
cat: /proc/net/ipsec_eroute: No such file or directory
grep: /proc/net/ipsec_tncfg: No such file or directory
sort: open failed: /proc/net/ipsec_spi: No such file or directory
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 166.104.10.1 0.0.0.0 UG 0 0 0 eth0
166.104.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
172.16.10.0 166.104.10.88 255.255.255.0 UG 0 0 0 eth0

이런 결과가 나옵니다.

뭐가 잘못된 건지 아무리 찾아봐도 알 수가 없네요 ㅠㅠ

그리고 몇가지 질문이 있는데요
첫번째는 RSA 키교환 할 때 CA 인증없이 가능한건지요? 만약 가능하지 않다면 어떻게 해결해야 하는지 좀 알고 싶구요
두번째는 NAT-T와 OE(Opportunistic Encryption) 이게 대충 어떨 때 쓰는 기능인지 알고 싶습니다.
그리고 openswan 관련 문서 찾기가 쉽지 않아서 혹시 괜찮은 문서 있는 곳 아시는 분 있으면 좀 가르쳐 주세요 ㅠㅠ

지금쯤 연결 다 끝내놓고 이젠 로깅 기능이랑 웹어드민 프로그램 만들어야 하는데. 연결에서 아직도 해매고 있어요..ㅠㅠ

purenous의 이미지

지금 현재 연결이 안되는 상태는
Oct 29 11:30:43 armyant ipsec__plutorun: 104 "l105-r88" #1: STATE_MAIN_I1: initiate
Oct 29 11:30:43 armyant ipsec__plutorun: ...could not start conn "l105-r88"

저기 STATE_MAIN_I1 상태 저 다음에 안되는 것 같습니다..

근데 wiki에 요런 말이 나오네요..
Connection stuck at STATE_MAIN_I1
This error commonly happens because IKE (port 500)
packets, needed to negotiate an IPSec connection,
cannot travel freely between your IPSec gateways.
See our firewall document for details.

our firewall document를 봤더니 무슨 소린지 모르겠습니다..;;

wariua의 이미지

구글님이 많은 걸 알고 계십니다. 에러 메시지 한두 줄 긁어서 물어보면 친절히 대답해 주십니다.

ipsec look의 결과 문제는... FreeS/WAN의 자체적인 IPSec code가 아닌 Linux native IPSec code를 사용하고 계시기 때문에 그렇습니다. 정히 ipsec look을 이용하셔야 된다면 FreeS/WAN의 IPSec 코드(klips라고 하던가요...-.-a)를 가지고 커널을 다시 컴파일 해주셔야 합니다.

RSA 키교환 할때 CA 인증... CA 인증 없으면 불가능합니다. 상대가 보낸 인증서가 올바른지를 확인할 근거가 있어야 하는데, 그 근거가 되는 것이 CA의 인증서입니다. 물론 CA는 공인 인증 기관일 필요는 없습니다. openssl로 만든 SnakeOil로도 충분합니다. CA 인증서 만드는 방법 등등은 X.509 가이드의 7장을 참고하실 수 있을 듯 합니다. (음... CA 인증서 따로 안 만들고, self-signed 인증서--자기 키로 서명한 인증서--를 만들어서는 그걸 상대 장비의 CA 인증서 저장소에 넣어도 될'지도' 모릅니다만, FreeS/WAN의 구현이 그걸 허용하는지는 잘...-.-;; ) 하지만 궁극적으로는... 귀찮은 RSA 대신 깔쌈한 PSK를 사용하시는 게... 쿨룩;;

OE... 뭘까요...-.-a VPN 장비에서의 설정이 좀 더 수월하다는 정도, 하지만 DNS 장비를 건드려야 하는 것 같다는 정도, outlook express랑 약자가 같다는 정도... (퍼벅-)

기본적인 문서는 역시 http://www.freeswan.org/freeswan_trees/freeswan-2.06/doc/ 와 manpage겠지요. 그 외에 X.509 관련된 문서는 http://www.strongsec.com/freeswan/ 이고, Super FreeS/WAN 홈피를 참고하실 수도 있겠고, 대략 난감한 에러 메시지를 보시면 구글님을 이용하실 수 있구요... 한글 문서로 아주 잘 정리된 문서는 찾기가 쉽지 않은 것 같습니다. 하지만 구글에서 한국어 웹을 대상으로 FreeS/WAN을 검색해도 결과들이 꽤 나오기는 합니다.

----

MAIN_I1에서 멈추는 거면... tcpdump로 udp 500을 떠 봐서 IKE 패킷이 상대 VPN 장비로 잘 도착하는지를 확인해 보셔야 할 것 같습니다.

$PWD `date`

vecter의 이미지

opensuse 10.0 에 딸려 있는 openswan 으로 어울림 secureworks 랑 net-to-net 으로 붙치는데 성공 했습니다. psk 가 정답이네요. 괸실히 rsa 하려다 삽질만 하다. 한방에 성공 했습니다.

저한테는요 linux 에서 vpn 설정 보다는 iptables 처리가 더 어렵군요

purenous의 이미지

근데 대부분 freeS/WAN 자료들이군요 2002~3년 정도에
작성된.. 예전에 처음 프로젝트 시작할 때 freeS/WAN 자료를
보고 했다가 피를 본 경험이 있어서...-조금 달라졌더라구요..-

그냥 freeS/WAN으로 할 걸 그랬나봐요...ㅠㅠ

wariua의 이미지

아... openswan으로 하고 계신 거군요;;; (왜 계속 "freeswan"으로 봤을까요, 핫핫;;; )

$PWD `date`

layer7의 이미지

openswan도 freeswan에서 기반을 해서 나온걸로 알고 있어서
큰 내용은 비슷한걸로 알고 있습니다.

다음 에러가 난걸로 봐서는 커널에 패치나, 모듈이 정상적으로 로딩이 되지 않은것 같습니다. ipsec에 의존적인 모듈을 담당하는
커널이나, 모듈이 로딩이 되지 않으면 /proc 디렉토리에 해당 정보가 생기지 않을것 같습니다.

cat: /proc/net/ipsec_spigrp: No such file or directory
cat: /proc/net/ipsec_eroute: No such file or directory
grep: /proc/net/ipsec_tncfg: No such file or directory

2. NAT-T와 OE(Opportunistic Encryption) 에서

NAT-T 의 경우는 NAT아래에 있는 유저들이 터널을 맺기 위해서 사용하는 모드로 알고 있습니다. NAT 하에서는 일반적으로
설정해줄수 있는 환경과 조금 다르기때문에 위의 모드를 사용하는걸로 알고 있습니다.

OE는 Freeswan쪽에서 밀고 있는 모드로 별다른 설정 없이
Domain 설정시에 인증 관련내용을 해두면 별다른
설정 없이 터널링이 되는걸로 알고 있는데 오래되서 확실하게
기억이 나질 않네요 ^^;

다소 틀릴수도 있으니 참고만 해주세요.

mithrandir의 이미지

NAT-T 는 NAT Traversal의 약자로 nat를 통과하게 해주는 기능입니다.

ipsec의 경우는 ESP를 UDP 패킷으로 감싸서, 4500포트로 보내는것을 얘기하지요. 자세한것은 역시 문서를 참조하세요.

언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net

atie의 이미지

Cisco VPN 장비 설정을 했을 때 IKE nego가 실패한 것을 양쪽에 동일한 CA 인증key를 줘서 해결했었습니다. certificate은 self-signed 였고요.

----
I paint objects as I think them, not as I see them.
atie's minipage

purenous의 이미지

openswan이 freeswan에서 포크된 프로젝트라는
말 듣고서 원래 freeswan으로 진행해야될 프로젝트인데
openswan으로 했거든요..ㅠㅠ

지금 ubuntu에서 openswan 2.3 버젼이던가
그거 깔아놨거든요..
근데 커널 2.6 이후부터는 커널에 별다른 패치도 필요없고
ubuntu 패키지 만드는 사람들이 자잘한 건 그냥 패키지 깔면
거의 패치가 되게 만들어놓은 걸로 알고 있는데..

모듈 로드할 때 별다른 에러메시지도 없고...
미치겠어요..으아~

purenous의 이미지

나오는 메시지가 양쪽이 다르네요..

right(166.104.10.88)에서 했을 때는..

Quote:

104 "l105-r88" #11: STATE_MAIN_I1: initiate
003 "l105-r88" #11: received Vendor ID payload [Dead Peer Detection]
106 "l105-r88" #11: STATE_MAIN_I2: sent MI2, expecting MR2
108 "l105-r88" #11: STATE_MAIN_I3: sent MI3, expecting MR3
004 "l105-r88" #11: STATE_MAIN_I4: ISAKMP SA established
117 "l105-r88" #12: STATE_QUICK_I1: initiate
003 "l105-r88" #12: ERROR: netlink XFRM_MSG_NEWPOLICY response for flow tun.10000@166.104.10.88 included errno 17: File exists
004 "l105-r88" #12: STATE_QUICK_I2: sent QI2, IPsec SA established {ESP=>0x677c1b0a <0x68a3482d AH=>0x99b565d2 <0xe718846e}

이렇구요

left(166.104.10.105)에서 했을 때는 이렇습니다.

Quote:

104 "l105-r88" #11: STATE_MAIN_I1: initiate
003 "l105-r88" #11: received Vendor ID payload [Dead Peer Detection]
106 "l105-r88" #11: STATE_MAIN_I2: sent MI2, expecting MR2
108 "l105-r88" #11: STATE_MAIN_I3: sent MI3, expecting MR3
004 "l105-r88" #11: STATE_MAIN_I4: ISAKMP SA established
117 "l105-r88" #13: STATE_QUICK_I1: initiate
004 "l105-r88" #13: STATE_QUICK_I2: sent QI2, IPsec SA established {ESP=>0xa2e446c0 <0x65e3f32d AH=>0x30d23652 <0xe19311c1}

Dead Peer Detection은 똑같네요...[/code]

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.