대본:

대본:

요약하자면

TUN 인터페이스에서 읽은 패킷은 동일한 TUN 인터페이스에 다시 기록될 때 경로를 찾지 못합니다.

전부

대본:

만 있는 기계에서는1인터넷에 연결된 NIC(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을 실행할 때:

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 요청은 도달하지 않습니다eth0그래서 그것은 로 가는 길을 찾을 수 있었습니다 4.2.2.4. IMHO 라우팅 규칙에 문제가 있지만 수정 방법을 찾을 수 없습니다.

어떤 의견이라도 환영합니다. 감사합니다.

답변1

물론 라우팅 규칙에 문제가 있습니다. 커널에 모든 패킷을 tun0:)에서 라우팅하도록 지시했습니다. 해당 패킷을 에서 다시 보내면 가 아닌 다시 tun0밖으로 라우팅됩니다 . 귀하의 경우에는 "역 경로 필터"로 인해 패킷이 삭제되는 것처럼 들립니다. 즉, 패킷이 들어온 동일한 인터페이스에서 패킷이 반송되는 것을 거부합니다.tun0eth0

관련 정보