web-dev-qa-db-ja.com

VPNサービスに接続されているサーバーにSSH接続します

仮想プライベートサーバーがあり、サーバーがVPNサービスに接続されているときにWebサーバーを実行したい

プロバイダーへのVPN接続が確立されていない場合、このサーバー、ssh、scp、httpなどを使用して、やりたいことをすべて実行できます。

Openvpnが実行されてプロバイダーのVPNサービスに接続されると、サーバーには何らかの理由でアクセスできなくなり、当然のことながら正当な理由があります。

写真はこのようなものです:

           My VPS                             ------------
         +----------------+                  /            \
         |                |                 /   Internet  /       101.11.12.13
         |        50.1.2.3|-----------------\   cloud    /----<--- me@myhome
         |                |                  /           \
         |     10.80.70.60|                 /             \
         +----------------+                 \              \
                        :                    \_____________/
                        :                           :
                        :                           :
                        :                           :
                        :                           :
                  +------------------+              :
                  |     10.80.70.61  |              :
                  |               \  |              :
                  |                \ |              :
                  | 175.41.42.43:1197|..............:
                  |   175.41.42.43:yy|   
                  |       .....      |
                  |   175.41.42.43:xx|
                  +------------------+



Legend                  
------ Line No VPN connection present
...... Line VPN connection established

明確にすること:

  • 上下のすべてのIPアドレスとポート番号は架空のものです
  • ポート番号xx、yyなどの行は私の仮定であり、事実について知っているものではありません。
  • 毎分実行するcronジョブをセットアップして、Apache2を実行して別のVPSにpingを実行します。Apache2のログで、VPNがアクティブなときに、Origin IPアドレスが50.1.2.3から175.41.42.43に変化し、VPNが正常に機能していることがわかります。

OpenVPNログはこれらを示します:

UDPv4 link remote: [AF_INET]175.41.42.43:1197
[ProviderName] Peer Connection Initiated with [AF_INET]175.41.42.43:1197
TUN/TAP device tun0 opened
do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
sbin/ip link set dev tun0 up mtu 1500
/sbin/ip addr add dev tun0 local 10.80.70.60 peer 10.80.70.61

この時点で、VPNが稼働していてPuTTYを使用しているときに、画像のmyhomeからMy VPSにsshできるようにしたいと思います。

過去に、私の職場の1つで、文字列に@記号が3つある非常に安全なサーバーにSSHで接続するという非常に奇妙なシーケンスが与えられました。つまり、私が想像しているように、ボックスからボックスへとジャンプしていましたが、ジャンプボックスはWindows OSのいくつかのバージョンとそれらの独自のアプリを実行していたため、何が起こっているのか一目でわかりませんでした。だから私はあまり注意を払わなかった。今、私は気づき始めています。同じまたは同様の状況にあるかもしれません。

図やログスニペットのIPアドレスとポートを使用して、このトンネルを通過してサーバーにアクセスする方法を誰かに教えてもらえますか?

24
Scott

VPNサービスが起動すると、sshパケットはVPSのパブリックIP 50.2.1.3ではなくVPN経由でルーティングされるため、VPSからロックアウトされます。

あなたのサーバーを仮定しましょう:

  • パブリックIPは50.1.2.3です(設定例に従って)
  • パブリックIPサブネットは50.1.2.0/24です
  • デフォルトゲートウェイはx.x.x.1です
  • eth0はゲートウェイへのデバイスです

Iproute2を使用して以下を実行します。

ip rule add table 128 from 50.1.2.3
ip route add table 128 to 50.1.2.0/24 dev eth0
ip route add table 128 default via x.x.x.1

次に、OpenVPNクライアント設定を実行します:openvpn --config youropenvpn-configfile.ovpn &

サーバーがvpnサービスに接続されている間は、サーバーにSSHで接続できます。

適切なiptableフィルターを追加して、ssh:22以外のセッションからパブリックIPへのアクセスを制限する必要があります。

10
hcb

これは少し遅れるかもしれませんが...

問題は、OpenVPNによってデフォルトゲートウェイが変更され、OpenVPNを開始する前に適切なルートを設定しない限り、現在のSSH接続が切断されることです。

次は私のために働きます。 iptablesとip(iproute2)を使用します。以下では、OpenVPNが起動する前のデフォルトゲートウェイインターフェースが「eth0」であると想定しています。これは、eth0がデフォルトゲートウェイインターフェイスではなくなった場合でも、eth0への接続が確立されたときに、その接続の応答パケットがeth0に再び戻るようにするためです。

接続マーク、ファイアウォールマーク、ルーティングテーブルに同じ番号を使用できます。それらの違いをより明確にするために、明確な数値を使用しました。

# set "connection" mark of connection from eth0 when first packet of connection arrives
Sudo iptables -t mangle -A PREROUTING -i eth0 -m conntrack --ctstate NEW -j CONNMARK --set-mark 1234

# set "firewall" mark for response packets in connection with our connection mark
Sudo iptables -t mangle -A OUTPUT -m connmark --mark 1234 -j MARK --set-mark 4321

# our routing table with eth0 as gateway interface
Sudo ip route add default dev eth0 table 3412

# route packets with our firewall mark using our routing table
Sudo ip rule add fwmark 4321 table 3412

===

更新:

上記は、Debian Jessieでは私にとってはうまくいきます。しかし、古いWheezyシステムでは、ルーティングテーブルエントリに「via」を追加する必要があることがわかりました。

# our routing table with eth0 as gateway interface
Sudo ip route add default dev eth0 via 12.345.67.89 table 3412

「12.345.67.89」は元の非VPNゲートウェイでなければなりません。

2
John Doe