하나의 인터페이스에서 들어오는 패킷을 읽고 다른 인터페이스를 통해 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 데이터로 다시 전송해야하기 때문에 요청하고 있습니다. 내가 여기서 뭔가를 놓치고 있다면 알려줘. 다시 한번 감사드립니다.
스택 오버플로에 오신 것을 환영합니다. 당신은 당신이 시도한 것을 잘 설명했습니다. 당신이 성취하고자하는 것을 우리에게 말할 수 있습니까? 당신이 쓰려고하는 프로그램의 기능은 무엇입니까? 나는 당신이 선택한 설계가 당신의 프로그램이 당신이 원래 의도 한 것을 할 수 없다고 생각합니다. 질문을 편집하고 질문 하단에 프로그램의 일반적인 목표를 추가하십시오. –