네트웍 프로그래밍 관련 질문입니다.

xmlParser의 이미지

기존의 tcp 헤더와 ip 헤더 사이에 ah라는 헤더를 삽입하고
데이터를 교환하고 싶습니다.
커널을 수정해야 한다는 얘기를 들었습니다만
어디를 어떻게 수정을 해야할 지 조금 답답하네요

음..제가 생각해 본 것은
기존의 소켓관련한 시스템 함수들의 소스를 수정
해서 커널을 컴파일을 해야 새롭게 정의된
패킷이 전송이 될거 같다는 생각이 드는데요

음...tcp관련한 시스템함수들을 쭉 살펴보았습니다.
tcp 패킷이 정의되어서 전송되는 함수에서
새롭게 추가되는 헤더 정보를 추가해서
ip layer로 내려보내면 될거 같다는 생각이
문득 들긴 하는데요....

휴....만약 제가 생각한 것들이 맞는다면
새롭게 수정된 시스템 함수들을 다시 컴파일 해서
커널에서 호출할 수 있도록 할 수 있는 방법이
어떤건지도 알고 싶습니다.

먼저 감사드립니다. 그럼...

tae의 이미지

ah 라면 L2TP 나 VPN 에서 부르는 그 ah 인가요?

그렇다면 커널 모듈 까지 수정 할 필요 없이

http://www.packetfactory.net/libnet 에 있는

libnet 중 libnet_build_ipsec_ah 로 되지 않을까 싶네요..

xmlParser의 이미지

그걸 사용하면 몇가지 문제점이 있다고 생각이 들어서요
그걸 이용해보았지만..글세요 제가 잘 몰라서
제대로 이용하지 못하고 있는지도 모르겠지만
일단 그 라이브러리를 사용하면 패킷하나는 보낼 수 있습니다.
그런데 만약 파일을 전송한다고 가정하면 매 패킷마다
헤더정보를 붙혀주어야 합니다.
그런것들은 기존의 소켓프로그래밍에서는 운영체제에서
해주는 것들이라 신경쓰지 않아도 되지만
새로운 패킷을 정의하면 새롭게 추가되는 정보를 운영체제에서
알아야 하기 때문에 시스템 함수들을 수정해야 하지 않나 하는
생각이 들더라구요....

혹 제가 잘못생각하는 부분이 있을것도 같은데요...

VPN 구현 해보신 조언 좀 부탁드립니다. 간단한 VPN 구현을
프로젝트 중인데(transport mode,,host to host간 vpn)
...휴 이거 정말 어렵네요..

tae의 이미지

커널단의 수정이라
LV 관련해서 지금 커널단 코딩을 보고 잇는데
커널단의 코딩을 해보신 분이라면 몰라두 않보신 분이라면
훨씬 힘들어 질꼬 같은뎅

지금 하고 있는 프로젝트가 비스꾸무리한거라서염.

http://sourceforge.net/projects/l2tpd 에 있는 lt2p 를

보시는것도 좋을꺼 같네요

같이 스터디 해보시는 것도 좋을꺼 같은데..

msn 이나 메일로 연락 주셔서 같이 고민 해보면 좋을꺼 같네요....

수거염.....^^;

charsyam의 이미지

비트 프로젝트 같은 책을 보면, 자세히는 아니지만, 감은 잡을 수 있을 정도로

설명이 있습니다. 저도 IPSec 을 그걸 보면서 Linux Kernel 에다가 구현한

적이 있는데... 쩝... 하여튼 잘 죽으니깐 힘들더라구요 ^^

고운 하루되세요.

=========================
CharSyam ^^ --- 고운 하루
=========================

xmlParser의 이미지

조금 참고가 되었네요. 서점에 가서 비트 프로젝트 책좀 뒤져봐야
겠네요. 기간이 며칠 남아 있지 않아서....음 될지 안될지 모르겠지만
하는 데 까지 해봐야겠네요. ㅜ.ㅜ

제가 할려는 거는 IPsec protocol을 이용한 VPN 입니다.
간단하게 파일교환하는 것을 보여주려고 하는 것인데...휴...
지금까지 열라 삽질만 하다가 시간만 보내고...

아무튼 답변 주신분들 모두 감사드립니다.

제 msn 아이디는 ssajava@hotmail.com 입니다

kyong의 이미지

xmlParser wrote:
기존의 tcp 헤더와 ip 헤더 사이에 ah라는 헤더를 삽입하고
데이터를 교환하고 싶습니다.
커널을 수정해야 한다는 얘기를 들었습니다만
어디를 어떻게 수정을 해야할 지 조금 답답하네요

