私のUbuntuサーバーで、異なる2つの国AとBに複数のVPN接続を確立したいと思います。次に、オンラインに接続するときにどのVPN接続を使用するかを決定するためにGeoIPベースのルールを設定したいと思います。私が閲覧しているWebサイトがA国にある場合はVPNを使用してAに接続し、そのWebサイトがB国にある場合は接続Bを使用し、A国もB国にもない場合は接続Bを使用する必要があります。 VPN接続を使用しないでください(デフォルトは私のDSL接続である必要があります)。
設定できますか?
答え1
私はこれを完全に自動的にスムーズに実行する「すぐに利用可能な」ソリューションを知りません。可能。私ができることは、「上位レベル」の要約を提供することだけです。
基本的にルーティングの問題について考えています。特定のサブネットに向かうトラフィックが別のゲートウェイIPアドレスを通過することを望みます。動的ソリューションなしで生きたい場合は、次のことができます。
- 「他の国」のトラフィックを表すサブネットと、使用したいVPNを学びます。たとえば、10.4.0.0/16のエントリが別の国にあり、VPNを介さずに出かけたくないとします。モデムが接続されて
eth0
おり、ISPのデフォルトゲートウェイIPがあります。 - VPNプロバイダがVPNごとに仮想ネットワークアダプタを作成するプロトコルを使用する場合は、はるかに簡単になります(たとえば、OpenVPNは仮想
tun0
インターフェイスを作成し、PPTPは同様の作業を行います(私の記憶が正しい場合))。 IPSecが問題を引き起こす可能性があります。適切な設定ファイルを提供し、tun0
それを生成する素晴らしいOpenVPNベースのプロバイダがあるとしましょう。 - この
ip route
コマンドを使用して、10.4.0.0/16に向かうシステムからのすべてのトラフィックを終了する必要があることを意味する新しいパスを作成しますtun0
。実際のデフォルトゲートウェイで常に使用されるように適切な指標を割り当てる必要があります。 - 真のセキュリティのために、デフォルトゲートウェイ(実際のNIC)
iptables
から10.4.0.0/16へのすべてのトラフィックをブロックするいくつかのルールを作成できます。eth0
これは漏れを防ぎます。 ip route
起動時に実行されるスクリプトにコマンドを入れる必要があります。- 2番目のIP範囲とVPNに対してこれをやり直してください。
- これにより、これら2つのIP範囲内にないトラフィックは無視されます
eth0
(つまり、デフォルトゲートウェイ)。
whois
特定の種類のCDNフロントエンドを使用しない限り、リモートサイトISPのIP範囲を使用して簡単に見つけることができます。 CDNフロントエンド(Cloudflareなど)を使用している場合、Webサイトはまったく異なる場所から来ているようです。この場合、squid
たとえばURLコンテンツに基づいてトラフィックを別のIPにリダイレクトできるHTTPレイヤプロキシを使用することをお勧めします。