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

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

私は多数の小さなデバイス (OpenWRT を実行) で VPN ネットワークを設定しています。私の使用例では、デバイスはすべて番号で識別され、その IP アドレスを ID と一致させたいと思います (例: デバイス番号 6 の IP は XXX6 になります)。

client-config-dirとについては知っていますifconfig-pushが、すべてのデバイスが同じ証明書 (duplicate-cnが有効) を使用しているため、これらを使用することはできません。デバイスごとに 1 つの証明書を生成するのは制約が大きすぎるため、これが必須となります (さらに、システムにデバイスを追加しても VPN サーバーの設定を変更したくありません)。

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

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

  • クライアントはVPNサーバーに接続し、特定のアドレスを要求します(「IPアドレスを教えて: 172.16.0.22」)。
  • アドレスがすでに使用されている場合、ハンドシェイクは失敗します。アドレスが空いている場合、クライアントは以前に要求したアドレスを受け取ります。

答え1

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

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

からマニュアルページ:

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

ファイルは、, という形式の、コンマ区切りの ASCII ファイルです。

seconds = 0 の場合、ファイルは読み取り専用として扱われます。これは、ファイルを設定ファイルとして扱いたい場合に便利です。

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

答え2

企業 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#ポリシー

答え3

@jas_raj のように設定に問題がありました。現在、次の操作を実行しています。

1) /etc/openvpn に新しいフォルダを作成します。たとえば、"ディレクトリ

2) server.confに「クライアント設定ディレクトリ dir/

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

ifconfig-push IPマスク

例えば: ifconfigプッシュ10.0.0.10 255.0.0.0

関連情報