음..제가 생각해 본 것은
기존의 소켓관련한 시스템 함수들의 소스를 수정
해서 커널을 컴파일을 해야 새롭게 정의된
패킷이 전송이 될거 같다는 생각이 드는데요

음...tcp관련한 시스템함수들을 쭉 살펴보았습니다.
tcp 패킷이 정의되어서 전송되는 함수에서
새롭게 추가되는 헤더 정보를 추가해서
ip layer로 내려보내면 될거 같다는 생각이
문득 들긴 하는데요....

휴....만약 제가 생각한 것들이 맞는다면
새롭게 수정된 시스템 함수들을 다시 컴파일 해서
커널에서 호출할 수 있도록 할 수 있는 방법이
어떤건지도 알고 싶습니다.

먼저 감사드립니다. 그럼...


ip layer에서 protocol을 추가하는 것은
커널 수정없이 모듈방식으로도 가능합니다.
inet_add_protocol 함수를 살펴 보세요.
ipsec 구현은 freeswan이나 kame와 같은 프라젝트를 참고 하시고요.
아래 링크에서 또 간단히 참고 할 수는 있겠네요.
http://ringstrom.mine.nu/ipsec_tunnel/
순수하게 user space에서 처리한다면,
아래 사이트가 도움이 될 것입니다.
http://vtun.sourceforge.net/
clapton의 이미지

리눅스에서 IPSec을 이용한 VPN을 구현하시고자 한다면
netfilter에 대해서 연구해보시면 답이 나올듯합니다. netfilter는 리눅스에서
network packet을 검사하고 혹은 변형시키기 편하게 만든 일종의
framework입니다. 물론 커널에서 동작하고 있습니다.

리눅스에서 많이 사용하는 방화벽인 iptables 같은 놈들도 netfilter를
이용해서 구현하고 있고요. IPSec SA는 manual하게 혹은 IKE를 이용해서
만드시고 그 SA 정보를 가지고 netfilter의 특정부분에서 packet을 잡아서
AH 처리를 하시면 되겠지요.

리눅스의 free IPSec 구현인 Frees/WAN도 그런식으로 구현되어 있을겁니다.

http://www.freeswan.org

kyong의 이미지

clapton wrote:
리눅스에서 IPSec을 이용한 VPN을 구현하시고자 한다면
netfilter에 대해서 연구해보시면 답이 나올듯합니다. netfilter는 리눅스에서
network packet을 검사하고 혹은 변형시키기 편하게 만든 일종의
framework입니다. 물론 커널에서 동작하고 있습니다.

리눅스에서 많이 사용하는 방화벽인 iptables 같은 놈들도 netfilter를
이용해서 구현하고 있고요. IPSec SA는 manual하게 혹은 IKE를 이용해서
만드시고 그 SA 정보를 가지고 netfilter의 특정부분에서 packet을 잡아서
AH 처리를 하시면 되겠지요.

리눅스의 free IPSec 구현인 Frees/WAN도 그런식으로 구현되어 있을겁니다.

http://www.freeswan.org


netfilter 는 방화벽을 위한 것이지 IPsec 구현에 도움이 될 것 같지 않네요.
제가 알기론 freeswan에서 netfilter code에 의존해서 구현된 부분은 없습니다.
netfilter가 ipsec traffic 을 제어할 수는 있겠지요.
kyong의 이미지

xmlParser wrote:
그걸 사용하면 몇가지 문제점이 있다고 생각이 들어서요
그걸 이용해보았지만..글세요 제가 잘 몰라서
제대로 이용하지 못하고 있는지도 모르겠지만
일단 그 라이브러리를 사용하면 패킷하나는 보낼 수 있습니다.
그런데 만약 파일을 전송한다고 가정하면 매 패킷마다
헤더정보를 붙혀주어야 합니다.
그런것들은 기존의 소켓프로그래밍에서는 운영체제에서
해주는 것들이라 신경쓰지 않아도 되지만
새로운 패킷을 정의하면 새롭게 추가되는 정보를 운영체제에서
알아야 하기 때문에 시스템 함수들을 수정해야 하지 않나 하는
생각이 들더라구요....

혹 제가 잘못생각하는 부분이 있을것도 같은데요...

VPN 구현 해보신 조언 좀 부탁드립니다. 간단한 VPN 구현을
프로젝트 중인데(transport mode,,host to host간 vpn)
...휴 이거 정말 어렵네요..


VPN을 제대로 구현하려면 tunnel mode로 하셔야 합니다.
transport mode로 사용하는 경우는 적다고 생각됩니다.
clapton의 이미지

