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