
FreeBSDクライアントと(Arch)Linuxサーバーの間にOpenVPNを設定したいと思います。
- トンネルデバイスを介してFreeBSDから明示的に送信されたすべてのインターネットトラフィックは、OpenVPNを介してルーティングされます。
しかし、
- FreeBSD側のデフォルトゲートウェイ/ルータは変更されません。
つまり、curl --interface tun0 example.com
FreeBSDで同様の作業をしている場合は、次のように要求したいと思います。example.comOpenVPNを介してルーティングされますが、これによりcurl example.com
VPNトンネルが無視されるようになります。
この時点で、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 が接続されている間にコマンドを実行するより良い方法は、up
openvpn 構成ファイルのディレクティブを使用することです。
up /etc/openvpn/tun0_up.sh