FreeBSDを使用してOpenVPNを介して特定のインターフェイスでトラフィックをルーティングする

FreeBSDを使用してOpenVPNを介して特定のインターフェイスでトラフィックをルーティングする

FreeBSDクライアントと(Arch)Linuxサーバーの間にOpenVPNを設定したいと思います。

  • トンネルデバイスを介してFreeBSDから明示的に送信されたすべてのインターネットトラフィックは、OpenVPNを介してルーティングされます。

しかし、

  • FreeBSD側のデフォルトゲートウェイ/ルータは変更されません。

つまり、curl --interface tun0 example.comFreeBSDで同様の作業をしている場合は、次のように要求したいと思います。example.comOpenVPNを介してルーティングされますが、これによりcurl example.comVPNトンネルが無視されるようになります。

この時点で、2 台のコンピュータ間の既定の接続が正常に確立され、両方がお互いを見ることができます。

トンネルを介してリモートシステムで実行されているWebサーバーからデータを取得できます。

$ curl 10.8.0.1
<!DOCTYPE html>
...

完全性のためにインターフェイスを明示的に指定すると、何が起こるかをテストしましたが、うまくいきました。

$ curl --interface 10.8.0.14 10.8.0.1
<!DOCTYPE html>
...

$ curl --interface tun0 10.8.0.1
<!DOCTYPE html>
...

ただし、他のホスト/IPでインターフェイスを使用すると失敗します。

$ curl --interface tun0 example.com
*hang*

$ curl --interface tun0 93.184.216.34  # (the IP I got for example.com)
*hang*

これにより、OpenVPN(FreeBSD側)は何も印刷しないため、FreeBSDのネットワークスタックがOpenVPNを介してランダムなトラフィックを適切にルーティングするRwRw方法がわかるほどうまく設定されていないと仮定します(そして私の考えは正確です)。tun0

これらのルーティング構成について私が見つけたすべての例はLinuxにのみ適用されます。 FreeBSDではどうすればいいですか?

設定が簡単になれば、FreeBSDとLinux側でどんな変更でも行うことができます。

もともとこの記事を投稿しようとしました。networkengineering.stackexchange.comしかし、フリーソフトウェアそしてオープンVPNそこにタグが定義されていないので、ここに投稿します。

ベストアンサー1

バラよりこの回答

マルチゲートウェイの詳細については、以下を参照してください。ここ

要点は、新しいルーティングテーブルを使用することです。

これは私が使用するものです - サーバー10.8.0.1/24とクライアント10.8.0.2/24

echo "10 vpn" >> /etc/iproute2/rt_tables
ip route add default via 10.8.0.1 dev tun0 table vpn
ip rule add from 10.8.0.2/24 table vpn
ip rule add to 10.8.8.1/24 table vpn
ip route flush cache

最初の行は再起動後も維持する必要がありますが、ルールはそうではありません。

編集する: openvpn が接続されている間にコマンドを実行するより良い方法は、upopenvpn 構成ファイルのディレクティブを使用することです。

up /etc/openvpn/tun0_up.sh

おすすめ記事