VPNサーバーを実行している中央開発サーバーとそれに接続する必要がある複数のクライアントがあります。サーバーはApacheを実行していますが、ローカル要求のみを受け入れます(127.0.0.1:80でのみリッスン)。
デフォルトでは、VPNに接続されているすべてのクライアントがVPNを介して特定のホスト名とローカルApacheインスタンスにトラフィックをルーティングするように強制する必要があります。
たとえば、
Client requests google.com -> google.com
Client requests server -> vpn -> server:80
クライアントがVPNに接続されているときにクライアントにルーティングコマンドをプッシュできることを知っています。今、これを達成するためにどのパスをプッシュする必要があるのかを理解するだけです。少なくともroute
クライアントがこのパスを独自に追加する構文/コマンドは何ですか?
答え1
まず、ローカルコンピュータ以外の127.xyzにトラフィックをルーティングすることはできません(まあ、可能かもしれませんが、その過程で明らかに他の問題が発生する可能性があります...)。 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/authorized_keys
クライアントがこれをインターネットのプロキシとして使用したり、望ましくない他の操作を実行したりする可能性があることに注意してください。したがって、sshdを正しく設定することが重要です。- いくつかのiptables魔法(トラフィックをNATする必要があります)
- 他のユーザー空間ポート転送またはリバースプロキシ