두 개의 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되지 않으므로 연결을 설정할 수 있습니까 ??