web-dev-qa-db-ja.com

cURL経由でOpenVPNサーバーに接続する方法は?

OpenVPNサーバーをcURLコマンドのプロキシとして使用することは可能ですか?

コンピューター全体をOpenVPNに接続したくありません。代わりに、単一のcURLコマンドで使用したいと思います。

何かのようなもの

curl -x http://user:password@OpenVPN:port url

しかし、それは機能せず、戻ります

curl: (56) Recv failure: Connection reset by peer

私のOSはUbuntu18.04です

2
Googlebot

いいえ、そうではありません。

まず、サーバーが話すのとはまったく異なるプロトコルを話すようにcURLに指示しているため、コマンドは機能しません。 OpenVPNとhttp://は似ていません–サーバーはcURLによって送信された要求を認識せず、cURLは応答を理解しません。

次に、cURLはVPNプロトコルをサポートしていないため、機能しません。 is cURLがOpenVPNプロトコルまたはその他のVPNプロトコルを話すように正しく指定する方法はありません。これは、プログラムに含まれていないためです。

(理論的にはこれをcURLに追加することは不可能ではありませんが、cURLはTCPおよびIP)を学習する必要があるため、「プロキシ」プロトコルと比較して複雑さが増します大幅に VPN自体について学習することに加えて、つまり、OSに存在するネットワークスタックの多くを複製する必要があります。)


システムへのルートアクセス権がある場合は、さまざまなメカニズムを使用して、OpenVPN接続の使用目的を制限できます。

  • 宛先IPアドレスに基づいてVPNの使用法を選択するための通常のIPルーティングテーブル。
  • ポリシールーティング。送信元IPアドレスに応じて接続を選択します(たとえば、curl --interface tun0はVPNを使用しますが、通常のcurlは使用しません);
  • ファイアウォールルール。使用するプロトコルとポートに応じて、さらにはユーザーIDに基づいて接続を選択します。
  • ネットワーク名前空間。一部のプロセスがonly VPNを認識し、他のすべてのプロセスが元の接続のみを認識している2つの異なる「ワールド」を作成します。

たとえば、VPNの使用を10.0.0.0/8に制限したい場合(またはその逆の場合は、そのネットワークをVPNから除外したい場合)、OpenVPNのrouteオプションだけを使用するのは簡単です。たとえば、VPNを特定のネットワークのみに制限するには、次のようにします。

route 10.0.0.0 255.0.0.0 vpn_gateway
route-nopull

そして、VPNを他のすべてに使用しているときに特定のネットワークを除外するには:

route 10.0.0.0 255.0.0.0 net_gateway
2
user1686