web-dev-qa-db-ja.com

OpenVPNクライアントが「ifconfig-Push」を無視して「tun」デバイスのIPアドレスを変更することは可能ですか?

AWS EC2(CentOS)インスタンスで実行されているOpenVPNサーバーに接続するクライアントの静的IP構成を設定しました。静的IPを割り当てる目的は、帯域幅の使用が制御されるように、すべてのクライアントにQUOTAを使用してiptablesを割り当てることです。

以下は私の設定です:

server.conf:

mode server
tls-server
dev tun

topology subnet
Push "topology subnet"

ifconfig 10.8.1.1 255.255.255.0
Push "route-gateway 10.8.1.1"

port 443
proto tcp-server

Push "redirect-gateway def1 bypass-dhcp"

ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
tls-crypt tc.key
cipher AES-256-CBC

user nobody
group nobody
persist-key
persist-tun

client-config-dir /etc/openvpn/ccd/

management localhost 7505

/ etc/openvpn/ccd/client:

ifconfig-Push 10.8.1.2 255.255.255.0

iptablesルール:

-P FORWARD DROP
-A FORWARD -d 10.8.1.2/32 -g client
-A FORWARD -s 10.8.1.2/32 -g client
-A client -m quota --quota 10000000000 -j ACCEPT

client.ovpn:

client
dev tun

remote-cert-tls server
cipher AES-256-CBC

pull
resolv-retry infinite

remote xyz.dynu.net 443 tcp-client
nobind

<ca> ... </ca>
<cert> ... </cert>
<key> ... </key>
<tls-crypt> ... </tls-crypt>

クライアントには、Windows、Linux、およびAndroidユーザーが含まれます。

私の質問は:

  • clientが(IPアドレスとルートを手動で構成することにより)IPを使用することは可能ですか10.8.1.3 の代わりに 10.8.1.2どちらがサーバーからプッシュされましたか?
  • はいの場合、どうすればこれを防ぐことができますか?

嫌いですtopology net30古くなっており、クライアント用のIPプールが小さいためです。

同様の質問がここで行われます: openvpnクライアントがタップデバイスのIPを変更できないようにする しかし、それはtunデバイスには当てはまりません。

古いスレッド ミッシングリンククライアントにifconfig-Pushを受け入れるよう強制する 状態:

特定のクライアントからパケットを受信すると(OpenVPNサーバー)、リバースパスチェックを実行して、送信元IPアドレスに送信していた場合、そのクライアントに送信することを確認します。そうでない場合は、パケットをドロップします。

したがって、クライアントが別のIPアドレスを選択した場合、パケットは通過しません。

この動作はどこかに文書化されていますか?これは最新のOpenVPNリリース(2.4.6)にも当てはまりますか?

1
Irfan Latif

あなたが投稿した古いスレッドのニールブラウンからの引用の後に、ソースコードへの参照が続きます。

Multi.cの1605行目のコメントと周囲のコードを参照してください。

彼は現在 行2569 にあるコメントを参照していたと思います:

/* make sure that source address is associated with this client */

後で、行2580と2690で、これが次のログメッセージになる可能性があることがわかります。

"マルチ:クライアント[%s]からの不正な送信元アドレス、パケットがドロップされました"

ですから、それは今日でも当てはまると思います。

将来の参考のために、「今日」とはバージョン2.4.7を指します。

編集:

今日はテスト用のOpenVPNサーバーをセットアップしました。また、仮想インターフェースからのすべての着信パケットをカウントするルールをマシンのファイアウォールに設定しました。クライアントから接続した後、サーバーから到達可能な別のアドレスにpingを実行でき、カウンターが増加していました(存在しないホストの場合でも)。次に、クライアントインターフェイスのアドレスを変更しました。

ip a add 192.168.1.3/24 dev tun0
ip a del 192.168.1.2/24 dev tun0

そのインターフェイスを介して何もpingできなくなったため、カウンターが増加していませんでした。クライアントで冗長性を5に設定すると、送信されたpingパケットごとにrWが返されるため、クライアントはまだトンネルを介してパケットを送信しているようです。 rは、tunインターフェースから受信したパケット(openvpnプロセスの観点から)を表し、Wは、カプセル化されてサーバーに送信されたパケットです。 (通常、応答があった場合はRwも取得します。)これは、パケットがサーバー側でドロップされたことを示しています。いいね。

サーバーopenvpnのログにパケットがドロップされているのを見ませんでしたが、これはおそらく、冗長性が3に設定されていて、 thisD_MULTI_DROPPEDは4以上でのみ表示されます。

次に、アドレスを元の割り当てに戻しました(接続を再起動せずに)。

ip a add 192.168.1.2/24 dev tun0
ip a del 192.168.1.3/24 dev tun0

そして、すべてが再び機能し、カウンターが増加し、既存のホストが応答していました。

4
Karel Vlk