kyong wrote:
clapton wrote:
리눅스에서 IPSec을 이용한 VPN을 구현하시고자 한다면
netfilter에 대해서 연구해보시면 답이 나올듯합니다. netfilter는 리눅스에서
network packet을 검사하고 혹은 변형시키기 편하게 만든 일종의
framework입니다. 물론 커널에서 동작하고 있습니다.

리눅스에서 많이 사용하는 방화벽인 iptables 같은 놈들도 netfilter를
이용해서 구현하고 있고요. IPSec SA는 manual하게 혹은 IKE를 이용해서
만드시고 그 SA 정보를 가지고 netfilter의 특정부분에서 packet을 잡아서
AH 처리를 하시면 되겠지요.

리눅스의 free IPSec 구현인 Frees/WAN도 그런식으로 구현되어 있을겁니다.

http://www.freeswan.org


netfilter 는 방화벽을 위한 것이지 IPsec 구현에 도움이 될 것 같지 않네요.
제가 알기론 freeswan에서 netfilter code에 의존해서 구현된 부분은 없습니다.
netfilter가 ipsec traffic 을 제어할 수는 있겠지요.

Frees/Wan의 경우는 제가 넘겨짚었군요. 그렇게 되어있지 않을까 예상했
었습니다.

netfilter는 방화벽만을 위한것도 아니고 NAT만을 위한것도 아닙니다.
netfilter를 이용하면 좀 더 편하게 IPSec을 구현할 수도 있습니다.
방화벽과 IPSec VPN의 차이가 무엇입니까? 결국 어떤 traffic 혹은 packet
을 선택해서 그 traffic 혹은 packet에 어떤 action을 수행한다는 점에서
사촌관계 비슷합니다. 방화벽이 allow 혹은 deny 하는 지점에서 IPSec은
암호화나 복호화를 수행하면 됩니다. netfilter는 packet을 어디서 hooking
하고(취하고) 어떤 action을 취할 것인가를 index와 function을 이용한
table로 정의할 수 있도록 해주는 framework입니다. 리눅스의 bridge
module도 netfilter를 이용해서 구현하고 있습니다. (이건 넘겨짚은 것이
아니고 소스를 직접 확인한 겁니다. ^^)

kyong의 이미지

clapton wrote:
kyong wrote:
clapton wrote:
리눅스에서 IPSec을 이용한 VPN을 구현하시고자 한다면
netfilter에 대해서 연구해보시면 답이 나올듯합니다. netfilter는 리눅스에서
network packet을 검사하고 혹은 변형시키기 편하게 만든 일종의
framework입니다. 물론 커널에서 동작하고 있습니다.

리눅스에서 많이 사용하는 방화벽인 iptables 같은 놈들도 netfilter를
이용해서 구현하고 있고요. IPSec SA는 manual하게 혹은 IKE를 이용해서
만드시고 그 SA 정보를 가지고 netfilter의 특정부분에서 packet을 잡아서
AH 처리를 하시면 되겠지요.

리눅스의 free IPSec 구현인 Frees/WAN도 그런식으로 구현되어 있을겁니다.

http://www.freeswan.org


netfilter 는 방화벽을 위한 것이지 IPsec 구현에 도움이 될 것 같지 않네요.
제가 알기론 freeswan에서 netfilter code에 의존해서 구현된 부분은 없습니다.
netfilter가 ipsec traffic 을 제어할 수는 있겠지요.

Frees/Wan의 경우는 제가 넘겨짚었군요. 그렇게 되어있지 않을까 예상했
었습니다.

netfilter는 방화벽만을 위한것도 아니고 NAT만을 위한것도 아닙니다.
netfilter를 이용하면 좀 더 편하게 IPSec을 구현할 수도 있습니다.
방화벽과 IPSec VPN의 차이가 무엇입니까? 결국 어떤 traffic 혹은 packet
을 선택해서 그 traffic 혹은 packet에 어떤 action을 수행한다는 점에서
사촌관계 비슷합니다. 방화벽이 allow 혹은 deny 하는 지점에서 IPSec은
암호화나 복호화를 수행하면 됩니다. netfilter는 packet을 어디서 hooking
하고(취하고) 어떤 action을 취할 것인가를 index와 function을 이용한
table로 정의할 수 있도록 해주는 framework입니다. 리눅스의 bridge
module도 netfilter를 이용해서 구현하고 있습니다. (이건 넘겨짚은 것이
아니고 소스를 직접 확인한 겁니다. ^^)


netfilter를 부분적으로 활용할 수는 있겠지만 ipsec 구현을 위해서 design 된
것이 아님을 말하고 싶네요.
그리고 bridge는 ethernet layer 에서 사용되기 때문에 netfilter 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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.