요컨대
TUN 인터페이스에서 읽은 패킷은 동일한 TUN 인터페이스에 다시 기록될 때 경로를 찾을 수 없습니다.
전체에서
상상하다:
기계에는 오직1NIC(eth0)가 인터넷에 연결되어 있으면 TUN 인터페이스에서 IP 패킷을 읽는 애플리케이션을 작성했습니다.
- 변경 사항 없이 동일한 TUN 인터페이스에 패킷을 다시 씁니다.
- 패킷 차단
- 패킷을 변경하고(예: 페이로드 암호화) 조작된 패킷을 TUN 인터페이스에 다시 씁니다.
완벽한:
다음 단계를 완료했습니다.
- 내 프로그램을 실행합니다. TUN 장치를 할당 및 인스턴스화하고 장치가 시작될 때까지 기다립니다.
그런 다음 다음 명령을 실행합니다.
ifconfig tun0 up ifconfig tun0 10.0.0.2 route add -net 0.0.0.0 netmask 0.0.0.0 dev tun0 echo 1 > /proc/sys/net/ipv4/ip_forward
이제 내 프로그램이 성공적으로 패킷 읽기를 시작합니다(그리고 그 내용을 인쇄/기록합니다).
- 내 프로그램은 패킷을 다시 씁니다.아무것도 변하지 않아tun0 장치 반환
질문:
다시 쓰여진 데이터 패킷은 eth0 또는 애플리케이션 계층과 같은 반환 경로를 찾을 수 없습니다. 예를 들어, 핑을 하면:
ping 4.2.2.4
다른 터미널에서:
tshark -i tun0
tun0(내 프로그램이기도 함)에서 ICMP 에코 패킷이 표시됩니다.
10.0.0.2 → 4.2.2.4 ICMP 84 Echo (ping) request id=0x14b1, seq=2/512, ttl=64
10.0.0.2 → 4.2.2.4 ICMP 84 Echo (ping) request id=0x14b1, seq=3/768, ttl=64
10.0.0.2 → 4.2.2.4 ICMP 84 Unknown ICMP (obsolete or malformed?)
내 프로그램은 패킷을 tun0에 다시 쓰고 tshark
이를 확인합니다(위의 코드 조각에서).
하지만 ICMP 요청이 도착하지 않습니다.이더넷 0그래서 길을 찾을 수 있습니다 4.2.2.4
. IMHO 라우팅 규칙에 문제가 있지만 수정하는 방법을 모르겠습니다.
어떤 의견이라도 환영합니다.
답변1
물론 라우팅 규칙에 문제가 있습니다. 커널에 모든 패킷을 라우팅하도록 지시하는 것입니다 tun0
. :) 해당 패킷을 다시 보내면 대신 tun0
다시 라우팅됩니다 . 귀하의 경우를 제외하고는 "역방향 경로 필터"로 인해 패킷이 삭제되는 것처럼 들립니다. 즉, 입력한 것과 동일한 인터페이스에서 패킷이 반송되는 것을 거부합니다.tun0
eth0