2011-04-26 3 views
2

하나의 인터페이스에서 들어오는 패킷을 읽고 다른 인터페이스를 통해 UDP 패킷으로 전송하는 데 사용되는 tun/tap 장치가 있습니다. 이것을 구현할 수 있으며 ICMP 패킷을 읽어 tun/tap 인터페이스로 보내고 UDP를 사용하여 원격으로 가져올 수도 있습니다. 하지만 tun/tap 장치의 입력 인터페이스의 기본 게이트웨이를 변경하여 tun/tap에서 들어오는 모든 데이터를 읽을 수있을 때 문제가 발생합니다. 이 작업이 완료되면 라우팅이 올바르지 않아 UDP 패킷을 보낼 수 없습니다.들어오는 데이터를 읽으려면 TUN/TAP을 사용하고 UDP로 캡슐화하고 전송하십시오

또한 소켓 통신에서 "SO_BINDTODEVICE"옵션을 시도했지만 여전히 작동하지 않았습니다. tun/tap에서 write() 메서드를 사용하지 않았다는 것에 유의하십시오. 방금 read() 함수를 사용하여 데이터를 수집하고 UDP 소켓 통신을 통해 데이터를 보냈습니다.

내 접근 방식이 잘못되었거나이를 극복하기위한 다른 방법을 알려주십시오. 감사.

/********More Details********/ 

감사합니다. Rob.

내가 달성하고자하는 것은 대기 시간이 긴 채널에서 IP 기반 헤더 통신 (ROHC)을 시뮬레이션하는 것입니다.

여기에는 4 대의 가상 시스템이 있습니다. VM1은 일반적인 데스크톱 컴퓨터입니다. VM2는 VM1에서 tun/tap을 사용하여 패킷을 가져오고 VM4와의 UDP 기반 통신을 수행하는 게이트웨이입니다. VM3은 대기 시간, 오류율 등의 매개 변수를 설정할 수있는 채널입니다. VM4는 WAN에 연결됩니다. VM1의 사용자는 평소처럼 WAN을 탐색 할 수 있어야합니다. 아래 다이어그램을 찾으십시오.

IP Packets 
    | 
    | +------------------+  +--------------+ +----------------+ 
    '---|eth1.....   |  |    | |    | 
     |  |   |  |    | |    | 
     | tun/tap  |  |   eth0|___|UDP Sock eth0|___ 
     |  |   |  |    | | |  | | | 
     |  ..UDP Sock|_____|eth1   | | |  | | | 
     |     |  |    | | +tun/tap+ | ' 
     +------------------+  +--------------+ +----------------+ WAN 
      VM2     VM3(Channel)    VM4 

업데이트 :

감사 Tommi. 솔루션이 효과적이었습니다. UDP 패킷을 최종 NAT 게이트웨이로 전달할 수 있습니다. 그러나 지금까지는 반대로 작동하지 못했습니다. iptables를 사용하여 가면을 사용하도록 설정하고 VM1에서 tuntap에 대한 호스트 경로를 설정했지만 작동하지 않았습니다. 몇 가지 질문이 있습니다. 1) VM4에서 UDP 데이터를 수신하고 tun/tap에 기록합니다. 이것은 커널에 의해 WAN으로 라우팅됩니다. 하지만 들어오는 패킷의 경우 다시 tun/tap을 사용하여 읽어야합니까? 이 경우 다른 스레드에서 읽고 쓰는 것이 필요합니까? UDP 데이터로 다시 전송해야하기 때문에 요청하고 있습니다. 내가 여기서 뭔가를 놓치고 있다면 알려줘. 다시 한번 감사드립니다.

+0

스택 오버플로에 오신 것을 환영합니다. 당신은 당신이 시도한 것을 잘 설명했습니다. 당신이 성취하고자하는 것을 우리에게 말할 수 있습니까? 당신이 쓰려고하는 프로그램의 기능은 무엇입니까? 나는 당신이 선택한 설계가 당신의 프로그램이 당신이 원래 의도 한 것을 할 수 없다고 생각합니다. 질문을 편집하고 질문 하단에 프로그램의 일반적인 목표를 추가하십시오. –

답변

1

udp 패킷도 tuntap 인터페이스로 라우팅됩니다. (음, 일부 설정에 따라 폐기 될 수 있음). 전송할 udp 피어에 대한 라우트 규칙, 호스트 규칙 또는 다른 통신을 방해하지 않는 더 작은 네트워크 규칙을 추가해야합니다.

+0

감사합니다. Tommi. 나는이 방법을 시도하고 알려 드리겠습니다. – snibu

+0

이제 당신이 성취하려는 것을 봅니다. 몇 가지 추가 조언 : VM4 eth0에 MASQUERADE 규칙을 넣고 VM1 IP 및 tun/tap 인터페이스를 사용하여 vm4에 유사한 호스트 규칙을 추가하십시오. vm2의 경우 eth1 및 eth2 네트워크가 모두 라우팅 테이블에 있어야합니다. (기본값 이외의 넷 마스크 사용) 그러면 tun/tap 장치에 대한 기본 경로를 설정할 수 있습니다. 그런 식으로 udp 패킷을 vm3으로, vm1을 사용하는 터널링 된 트래픽은 경로를 찾습니다.나는 많은 것을 했어. 작동하지 않는지 물어봐도된다. 또한 뭔가를 간과했을 수도 있습니다. –

+0

안녕하세요 토미. 위의 업데이트 섹션을 참조하십시오. 여기서는 코멘트 섹션에 전체 내용을 쓸 수 없습니다. 감사. – snibu