web-dev-qa-db-ja.com

ルートのないVPNサーバー(ビーチヘッド)?

ルートがないホストにVPNサーバーを設定するにはどうすればよいですか?

次の制約があります。

  • サーバーAにはルートがありません。自分のホームディレクトリでしか操作できません。特に、tunデバイスも作成できません。
  • クライアントBでは、完全に制御でき、必要なものをインストールできます。
  • SSHポートフォワーディング(-L/-R)とSOCKSプロキシ(-D)は機能しますが、私の場合は機能しません。クライアントのソフトウェアはさまざまなポートを使用しているため、SOCKSを使用する傾向がありますが、カーネルレベルでも実行されるため、tsocksでプロキシを使用するように説得することはできません。クライアントソフトウェアをVM on Bで実行し、全体をソックス化するVM-しかし、私は実際には行きたくないそのルート。
  • 特権ポートは必要ないので、Aの非ルートでも問題ありません。
  • 「本物の」VPNである必要はありませんが、精神的には似たようなもので十分です。 B上のプロセスは、A(および接続されたデバイス)上のプロセスと、それらを書き直すことなく1つのマシン上にあるかのように通信できるはずです。

私はこれを行うためのエレガントな方法があるとは思いません-正しい方法は、Aの管理者に尋ねるか、Bを同じネットに接続することです-しかし、今私はちょうど興味がありますこれは、概念実証として行うことができます。

7
jdm

さて、サーバーAに対するこの「ルートがない」アクセスは、次の理由から、優れたVPNソリューションを作成する上で問題になる可能性があります。

  • ip-ipトンネリング インターフェース操作が必要です。
  • pptp インターフェイスを作成するにはroot権限も必要です。
  • OpenVPN 非特権ユーザーとして実行することもできますが、ipコマンドにSudoを許可してtunインターフェイスを作成できるようにするなど、いくつかのトリックを実行する必要があります。
  • strongSwan 特権を減らしてCAP_NET_ADMINまたはCAP_NET_RAWを実行する必要があり、非ルートユーザーがiptablesアップダウンスクリプトのサポートを中断するため、IKEデーモンを実行します。

私の友人に残っているもの: SSHソックスプロキシ に頼ってください。ローカルマシンで、rootとして次のコマンドを実行します。

ssh -C2qTnN -D 8080 username@serverA

手段圧縮、SSH2のみ、静か、疑似tty割り当てを強制、stdinを/ dev/nullからリダイレクト、配置接続共有のためにsshクライアントを「マスター」モードにします。

今、あなたがしなければならないのはあなたのアプリケーションを実行することです。 FirefoxのようにSOCKSv5をネイティブでサポートしている場合は、プロキシサーバーとして「localhost:8080」を構成するだけです。

アプリケーションがこのプロキシをネイティブにサポートしていない場合は、 proxychains で実行してください。クライアントにインストールするだけで、準備完了です。

残念ながら、採用したくない唯一の解決策は唯一の解決策のようです。

リンク:

7
user34720