対処できない問題が発生しました。 SSHを介してVPSにログオンし、そのVPSでVPN接続を確立しようとすると、VPSと私のマシン間のSSH接続が失われます。これはVPN設定によってルーティングが変更されたためだと思います。それを防ぐ方法は?
追加する必要がありますroute-nopull
オプション(および削除redirect-gateway
(存在する場合)VPS上のOpenVPNクライアントの構成ファイルに。
この方法では、VPNサーバーに接続してもVPSのルートは変更されないため、必要なルートを自分で設定できます。
次のシナリオを考えてみましょう:
このようなシナリオでは、マシンから(マシンが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接続が確立されたとしましょう。
この段階では:
[〜#〜] if [〜#〜]リモートOpenVPNサーバーからローカルVPSにルートがプッシュされないため、ルーティングに関して何も変更されず、SSH接続は問題なく存続しますまったく。この場合、VPNを通過するトラフィックは、リモートOpenVPNサーバー(10.10.10.1)に向かうトラフィックのみです。
[〜#〜] if [〜#〜]リモートOpenVPNサーバーはいくつかのルートをプッシュバックし、特にVPSデフォルトゲートウェイが10.10.10.1(リモートOpenVPNエンドポイント)に置き換えられる場合、[〜#〜]その後[〜#〜]問題が発生しています。この場合、トンネリングしています[〜#〜] all [〜#〜] VPN内の発信IPトラフィック(OpenVPN自体を除く)。
この2番目のケース(VPN接続を確立した直後にdef-gwを置き換える)では、非対称ルーティングのため、以前のSSH接続が「ハング」します。
言い換えると、VPNリンクが確立されるとすぐに、VPSからマシンへの戻りルートが変更されます...これは良いことではありません(戻りパスに沿ったいくつかのネットワークデバイスは、このような非対称を認識する可能性がありますパスと単純にパケットをドロップします)。
さらに、リモートOpenVPNサーバーがNATボックスとして機能している可能性が高くなります。VPNからのすべてのトラフィックは、リモートOpenVPNサーバーのパブリックIPアドレスでNAT処理されます。これが本当である場合、それ以上のものではありません... SSH接続に関しては、「良くない」が、間違いなく「悪い」:リターントラフィックは、別のルートに沿って戻ることに加えて、マシンに戻ってくる- ソースIPが異なる(VPNサーバーのパブリックインターフェイスの1つ)。
この問題を解決するには?
実際、かなり簡単です。
VPSサーバーに単に指示するだけですトラフィックをVPNに沿ってマシンにルーティングせず、代わりに以前のルートに依存します。 OpenVPNを開始する前に、追加するのと同じくらい簡単なはずです。
route add -Host 9.8.7.6 gw 4.3.2.254
どこ:
追記:より詳細な質問を提供することで、はるかに迅速な回答が得られるでしょう:-)
これは役立ちます:
_TCPKeepAlive=yes
_を_/etc/ssh/sshd_config
_に入れます
から
_man sshd_config | less +/'^ *TCPKeepAlive'
_
TCPKeepAlive
システムが他の側にTCP=キープアライブメッセージを送信する必要があるかどうかを指定します。メッセージが送信されると、接続の終了またはいずれかのマシンのクラッシュが適切に通知されます。ただし、これは接続ルートが一時的にダウンしていて、一部の人が迷惑だと感じる場合は、が終了します。一方、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 to
noです。
この問題が発生し、推奨される解決策をすべて試しましたが、それでも問題は解決しませんでした!
多くの解決策を試みた後、screen
コマンドを使用しました。 (私のVPNクライアントはCisco-any-connectです)。
$ screen -R VPN
$ openconnect -b "your server"
資格情報を入力したら、すぐにctrl + a + dを押してセッションに戻ります。
個人的には、SSHへのすべての接続がVPN経由でルーティングされることを好みます。 VPNが確立される前にアクティブなSSH接続の場合、ルートが変更されたため、再接続する必要があります。
autossh
を使用することをお勧めしますsshクライアント設定の下に.ssh/config
を追加するだけです
Host *
ServerAliveInterval 300
ServerAliveCountMax 2
BatchMode yes