VPNサーバーを実行している中央開発サーバーと、それに接続する必要のあるクライアントがいくつかあります。サーバーはApacheを実行していますが、ローカルリクエストのみを受け入れています(127.0.0.1:80でのみリッスンしています)。
基本的に、VPNに接続されている各クライアントに、VPNを介して特定のホスト名とローカルのApacheインスタンスにトラフィックをルーティングするように強制する必要があります。
例えば:
Client requests google.com -> google.com
Client requests server -> vpn -> server:80
クライアントがVPNに接続するときに、ルートコマンドをクライアントにプッシュできることはわかっています。これを実現するには、プッシュするルートを特定する必要があります。少なくとも、クライアントがこのルートを自分で追加するためのroute
構文/コマンドは何ですか?
まず第一に、ローカルマシン以外の場所では127.xyzにトラフィックをルーティングすることはできません(それは可能かもしれませんが、プロセスで何か他のものを壊してしまうでしょう...)ので、私はd VPN IP(10.8.0.1など)でもリッスンするようにApache構成を更新することをお勧めします。それが選択肢ではない場合は、私の答えの最後にある選択肢の1つを試すことができます。
OpenVPNクライアントは、サーバーへのルートをすでに取得しているはずです。私の例では、次のようになります。
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.8.0.1 10.8.0.53 255.255.255.255 UGH 0 0 0 tun0
10.8.0.53 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
追加のルートをクライアントにプッシュする場合は、次を使用します。
Push "route 192.168.10.0 255.255.255.0"
(それに応じてIP /ネットマスクを変更します)。
Apacheインスタンスにホスト名で(http://10.8.0.1/
だけでなく)アクセスできるようにする場合は、これをすべてのクライアントの/etc/hosts
ファイルに配置します。
10.8.0.1 servername.domain.example
または、DNSサーバーをセットアップし(dnsmasq <-dhcpサーバーを無効にしていることを確認してください)、クライアントにプッシュします(ovpn-conf内)。
Push "dhcp-option DNS 10.8.0.1"
それでうまくいくはずです。
ApacheがリッスンしているIPを変更できない場合は、次のアプローチが思い浮かびます(ただし、最後の手段としてのみ使用してください)。
SSHポート転送:OpenVPN(または他のVPNサーバー)を使用する代わりに、SSHを使用してサーバーに接続します。
ssh -L1234:localhost:80 user@servername
そうすれば、サーバー上のApacheインスタンス(127.0.0.1:80
でのみリッスン)がクライアントのhttp://localhost:1234/
で利用可能になります。すべてのクライアントでこれを行う必要があるため、多くのクライアントがある場合はおそらく適切ではありません。
ただし、それでも、シェルアクセスなしで専用のsshユーザーを設定し、~/.ssh/authorized_keys
で各クライアントの公開鍵を設定することができます。クライアントはこれをインターネットへのプロキシとして使用したり、望まないその他のことを実行したりできる可能性があることに注意してください。したがって、sshdを正しく構成することが重要です。