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


22

仮想プライベートサーバーがあり、サーバーが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ジョブをセットアップし、私の別のVPSに対してpingを実行し、apache2を実行します

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

この時点で、私はからsshをできるようにしたいmyhomeMy VPSVPNがアップしているとはPuTTYを使用しながら、絵に。

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

図やログスニペットのIPアドレスとポートを使用して、このトンネルを通過してサーバーにアクセスする方法を教えてください。

回答:


10

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

あなたのサーバーを想定してみましょう:

  • パブリックIPは50.1.2.3です(セットアップ例に従って)
  • パブリックIPサブネットは50.1.2.0/24です
  • デフォルトゲートウェイはxxx1
  • 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へのアクセスを制限する必要があります。


これは見事に機能しました。
アンソニージョルジオ

3
私にとってもうまくいきました。それでも、私はこれが正確に何をするか理解するのに苦労しています。これによりどのような接続が許可/禁止されるのか説明してもらえますか?
コーディングモンク

ええ、もう少し説明をお願いします。「iproute2を使用して次の操作を実行する」では、iproute2が何であるか、またはこのアクションを実行するマシンで明示的に説明されていません。
ディーンレジン

パブリックIPサブネットを取得するにはどうすればよいですか?私はしばらくウェブを検索してきましたが、見つけることができません。正確には何ですか?
トニー・フリーズ

2

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

問題は、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システムでは、ルーティングテーブルエントリに「経由」を追加する必要があることがわかりました。

# 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ゲートウェイでなければなりません。


これはExpressVPNでも機能しますか?彼らは、コマンドラインツール「expressvpn」が付属して、あなたが「接続」または「切断呼び出すことができインストーラを持って、私はあなたが投稿したし、それが機能しなかったものを試したんそれはOpenVPNのでなければならない。。?
トニー・フリッツ

私はこれを機能させることができません...私を夢中にさせます。@hcbによる上記の答えは機能します。しかし、私はあなたの答えが私のために働いていない理由について本当に興味があります!MANGLEルールが実行されない原因となっていると思われる何かが欠落しています
Motsel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.