VPN経由で特定のトラフィックのみをルーティング

VPN経由で特定のトラフィックのみをルーティング

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する必要があります)
  • 他のユーザー空間ポート転送またはリバースプロキシ

関連情報