web-dev-qa-db-ja.com

OpenVPNで静的IP(クライアント側)を設定する方法

小さなデバイスがたくさんあるVPNネットワークをセットアップしています(OpenWRTを実行しています)。私の使用例では、デバイスはすべて番号で識別されます。IPアドレスをIDと一致させたいです(たとえば、デバイス番号6はX.X.X.6にIPがあります)。

気がついた client-config-dirおよびifconfig-Pushしかし、すべてのデバイスが同じ証明書を使用しているため、それらを使用することはできません(duplicate-cn 有効になっています)。デバイスごとに1つの証明書を生成することは制約が厳しすぎるため、これは要件です(さらに、システムにデバイスを追加する場合、VPNサーバーの構成を変更する必要はありません)。

クライアント構成ファイルでIPアドレスを設定することは可能ですか?その特定のトピックに関するドキュメントには何も見つかりませんでした...そして私が試みたすべてが成功しませんでした。

基本的に、私が考えているのは次のようなものです。

  • クライアントはVPNサーバーに接続し、特定のアドレスを要求します(「IPを指定:172.16.0.22」)
  • アドレスが既に取得されている場合、ハンドシェイクは失敗します。それが無料の場合、クライアントは以前に尋ねたアドレスを与えられます
10
Morreski

ifconfig-pool-persist構成オプションでこれを行うことができるはずです。ファイルを事前設定し、seconds = 0を設定してOpenVPNにファイルの読み取りのみを指示できます。

これを使用して、監査目的でVPN経由で接続されたときに同じユーザーに同じIPが割り当てられるようにします。

man page から:

--ifconfig-pool-persist file [seconds] ifconfig-poolデータをファイルに永続化/非永続化し、秒単位の間隔(デフォルト= 600)で、プログラムの起動時とシャットダウン時に。このオプションの目的は、クライアント(クライアントの共通名で示される)とifconfig-poolからクライアントに割り当てられた仮想IPアドレスの長期的な関連付けを提供することです。 --persist-tunオプションを効果的に使用できるので、長期的な関連付けを維持することはクライアントに適しています。

ファイルはカンマ区切りのASCIIファイルで、、の形式です。

Seconds = 0の場合、ファイルは読み取り専用として扱われます。これは、ファイルを構成ファイルとして扱いたい場合に役立ちます。

このファイルのエントリは、共通名とIPアドレス間の過去の関連付けに基づいて、OpenVPNによって提案としてのみ扱われることに注意してください。それらは、与えられた共通名が常に与えられたIPアドレスを受け取ることを保証しません。保証された割り当てが必要な場合は、-ifconfig-Pushを使用します

7
jas_raj

会社のVPNをセットアップしていて、3つの異なるユーザークラスに対して個別のアクセスポリシーを確立したいとします。

System administrators -- full access to all machines on the network
Employees -- access only to Samba/email server
Contractors -- access to a special server only

基本的なアプローチは、(a)各ユーザークラスを独自の仮想IPアドレス範囲に分離し、(b)クライアントの仮想IPアドレスをキーオフするファイアウォールルールを設定してマシンへのアクセスを制御することです。

この例では、従業員の数は可変ですが、システム管理者は1人、請負業者は2人だけだとします。私たちのIP割り当てアプローチでは、すべての従業員をIPアドレスプールに入れ、システム管理者と請負業者に固定IPアドレスを割り当てます。

この例の前提条件の1つは、OpenVPNサーバーマシンでソフトウェアファイアウォールが実行されていることです。これにより、特定のファイアウォールルールを定義できます。この例では、ファイアウォールがLinux iptablesであると想定します。

まず、ユーザークラスに従って仮想IPアドレスマップを作成します。

Class   Virtual IP Range    Allowed LAN Access  Common Names  

Employees   10.8.0.0/24     Samba/email server at 10.66.4.4     [variable]

Sys Admins  10.8.1.0/24     Entire 10.66.4.0/24 subnet  sysadmin1

Contractors 10.8.2.0/24     Contractor server at 10.66.4.12     contractor1, contractor2

次に、このマップをOpenVPNサーバー構成に変換してみましょう。まず、上記の手順に従って10.66.4.0/24サブネットをすべてのクライアントで利用できるようにします(クライアントが10.66.4.0/24サブネット全体にアクセスできるようにルーティングを構成する一方で、次に、上記のポリシーテーブルを実装するファイアウォールルールを使用したアクセス制限)。

まず、tunインターフェースの静的ユニット番号を定義して、ファイアウォールルールで後で参照できるようにします。

dev tun0

サーバー構成ファイルで、従業員のIPアドレスプールを定義します。

server 10.8.0.0 255.255.255.0

システム管理者と請負業者のIP範囲のルートを追加します。

route 10.8.1.0 255.255.255.0
route 10.8.2.0 255.255.255.0

特定のシステム管理者と請負業者に固定IPアドレスを割り当てるため、クライアント構成ディレクトリccdを使用します。

client-config-dir ccd

次に、特別な構成ファイルをccdサブディレクトリに配置して、次のように各非従業員VPNクライアントの固定IPアドレスを定義します。

ccd/sysadmin1ファイル:

    ifconfig-Push 10.8.1.1 10.8.1.2

ccd/contractor1ファイル:

    ifconfig-Push 10.8.2.1 10.8.2.2

ccd/contractor2ファイル:

    ifconfig-Push 10.8.2.5 10.8.2.6

Ifconfig-Pushアドレスの各ペアは、仮想クライアントとサーバーのIPエンドポイントを表します。これらは、WindowsクライアントおよびTAP-Windowsドライバーと互換性を持たせるために、連続する/ 30サブネットから取得する必要があります。具体的には、各エンドポイントペアのIPアドレスの最後のオクテットをこのセットから取得する必要があります。

[  1,  2] [  5,  6] [  9, 10] [ 13, 14] [ 17, 18]
[ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38]
[ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58]
[ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78]
[ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98]
[101,102] [105,106] [109,110] [113,114] [117,118]
[121,122] [125,126] [129,130] [133,134] [137,138]
[141,142] [145,146] [149,150] [153,154] [157,158]
[161,162] [165,166] [169,170] [173,174] [177,178]
[181,182] [185,186] [189,190] [193,194] [197,198]
[201,202] [205,206] [209,210] [213,214] [217,218]
[221,222] [225,226] [229,230] [233,234] [237,238]
[241,242] [245,246] [249,250] [253,254]

これでOpenVPN構成が完了しました。最後のステップは、ファイアウォールポリシーを追加してアクセスポリシーを完成させることです。

ソース: https://openvpn.net/index.php/open-source/documentation/howto.html#policy

6
Aman Juman

@jas_rajのように構成するときに問題が発生しました。今私は次のことをしています:

1)/ etc/openvpnに新しいフォルダを作成します。たとえば "dir"

2)server.conf add line "client-config-dir dir /"

3)「dir」内で、**証明書に書き込んだ**同じ名前で新しいファイルを作成し、次のように入力する必要があります。

ifconfig-Push IPマスク

例:ifconfig-Push 10.0.0.10 255.0.0.0

3
jdmorei