サーバーマシンでVPNにログインした後にSSH接続が失われないようにする


14

対処できない問題が発生しました。SSHを介してVPSにログオンし、そのVPSでVPN接続を確立しようとすると、VPSとマシン間のSSH接続が失われます。これは、VPN設定によってルーティングが変更されたためだと思います。それを防ぐ方法は?


VP設立後のSSHへの接続はどうですか?:p VPNがルーティングパスを上書きするために、これが引き起こされるのは正しいです。できることは、元のパスをそのままにして、追加のVPNパスを追加するだけです(VPSをプロキシとして使用する場合を除きます。これは別の話です)。どのクライアントを使用しますか?
ニコライディスフォティス14

「そのVPSでVPN接続を確立してみてください」とはどういう意味ですか?マシンからVPSのOpenvpnサーバーに接続していますか?VPSは3番目のホストで実行されているOpenvpnサーバーに接続していますか?この最後のケースでは、そのようなVPN接続はいくつかのルートを押し戻していますか?また、VPSに到達するためのNAT変換がないことを確認してください(そのインターフェイスで構成されたIPアドレスは、SSH接続で指定しているものと同じですか?
Damiano Verzulli 14

@NikolaidisFotis VPNが実行されているため、接続できません。私はopenvpnクライアントを使用しています。あります--route-noexec、サーバーに押されたルートを無視するオプションは、しかし、あなたが述べたように、それは私がプロキシとしてVPNを使用したくない助け...ん
mic22

@DamianoVerzulli 2番目のオプションは、イエスのルートが押されていない(私はVPNは、マシンの元のIPアドレスをcloackするプロキシのように行動することを必要とするので、私はそれを行う必要があると思います)、そして全く何のNATはありません
mic22

回答:


6

VPS上のOpenVPNクライアントの構成ファイルにroute-nopullオプションを追加する(およびredirect-gateway存在する場合は削除する)必要があります。

そのようにVPNサーバーに接続しても、VPSのルートは変更されないため、必要なルートを自分で設定できます。


このアドバイスをありがとう ゲートウェイが欠落していると思います。tun0のゲートウェイを追加する方法はありますか?ifconfigの関連部分:inet addr:10.56.10.6 P-t-P:10.56.10.5 Mask:255.255.255.255
Housemd

デフォルトのISPゲートウェイを介してVPNサーバー自体にルートを手動で追加し、他のすべてのトラフィックに対して10.56.10.5を介してデフォルトゲートウェイを追加する必要があります
-Anubioz

申し訳ありません、もう一度おっしゃっていただけますか?あなたが何を言ったかわかりません。例を挙げていただけますか?
-Housemd

明確にしましょう-デフォルトルートをtun0経由にしたくないのですが、インターネットにアクセスするにはtun0が必要です。
-Housemd

@Housemd hmあなたは自分でtun0を介してインターネットにアクセスする必要がありますか、インターネットにアクセスするには他の場所からtun0を介して接続されたクライアントが必要ですか?
アヌビオズ

4

次のシナリオを考えてみましょう。

  1. VPSには、IPアドレス4.3.2.1/24で構成された単一のイーサネットインターフェイスがあります。
  2. VPSはデフォルトゲートウェイ4.3.2.254を介してインターネットにアクセスできます
  3. VPSはまだOpenVPN接続をアクティブにしてません。したがって、アクティブなtunインターフェースはありません

このようなシナリオでは、マシン(def-gw 9.8.7.254でマシンが9.8.7.6/24であると仮定)から、4.3.2.1へのSSH接続を正常に確立できます。したがって、ホスト4.3.2.1と9.8.7.6の両方が相互に正常に到達できます。

次に、このようなSSH接続が確立された状態で、次のことを考えてみましょう。

  1. VPS 4.3.2.1からOpenVPN接続を開始します。
  2. そのため、新しいtun0インターフェイスは動的に構成されます(10.10.10.1 PTPで10.10.10.2 IPが割り当てられるとします)。

この段階では:

  • IF NOルートがローカルVPSにリモートのOpenVPNサーバからプッシュされません、何もルーティングの期間に変更されます、そして、あなたのSSH接続が全く問題なく存続します。この場合、VPNを通過するトラフィックは、リモートOpenVPNサーバー(10.10.10.1)に向けられたトラフィックのみです。

  • IFリモートOpenVPNのサーバは、いくつかのルートをプッシュバックし、VPSのデフォルトゲートウェイは10.10.10.1(リモートOpenVPNのエンドポイント)に置き換えられますexpecially場合、THENあなたは問題を抱えています。この場合、VPN内のすべての発信IPトラフィック(OpenVPN自体を除く)をトンネリングしています。

この2番目のケース(VPN接続を確立した直後にdef-gwを置き換える)では、非対称ルーティングにより、以前のSSH接続が「ハング」します。

  • マシン(9.8.7.6)からVPS(4.3.2.1)へのトラフィックは、変更されていない前のパスを流れます。
  • VPS(4.3.2.1)からマシン(9.8.7.6)へのトラフィック:
    • VPNがないため(最初は)、4.3.2.254ゲートウェイを介してルーティングされました。
    • 関連するdef-gw置換を使用したVPNリンクの確立後、VPN(10.10.10.1)経由でルーティングされます。

言い換えると、VPNリンクが確立されるとすぐに、VPSからマシンへの戻りルートが変更されます...これは良いことではありません(戻りパスに沿ったいくつかのネットワークデバイスは、このような非対称を認識する可能性がありますパスと単純にパケットをドロップします)。

さらに、リモートOpenVPNサーバーがNATボックスとして機能する可能性が高くなります。VPNからのすべてのトラフィックは、リモートOpenVPNサーバーのパブリックIPアドレスでNAT変換されます。あなたのマシンに戻って来ている、加えて、異なるルートに沿って戻って取得するには、リターントラフィック:これは物事があなたのSSH接続のためとして、これ以上...「良くない」ではない、間違いなく「悪い」よりも、真である場合に別のソースIP(VPNサーバーのパブリックインターフェイスの1つ)。

この問題を解決するには?

本当に簡単です。

VPNに沿ってマシンにトラフィックをルーティングするのではなく、以前のルートに依存するようにVPSサーバー指示するだけです。OpenVPNを開始する前に、追加するのと同じくらい簡単にする必要があります。

     route add -host 9.8.7.6 gw 4.3.2.254

どこ:

  • 9.8.7.6はマシンのパブリックIPアドレスです
  • 4.3.2.254は、VPSの元のデフォルトゲートウェイです。

PS:より詳細な質問を提供することで、より迅速な回答が得られるでしょう:-)


