まず、カーネルルーティングテーブルは、すべてのアウトバウンドトラフィックを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は特別な作業を行いません。特に、rawソケットを使用せずにtun / tapインターフェースを作成します。
編集する
OpenVPNは「相手に向かうトラフィックを受信する」ことはありません。
いつ。 。 。いつLinuxカーネルネットワークパケットを見て相談します。ルーティングテーブルパケットの処理方法を決定します。ルーティングテーブルに「10.13.10.5
すべてのパケットを以下を介してゲートウェイに転送するtun0
」と表示されている場合、これはLinuxカーネルが実行するアクションです。 OpenVPNはいかなる方法でも関与しません。
OpenVPNが作成されたので、カーネルがパケットを入れると、tun0
OpenVPNはtun0
パケットを読み取ることができます。これが tun/tap インタフェースが行うことです。これにより、アプリケーションはカーネルによってこのインターフェイスに入力されたパケットを読み取り、このインターフェイスで送信されるパケットを書き込むことができます(これはカーネルによって処理されます。パケットは実際のネットワークカードから来ます)。
無差別モードは含まれません。問題は、tun / tapインターフェースがどのように機能するかを理解していないことです。