OpenVPN은 tun0으로 들어오는 모든 트래픽을 어떻게 규제합니까?

OpenVPN은 tun0으로 들어오는 모든 트래픽을 어떻게 규제합니까?

첫째, 커널 라우팅 테이블이 모든 아웃바운드 트래픽을 tun0.tun0로컬 인터페이스가 소유한 IP 주소에는 액세스하지 않습니다.(예: 10.13.10.6)을 대상 주소(예: 10.13.10.5) 대신에 사용합니다. 이 경우 OpenVPN은 들어오는 모든 트래픽을 어떻게 연결합니까 tun0? 내가 아는 한,여기에는 원시 소켓이라는 것이 포함됩니다.하지만 이것이 얼마나 구체적으로 이러한 동작을 보장하는지 이해하고 싶습니다.

답변1

라우팅 테이블( ip route)을 다시 살펴보세요. default에 대한 경로 또는 / 에 10.13.10.5대한 경로 쌍이 있음을 알 수 있습니다 (이는 OpenVPN이 비활성화되더라도 기본 경로를 유지하도록 허용하는 트릭일 뿐입니다).0.0.0.0/1128.0.0.0/110.13.10.5이 경로는 통과합니다. tun0.

당신이 어떤 IP를 가지고 있는지는 중요하지 않습니다 tun0.게이트웨이10.13.10.5의 반대편에 있는 IP입니다 tun0.

그렇다면 OpenVPN은 어떻게 모든 트래픽을 허용합니까 tun0? 경로를 제공하면 OpenVPN이 없을 때와 마찬가지로 모든 트래픽이 eth0(또는 기본 경로에 명시된 대로) 이동하게 됩니다 .wlan0

OpenVPN은 특별한 작업을 수행하지 않습니다. 특히 원시 소켓을 사용하지 않고 tun/tap 인터페이스를 생성합니다.

편집하다

OpenVPN은 "상대방으로 향하는 트래픽을 수신"하지 않습니다.

언제. . . 언제리눅스 커널네트워크 패킷을 보고 상담합니다.라우팅 테이블패킷 처리 방법을 결정합니다. 라우팅 테이블에 " 10.13.10.5모든 패킷을 다음을 통해 게이트웨이로 전송 tun0"이라고 표시되면 이것이 Linux 커널이 수행하는 작업입니다. OpenVPN은 어떤 방식으로도 관여하지 않습니다.

이제 OpenVPN이 생성되었으므로 tun0커널이 패킷을 에 넣으면 tun0OpenVPN이 패킷을 읽을 수 있습니다. 이것이 tun/tap 인터페이스가 하는 일입니다. 이를 통해 애플리케이션은 커널에 의해 이 인터페이스에 입력된 패킷을 읽고 이 인터페이스에서 전송될 패킷을 쓸 수 있습니다(이는 다음과 같이 커널에 의해 처리됩니다. 패킷은 실제 네트워크 카드에서 나옵니다).

무차별 모드가 포함되지 않습니다. 문제는 tun/tap 인터페이스가 어떻게 작동하는지 이해하지 못한다는 것입니다.

관련 정보