상상하다:

상상하다:

요컨대

TUN 인터페이스에서 읽은 패킷은 동일한 TUN 인터페이스에 다시 기록될 때 경로를 찾을 수 없습니다.

전체에서

상상하다:

기계에는 오직1NIC(eth0)가 인터넷에 연결되어 있으면 TUN 인터페이스에서 IP 패킷을 읽는 애플리케이션을 작성했습니다.

  • 변경 사항 없이 동일한 TUN 인터페이스에 패킷을 다시 씁니다.
  • 패킷 차단
  • 패킷을 변경하고(예: 페이로드 암호화) 조작된 패킷을 TUN 인터페이스에 다시 씁니다.

완벽한:

다음 단계를 완료했습니다.

  1. 내 프로그램을 실행합니다. TUN 장치를 할당 및 인스턴스화하고 장치가 시작될 때까지 기다립니다.
  2. 그런 다음 다음 명령을 실행합니다.

    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

  3. 이제 내 프로그램이 성공적으로 패킷 읽기를 시작합니다(그리고 그 내용을 인쇄/기록합니다).

  4. 내 프로그램은 패킷을 다시 씁니다.아무것도 변하지 않아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다시 라우팅됩니다 . 귀하의 경우를 제외하고는 "역방향 경로 필터"로 인해 패킷이 삭제되는 것처럼 들립니다. 즉, 입력한 것과 동일한 인터페이스에서 패킷이 반송되는 것을 거부합니다.tun0eth0

관련 정보