첫째, 커널 라우팅 테이블이 모든 아웃바운드 트래픽을 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/1
128.0.0.0/1
10.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
커널이 패킷을 에 넣으면 tun0
OpenVPN이 패킷을 읽을 수 있습니다. 이것이 tun/tap 인터페이스가 하는 일입니다. 이를 통해 애플리케이션은 커널에 의해 이 인터페이스에 입력된 패킷을 읽고 이 인터페이스에서 전송될 패킷을 쓸 수 있습니다(이는 다음과 같이 커널에 의해 처리됩니다. 패킷은 실제 네트워크 카드에서 나옵니다).
무차별 모드가 포함되지 않습니다. 문제는 tun/tap 인터페이스가 어떻게 작동하는지 이해하지 못한다는 것입니다.