web-dev-qa-db-ja.com

同じサブネット上の複数のOpenVPNサーバー、高可用性

こんにちは、みなさん。私のLinuxエクスペリエンスはそれほど素晴らしいものではありませんが、たいていは簡単に自分の道を見つけることができます。

作業中のOpenVPNセットアップがあり、しばらくの間いくつかの改善が必要です。メインサーバー(タップモード)は、かなり低速なDSL接続の背後にあるオフィスで実行されます。主な問題は、私は通常オフィスにいないので、仮想ネットワーク上の何かにアクセスしたいときはいつも、そのサーバーを経由して他の場所に行かなければならないということです。

私たちは、開発と生産の目的で使用する100 Mbit接続の2台のサーバー、オフィスに約3台のサーバー(VOIPの別のT1回線の背後にある1台)、および日常的にネットワークを使用する約20台のクライアントがあります。さまざまな場所から。

他の場所が接続可能である一方で、ネットワークルーティング(制御外)がメインのOpenVPNサーバーにアクセスできない状況が発生しました。また、オフィスの外の誰かがサーバー(たとえば、500 MBのコードリポジトリ)から何かをフェッチしたいときは、なんと20 KB/sのダウンロード速度は許容範囲を超えています(遅いDSLについて言及しましたか?わかりました)。この接続の最大化はかなり簡単だったので、このサーバーにトラフィックシェーピングを実装する必要がありました。

ネットワーク内で2つ(またはそれ以上)のOpenVPNサーバーを実行することを考えました。ただし、アプリケーションのコア機能の一部は仮想ネットワークのIPアドレスに依存しているため、これらは同じサブネットを持つ必要があります。クライアントは、同じIPアドレスを保持することもできますが、それは重要ではありません。

簡単にするために、現在のサーバーofficeと、セットアップしている2番目のサーバーcloudを呼び出します。 T1phoneでサーバーを呼び出します。

cloudに接続するとすぐにofficeが見えなくなるため、これはかなり複雑であることがわかりました。 officeを経由するサーバーへのルートも、cloudに接続している間は機能しません(pingなし、何もない) ) およびその逆。トラフィックをブロックするiptablesのルールもありません。

最近、私はlinuxjournalの this 記事に出くわしましたが、それらが提供するソリューションは2台のサーバーの使用のみをカバーしており、多少古くなっています(多くのドキュメントを見つけることさえできず、Wikiはオフラインです)。また、サーバーの追加は複雑な作業になると述べています。

理想的には、仮想ネットワークを実行している既存のサーバーofficeを保持し、cloudおよびphoneサーバー(それぞれ100 Mbitおよび非常に信頼性の高い接続)。ハードウェア障害やDSL障害などが発生した場合に備えて、安全な場所にいます。

つまり、本質的には、同じIPアドレスサブネットを維持しながら、複数のホスト(2以上)で接続を受け入れる高可用性OpenVPNソリューション(修正、パッチ、ハック、Tweakなど)を探しています。接続先のサーバーに関係なく。

読んでいただきありがとうございます。長い投稿をお詫び申し上げます。

編集:

私が言及し忘れたもう1つの重要な部分は、アプリケーションロジックがこれらに直接依存しているため、3つのサーバーが仮想ネットワーク上で一貫したIPアドレスを持つ必要があることです。クライアントは無関係であり、クライアントは任意のアドレスを持つことができますが、サーバーはそれらの間で通信する必要があります。別の解決策(おそらく10.8.0。*内のエントリのDNSの一種)を知っている場合は、それを含めてください。再度、感謝します。

編集2:

ネットワークマップを追加しました、それは素晴らしいことではありませんが、要点を理解する必要があります。サーバーが他のサーバーと通信するには、常にOfficeサーバーを経由する必要があることに注意してください。これは意図されていますが、その機能をCloudに変更したいと思います。

ネットワークマップ

6
andre

私はネットワーキングとopenvpnでかなり遊んだ(ISPで10年以上のシステム管理者)ので、この単純なソリューションについてはどうですか。

1つのホストに対してn個のIPアドレスを持つDNSにエントリを作成します(ラウンドロビン方式)

Openvpnクライアントでホストのリモート名を入力してラウンドロビンを実現

VPNサーバーには2つのネットワークカードがあり、1つはパブリックIP(ラウンドロビンアドレス1)に接続され、もう1つはプライベートクラスに接続されます。 2番目のサーバー、異なるパブリックアドレス(ラウンドロビンアドレス2)、同じプライベートクラス。

アドレスをプライベートインターフェイスにブリッジするtap0インターフェイスを作成し、クライアントへのアドレス指定を管理する単一のdhcpを用意します。

この方法で、必要なだけ冗長性を実現できると思います。

4
damir

接続先のサーバーに応じてクライアントが異なるアドレスを取得することが許容できる場合、これは簡単に設定できます。接続しているクライアントの数やアドレススペースのサイズ(VPNが専用ネットワーク上にあるのか、それとも他のオフィスと同じアドレススペースを共有するのかなど)に直接対処していないので、正しくない可能性が高い一連の仮定を行う。訂正して返信してください。

私は仮定します:

  • すべて192.168.1.0/24ネットワーク上に3つのOpenVPNサーバーをセットアップするとします。
  • OpenVPNサーバーは、このアドレススペースを使用する唯一のサーバーです。
  • 「内部」ネットワークは10.10.10.0/24です。
  • 少なくとも20台のクライアントが単一のサーバーに同時に接続できるようにしたいとします。

VPNネットワークを複数の/ 27ネットワークに分割し、それぞれを単一のサーバーに関連付けます。これはあなたに与えます:

  • サーバー1
    • ネットワーク:192.168.1.0/27
    • サーバーIP:192.168.1.1
  • サーバー2
    • ネットワーク:192.168.1.32/27
    • サーバーIP:192.168.1.33
  • サーバー3
    • ネットワーク:192.168.1.64/27
    • サーバーIP:192.168.1.65

これらのサーバーの最初のOpenVPN構成には、次のものが含まれます。

server 192.168.1.0 255.255.255.224
Push "route 192.168.1.0 255.255.255.0"
Push "route 10.10.10.0 255.255.255.0"

2番目の場合は、次のものが含まれます。

server 192.168.1.32 255.255.255.224

..など。

ネットワークインフラストラクチャには、3つすべてのサーバーへのルートが必要です。それは次のようなものです:

route add 192.168.1.0/27 gw 192.168.1.1
route add 192.168.1.32/27 gw 192.168.1.33
route add 192.168.1.64/27 gw 192.168.1.65

アプリケーションの観点から見ると、接続されているクライアントはすべて同じ/24 通信網。 3つのOpenVPNサーバー(この構成では192.168.1.95までのアドレスのみを使用しているため、さらに追加する余地があります)、またはサーバーごとにより多くのクライアント用の余地があります。

これは、設定方法の簡単な概要です。ここで何かが意味をなさない場合や、特定の領域について詳しく説明してほしい場合は、お知らせください。

注: glögg の後に書かれているため、構文やファクトチェックが必要になる場合があります。


1
larsks

N2nをのぞいてみたくなるかもしれません

http://www.ntop.org/products/n2n/

すべてのクライアントを同じサブネット上に置くことができます。同じアドレス空間を維持し、新しいvpnルート経由でいくつかのルートをチャッキングして、すべてを機能させる必要があります。

0
ax25