GNU/Linux >> Linux の 問題 >  >> Linux

OpenVPN クライアント対クライアント

解決策 1:

client-to-client の場合 有効です 、VPN サーバーは、ホストの IP レイヤー (つまり、カーネル) に送信せずに、クライアントからクライアントへのパケットを内部的に転送します。ホスト ネットワーク スタックは、これらのパケットをまったく認識しません。

           .-------------------.
           | IP Layer          |
           '-------------------'


           .-------------------.
           | TUN device (tun0) |
           '-------------------'


           .-------------------.
           | OpenVPN server    |
           '-------------------'
             ^           |
          1  |           |  2   
             |           v
 .----------------.  .----------------.
 | Client a       |  | Client b       |
 '----------------'  '----------------'

client-to-client の場合 無効です 、クライアントから別のクライアントへのパケットは、VPN サーバーをホストしているマシンのホスト IP レイヤー (iptables、ルーティング テーブルなど) を通過します:IP 転送が有効な場合 、ホストは (ルーティング テーブルを使用して) パケットを TUN インターフェースに再度転送し、VPN デーモンはパケットをトンネル内の正しいクライアントに転送します。

           .-------------------.
           | IP Layer          |  (4) routing, firewall, NAT, etc.
           '-------------------'      (iptables, nftables, conntrack, tc, etc.)
              ^          |
          3   |          |  5
              |          v
           .-------------------.
           | TUN device (tun0) |
           '-------------------'
             ^           |
          2  |           |  6  
             |           v
           .-------------------.
           | OpenVPN server    |
           '-------------------'
             ^           |
          1  |           |  7  
             |           v
 .----------------.  .----------------.
 | Client a       |  | Client b       |
 '----------------'  '----------------'

この場合 (client-to-client 無効)、iptables を使用してクライアント間のパケットをブロックできます:

 iptables -A FORWARD -i tun0 -o tun0 -j DROP

どこで tun0 は VPN インターフェースです。

解決策 2:

ここにあるように、ディレクティブにコメントするだけでなく、それ以上のことを行う必要があります:

<ブロック引用>

このディレクティブのコメントを外して、異なるクライアントがお互いを「見る」ことができるようにします。デフォルトでは、クライアントはサーバーのみを認識します。クライアントがサーバーのみを認識できるようにするには、サーバーの TUN/TAP を適切にファイアウォールする必要もあります。インターフェース。

したがって、クライアントごとに個別の IP アドレス ポリシーを構成できます。セクションクライアント固有のルールとアクセス ポリシーの構成を参照してください。 ここ:https://openvpn.net/index.php/open-source/documentation/howto.html. そしてここ:https://www.sbarjatiya.com/notes_wiki/index.php/Configuring_separate_IP_and_firewall_rule_for_each_openvpn_client.

解決策 3:

openvpn の man ページの次の段落 最初に読んだときは必ずしも明確ではありませんが、この質問に答えます:

<ブロック引用>

OpenVPN サーバー モードは、単一の tun または tap インターフェイスを介して複数のクライアントを処理するため、実質的にはルーターです。 --client-to-client フラグは、クライアントから発信されたすべてのトラフィックを TUN/TAP インターフェイスにプッシュするのではなく、クライアントからクライアントへのトラフィックを内部的にルーティングするように OpenVPN に指示します。

このオプションを使用すると、各クライアントは現在接続されている他のクライアントを「認識」します。それ以外の場合、各クライアントはサーバーのみを認識します。カスタムのクライアントごとのルールを使用してトンネル トラフィックをファイアウォールで保護する場合は、このオプションを使用しないでください。

client-to-client オプションは、サーバー上の通常のルーティング テーブルを短絡します。これを削除しても、クライアントがサーバーのルーティング テーブルを使用できなくなるわけではありません。これらのルーティング テーブルとサーバーのファイアウォール構成により、クライアントが相互に認識できる場合、クライアントは相互に認識できるようになります。


Linux
  1. Debian10/11にOpenVPNサーバーをインストールします

  2. RockyLinux8にOpenVPNクライアントをインストールして構成する

  3. Ubuntu 20.04/18.04でVPNに自動的に接続する

  1. WindowsおよびLinux用のOPENVPNクライアント

  2. CentOS 8 /Ubuntu18.04にOpenVPNクライアントをインストールして構成する

  3. 一部のポートでの OpenVPN バイパス

  1. クライアントコンピューターからOpenVPNにアクセスする

  2. Centos7のWiKIDからの2要素認証による安全なOpenVPN

  3. Openvpn:別のゲートウェイを持つクライアントにルートをプッシュしますか?