2013-04-16 4 views
1

TUN/TAP 인터페이스를 사용하여 TCP 스택을 테스트 할 수 있습니까? 나는이 같은 메커니즘을 생각 해요 :TUN/TAP을 사용하여 사용자 공간 TCP/IP 스택을 테스트하십시오.

+--------------------------------+ 
    | TCP Client/Server   | 
    | socket(AF_INET, SOCK_STREAM) | 
    | e.g. HTTP Server/Client  | 
    +----------+---------------------+ 
      | 
      | +---------------------+ 
      | | TUN Device   | 
      | | (kernel does TCP) | 
      | +---------------------+ 
      |      
    +------------+----------------------+ 
    | Linux Kernel + Forwarding Magic | 
    +-----------------------------------+ 
      | 
      | +---------------------+ 
      | |TAP Device   | 
      | |Raw ethernet frames | 
      | +---------------------+ 
      | 
+----------+----------------------+ 
| Raw Socket API    | 
| socket(AF_PACKET, SOCK_RAW)  | 
| User mode TCP Stack over raw API| 
| a HTTP client/server over it | 
+---------------------------------+ 

최고 상자를 tun 디바이스로 라우팅 된 IP 주소, 에서 수신, (말) 표준 수정되지 않은 HTTP 서버입니다. 아래쪽 상자는 원시 TCP/IP 스택에서 작동하는 사용자 지정 TCP/IP 스택입니다.

질문 :

  1. 는 두 개의 TAP를 연결하는 것이 가능은/TUN의 장치는이 처럼 다시 다시?
  2. 여기서 '다리'가 필요합니까? 그 밖의 다른 이야기는 입니다.
  3. 마지막으로, 더 좋은 방법이 있습니까?

고지.

추신 : 나는 같은 기계에서 모두 실행하겠습니다. '상자'는 여기에서 프로세스 또는 설정 또는 프로세스와 비슷합니다.

+0

두 장치를 실제로 만들 필요는 없습니다. 이것은 원시 패킷을 얻는 방법을 보여줄 수있는 명령 세트입니다. # socat STDOUT TUN : 10.0.0.1/24,up; # 핑 10.0.0.2 – vrdhn

답변

1

합리적인 설계인지 확실하지 않습니다. 그것은 당신이 달성하고자하는 것에 정확히 달려 있습니다.

확실하게 트래픽을 상단 상자의 TUN 장치로 보낼 수는 있지만 TUN 장치를 통해 들어오는 트래픽을 수집하기 위해 해당 상자에서 실행되는 프로세스가 있어야합니다. 이 프로세스는 실제 사용자 정의 TCP/IP 스택 일 수도 있고 패킷을 맨 아래 상자로 터널링하는 것이 될 수도 있습니다. 다른 컴퓨터 (하단 상자)에서 사용자 지정 TCP/IP 스택을 실행하려는 경우 터널이 필요하다고 가정합니다. 이 경우에 문제가되는 터널 소프트웨어가 OpenVPN과 같은 이미 존재하는 것이 유리하다고 생각할 수도 있습니다.

그러나 내 생각에 사용자의 필요는 상단 상자에 터널이없는 표준 TCP/IP 스택을 실행하고 실제 상자 사이에 패킷을 라우팅하는 라우터 역할을하는 것입니다 인터페이스 (패킷이 맨 위 상자에서 도착하는 곳) 및 TUN 장치. 그리고 TUN 장치의 사용자 공간 끝에 사용자 정의 TCP/IP 스택이 있습니다.

어느 경우에도 원시 소켓이나 실제로 소켓을 사용해야 할 수도 있습니다. 어느 쪽이든 사용자 정의 TCP/IP 스택은 TUN 장치에서 프레임을 수신하고 (가능하면 상단 호스트에서 터널링 가능, 하단 호스트에서 직접 가능), 원래의 프레임을 동일한 TUN 장치에 주입합니다.