@DamianoVerzulliの回答ありがとうございます!デフォルトゲートウェイは指定されていません。route addこのよう0.0.0.0 GWリターンとコマンドSIOCADDRT: Invalid argument
mic22

それは私がちょうどOpenVPNの接続した後得るものだ[server] Peer Connection Initiated with [AF_INET]64.251.27.139:443; 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 10.200.1.251/22 broadcast 10.200.3.255; ERROR: Linux route add command failed: external program exited with error status: 2
mic22

@ mic22:VPSのdef-gwがどのように指定されないのだろうか?この場合、そのようなVPSはローカルサブネットの外部に到達できないため(そしてこれはあなたのマシン-SSH経由で接続できること-およびOpenVpnサーバー--VPNを確立できること-は「ローカル」である必要があり、したがって、まったく役に立たないはずです!)。ところで:あなたはSSH経由で接続しているとき、あなたは簡単に「netstatコマンド-rn」(0.0.0.0で始まる行2列目)とDEF-GWを取得することができます
ダミアーノVerzulli

netstat -rn結果0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 venet0VPS Iをボード上のUbuntu 14.04 ServerとOVH基本的なオプションである使用しています
mic22

ifconfigそしてnetstat -rn出力:goo.gl/TEZ61q
mic22

0

これは助けることができます:

に入れTCPKeepAlive=yes/etc/ssh/sshd_config

から

man sshd_config | less +/'^ *TCPKeepAlive'

TCPKeepAlive

システムがTCPキープアライブメッセージを反対側に送信するかどうかを指定します。それらが送信されると、接続の切断またはマシンの1つのクラッシュが適切に通知されます。ただし、これは、ルートが一時的にダウンした場合に接続が切断されることを意味し、一部の人々はそれが煩わしいと感じています。一方、TCPキープアライブが送信されない場合、サーバーでセッションが無期限にハングし、「ゴースト」ユーザーが残り、サーバーリソースが消費される可能性があります。

デフォルトはyes'' (to send TCP keepalive messages), and the server will notice if the network goes down or the client host crashes. This avoids infinitely hanging sessions. To disable TCP keepalive messages, the value should be set tono です。


I'vはすでに持っていたTCPKeepAliveにオプションセットをyesそれが適切な解決策ではないので
mic22

0

私はこの問題を抱えており、推奨される解決策をすべて試しましたが、それでも私の問題は解決しませんでした!

多くの解決策を試みた後、screenコマンドを使用しました。(私のVPNクライアントはcisco-any-connectです)。

$ screen -R VPN
$ openconnect -b "your server"

資格情報を提供した後、すぐにctrl + a + dを押してセッションに戻ります。


0

個人的には、SSHへのすべての接続がVPN経由でルーティングされることを好みます。VPNが確立する前にアクティブなssh接続の場合、ルートが変更されたため、再接続する必要があります。

私が使用することをお勧めしますautossh だけ追加するsshクライアントの設定の下で.ssh/config

Host *
   ServerAliveInterval 300
   ServerAliveCountMax 2
   BatchMode yes
  • BatchModeは自動再接続の略です
  • ServerAliveはKeeping Aliveの略です

-1

VPNに接続すると、サーバーからのsshトラフィックがVPNサーバーを経由するため、sshが切断されます。したがって、これを回避するには、VPNに接続する前に次のコマンドを実行します。

route add -host your-machine-public-ip gw Server-gatway-ip dev eth0

your-machine-public-ip:SSHを実行しているマシンのIP。Server-gatway-ip:そのサーバーのGatway /ルーターのIP

上記のコマンドは、VPN Server経由ではなく、指定されたゲートウェイ経由でトラフィックをリダイレクトします。


これは混乱を招くものであり、言語は逆になっているようです。SSHターゲットのIPアドレスとローカルワークステーションのデフォルトゲートウェイを使用してルートを追加しませんか?
-rmalayter
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.