2013-10-02 2 views
0

두 개의 tun 장치를 설정했습니다. I로부터 핑을 보내는 tun 장치 : 서버 프로세스에서 메시지를 수신하지 못했습니다.

ifconfig tun0 10.0.0.1 
ifconfig tun1 10.0.0.2 

을 이용하여 인터페이스를 설정 한 후

// the tuntap device is created using these flags 
ifr.ifr_flags = IFF_TUN | IFF_NO_PI; 
[...] 

fd_set fd_list; 


FD_ZERO(&fd_list); 
FD_SET(fd1, &fd_list); // fd1 is the tun device 
FD_SET(fd2, &fd_list); // fd2 is the udp socket 

int fds[] = {fd1, fd2}; 
while(select(max(fd1, fd2)+1, &fd_list, NULL, NULL, NULL) > -1) { 
    for(i = 0; i < 2; ++i) 
     if(FD_ISSET(fds[i], &fd_list)) { 
      nread = read(fds[i], buf, sizeof(buf)); 
      assert(nread > 0); 

      ret = write(fds[(i+1)%2], buf, nread); 
      if(ret == -1) 
       perror("write():"); 
     } 
} 

각 술통 장치에 기록되는 데이터는 단순한 루프를 사용하여 다른 술통 장치에 UDP 소켓을 통해 전달 하나의 장치가 다른 장치에 연결되어 있습니다.

ping -I tun1 10.0.0.1 

IPv4 패킷이 tun0의 UDP 소켓에서 수신되었으며이 패킷이 tun0에 올바르게 기록되었음을 알 수 있습니다. 또한 wireshark를 사용하여 tun0의 트래픽을 살펴보면 패킷이 tun0에 수신되었음을 알 수 있습니다. 그러나 ping 응답 패킷이 작성되지 않습니다. 내가 다시 어떤 연결이 설정되지

socat -d -d -d - TCP-LISTEN:2000,so-bindtodevice=tun0 & 
sleep 1 
echo 2 | socat -d -d -d - TCP:10.0.0.1:2000,so-bindtodevice=tun1 

을 사용하고 때

나는 그 ICMP 패킷에 대한 특별한 경우가 될 거라고 생각하지만. 연결 프로세스 (두 번째 socat 호출)는 TCP-SYN 패킷을 계속 실행하고 결국 시간 초과됩니다. 다시 wireshark를 사용하여 tun0의 트래픽을 관찰하면 TCP-SYN 패킷이 tun0 장치에 전달되었음을 알 수 있습니다.

왜이 패킷은 socat TCP-LISTEN 프로세스에 대해 forware되지 않으므로 연결을 설정할 수 있습니까 ??

답변