Networking

OpenVPN 如何調整進入 tun0 的所有流量?

  • July 12, 2018

首先,我了解核心路由表將所有出站流量轉發到tun0. 但是,它們不會轉到本地tun0介面具有的 IP 地址(例如10.13.10.6),而是轉到目標地址(例如10.13.10.5)。在這種情況下,OpenVPN 如何連接到所有的流量tun0?正如我所聽到的,**涉及一種稱為原始套接字的東西,**但我想了解它是如何具體確保這種行為的。

再次查看路由表 ( ip route)。你會注意到有一個default路由到10.13.10.5,或者一對0.0.0.0/1/128.0.0.0/1路由到10.13.10.5(這只是一個允許 OpenVPN 保持預設路由的技巧,儘管它變得不活動),並且這個路由通過 tun0.

擁有什麼 IP 並不重要tun0,重要的是網關IP,它恰好10.13.10.5位於tun0.

那麼OpenVPN是如何讓所有流量進入的tun0呢?通過提供路由,就像沒有 OpenVPN 一樣,所有流量都流向eth0(或wlan0,或預設路由所說的任何內容)。

OpenVPN 沒有做任何特別的事情。特別是,它不使用原始套接字,它創建了一個 tun/tap 介面。

編輯

OpenVPN 不會“監聽綁定到另一端的流量”。

Linux 核心看到一個網路數據包時,它會查詢路由表來決定如何處理該數據包。如果路由表顯示“10.13.10.5通過”將所有數據包發送到網關tun0,那麼這就是 Linux 核心所做的。OpenVPN 不會以任何方式參與其中。

現在 OpenVPN 已經創建了tun0,所以當核心放入一個數據包時tun0,OpenVPN 可以讀取這個數據包。這就是 tun/tap 介面的作用:它允許應用程序讀取放入該介面的數據包(由核心),並寫入將從該介面發出的數據包(也將像核心一樣處理,就像如果數據包來自真實的網卡)。

不涉及混雜模式。是不是你不明白 tun/tap 介面是如何工作的?

引用自:https://unix.stackexchange.com/questions/454904