네트웍 프로그래밍 관련 질문입니다.
글쓴이: xmlParser / 작성시간: 수, 2003/05/28 - 3:07오후
기존의 tcp 헤더와 ip 헤더 사이에 ah라는 헤더를 삽입하고
데이터를 교환하고 싶습니다.
커널을 수정해야 한다는 얘기를 들었습니다만
어디를 어떻게 수정을 해야할 지 조금 답답하네요
음..제가 생각해 본 것은
기존의 소켓관련한 시스템 함수들의 소스를 수정
해서 커널을 컴파일을 해야 새롭게 정의된
패킷이 전송이 될거 같다는 생각이 드는데요
음...tcp관련한 시스템함수들을 쭉 살펴보았습니다.
tcp 패킷이 정의되어서 전송되는 함수에서
새롭게 추가되는 헤더 정보를 추가해서
ip layer로 내려보내면 될거 같다는 생각이
문득 들긴 하는데요....
휴....만약 제가 생각한 것들이 맞는다면
새롭게 수정된 시스템 함수들을 다시 컴파일 해서
커널에서 호출할 수 있도록 할 수 있는 방법이
어떤건지도 알고 싶습니다.
먼저 감사드립니다. 그럼...
Forums:
참고
ah 라면 L2TP 나 VPN 에서 부르는 그 ah 인가요?
그렇다면 커널 모듈 까지 수정 할 필요 없이
http://www.packetfactory.net/libnet 에 있는
libnet 중 libnet_build_ipsec_ah 로 되지 않을까 싶네요..
네 맞습니다. 그런데
그걸 사용하면 몇가지 문제점이 있다고 생각이 들어서요
그걸 이용해보았지만..글세요 제가 잘 몰라서
제대로 이용하지 못하고 있는지도 모르겠지만
일단 그 라이브러리를 사용하면 패킷하나는 보낼 수 있습니다.
그런데 만약 파일을 전송한다고 가정하면 매 패킷마다
헤더정보를 붙혀주어야 합니다.
그런것들은 기존의 소켓프로그래밍에서는 운영체제에서
해주는 것들이라 신경쓰지 않아도 되지만
새로운 패킷을 정의하면 새롭게 추가되는 정보를 운영체제에서
알아야 하기 때문에 시스템 함수들을 수정해야 하지 않나 하는
생각이 들더라구요....
혹 제가 잘못생각하는 부분이 있을것도 같은데요...
VPN 구현 해보신 조언 좀 부탁드립니다. 간단한 VPN 구현을
프로젝트 중인데(transport mode,,host to host간 vpn)
...휴 이거 정말 어렵네요..
^^;
커널단의 수정이라
LV 관련해서 지금 커널단 코딩을 보고 잇는데
커널단의 코딩을 해보신 분이라면 몰라두 않보신 분이라면
훨씬 힘들어 질꼬 같은뎅
지금 하고 있는 프로젝트가 비스꾸무리한거라서염.
http://sourceforge.net/projects/l2tpd 에 있는 lt2p 를
보시는것도 좋을꺼 같네요
같이 스터디 해보시는 것도 좋을꺼 같은데..
msn 이나 메일로 연락 주셔서 같이 고민 해보면 좋을꺼 같네요....
수거염.....^^;
비트 프로젝트 같은 책을 보면, 자세히는 아니지만, 감은 잡을 수 있을
비트 프로젝트 같은 책을 보면, 자세히는 아니지만, 감은 잡을 수 있을 정도로
설명이 있습니다. 저도 IPSec 을 그걸 보면서 Linux Kernel 에다가 구현한
적이 있는데... 쩝... 하여튼 잘 죽으니깐 힘들더라구요 ^^
고운 하루되세요.
=========================
CharSyam ^^ --- 고운 하루
=========================
thanks
조금 참고가 되었네요. 서점에 가서 비트 프로젝트 책좀 뒤져봐야
겠네요. 기간이 며칠 남아 있지 않아서....음 될지 안될지 모르겠지만
하는 데 까지 해봐야겠네요. ㅜ.ㅜ
제가 할려는 거는 IPsec protocol을 이용한 VPN 입니다.
간단하게 파일교환하는 것을 보여주려고 하는 것인데...휴...
지금까지 열라 삽질만 하다가 시간만 보내고...
아무튼 답변 주신분들 모두 감사드립니다.
제 msn 아이디는 ssajava@hotmail.com 입니다
Re: 네트웍 프로그래밍 관련 질문입니다.
ip layer에서 protocol을 추가하는 것은
커널 수정없이 모듈방식으로도 가능합니다.
inet_add_protocol 함수를 살펴 보세요.
ipsec 구현은 freeswan이나 kame와 같은 프라젝트를 참고 하시고요.
아래 링크에서 또 간단히 참고 할 수는 있겠네요.
http://ringstrom.mine.nu/ipsec_tunnel/
순수하게 user space에서 처리한다면,
아래 사이트가 도움이 될 것입니다.
http://vtun.sourceforge.net/
IPSec을 이용한 VPN의 구현
리눅스에서 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
Re: IPSec을 이용한 VPN의 구현
netfilter 는 방화벽을 위한 것이지 IPsec 구현에 도움이 될 것 같지 않네요.
제가 알기론 freeswan에서 netfilter code에 의존해서 구현된 부분은 없습니다.
netfilter가 ipsec traffic 을 제어할 수는 있겠지요.
Re: 네 맞습니다. 그런데
VPN을 제대로 구현하려면 tunnel mode로 하셔야 합니다.
transport mode로 사용하는 경우는 적다고 생각됩니다.
Re: IPSec을 이용한 VPN의 구현
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를 이용해서 구현하고 있습니다. (이건 넘겨짚은 것이
아니고 소스를 직접 확인한 겁니다. ^^)
Re: IPSec을 이용한 VPN의 구현
netfilter를 부분적으로 활용할 수는 있겠지만 ipsec 구현을 위해서 design 된
것이 아님을 말하고 싶네요.
그리고 bridge는 ethernet layer 에서 사용되기 때문에 netfilter code가
필요할 이유가 없습니다.
댓글 달기