web-dev-qa-db-ja.com

GUIを持たないNATの背後にあるLinuxマシンにアクセスするにはどうすればよいですか?

私のDebianボックスの1つにGUIがありません。接続方法コマンドライン経由外部(AnyDesk、Teamviewerなど)から?

オフィスネットワーク内にいる間は、SCPとSSHを使用してこのマシンにアクセスできます。しかし、どうすれば自宅からアクセスできますか?ネットワークプロバイダーがルーターのWANポート)にパブリックIPを割り当てていないため、ダイナミックDNS(DDNSまたはDynDNS)は私のセットアップには適用できません。

Public IP and Router WAN IP is different

1
Arun

リバースSSHはあなたの友達です。これを機能させるには、SSHサーバーが必要です。これには2つのアプローチを紹介します。最初のアプローチは、自宅のマシンからSSHサーバーを開いて実行できることを前提としています。自宅のPCが常にオンラインである必要がないように、1時間ごとに自動的に再接続を試みる方法を提供します。これは不可能または困難な場合があるため、より簡単で安全なソリューションも追加します。ただし、LinuxVPSが必要です。彼らは通常わずか2ドル/月っぽいです。

解決策1-自宅でPCだけを使用する-静的IPを想定する:

Debianサーバーでの準備:

cronがインストールされて実行されていることを前提としています。 /etc/cron.hourlyに次の内容の新しいファイルを作成します:(ファイルをchmod +xすることを忘れないでください!)

#!/bin/bash
cstate=$(netstat -na | grep "tcp" | grep "<IP-of-home-machine>:22" | tr -s " " | cut -d " " -f 6 | head -n 1)
cdate=$(date "+%Y-%m-%d %H:%M:%S")
if [[ $cstate == "ESTABLISHED" ]] || [[ $cstate == "TIME_WAIT" ]]
then
    echo "[$cdate] SSH connection up. ($cstate)" >> /var/log/check-ssh-relay.log
else
    echo "[$cdate] SSH connection broken. ($cstate) Reconnecting..." >> /var/log/check-ssh-relay.log
    ssh -N -f -R 12122:localhost:22 <username>@<IP-of-home-machine>
fi

これにより、接続が確立されているかどうかが1時間ごとにチェックされ、確立されていない場合は再接続が試行されます。自宅のPCの電源が常にオンになっているとは限らない場合に便利です。ログ情報を/var/log/check-ssh-relay.logに書き込みます。認証はSSHキーを介して行われるため、事前に適切に設定されていることを確認してください。

自宅のコンピューター:

Openssh-serverが適切にセットアップされていると仮定すると、今必要なのは次のことだけです。

$ ssh <server-username>@localhost -p 12122

SSH接続を作成します。 SCP、SFTPおよび共同。もちろん動作します。

解決策2-リレーとして別のVPSを使用する:

私はこのソリューションを個人的に使用しています。主な理由は、自宅に静的IPがないためです。

Debianサーバーでの準備:

<IP-of-home-machine>の代わりにここでVPSのIPを使用することを除いて、ソリューション1とまったく同じです。

VPSでの準備:

ここで行う必要があるのは、rootユーザーとして次のコマンドを実行することだけです。

$ ssh -g -f -N -L 0.0.0.0:13122:localhost:12122 root@localhost

ここで-gは、このポートフォワードのグローバルインバウンド接続を許可するために重要です。

自宅のPC(または文字通りどこでも):

ポート13122(上記で指定)を使用して、VPSに接続するだけです。

$ ssh <username>@<VPS-IP> -p 13122
4
confetti

あなたの問題は、あなたが制御していないNATの後ろに座っているため、ポート転送を設定できない可能性があります。

これに対する最も簡単な解決策は、リバーストンネリングです。制御するマシンから制御するマシンへのssh接続を設定します(このマシンはssh経由でアクセスできる必要があります)

https://unix.stackexchange.com/questions/46235/how-does-reverse-ssh-tunneling-work を参照してください

2
Baldrickk

オフィスに OpenVPN サーバーをセットアップし(ネットワークからパブリックWANにポートを転送できると仮定)、非GUIボックスをそれに接続させることができます(Baldrickkの答えのように;リバーストンネリング) 、そしてサーバーは、そのボックスで実行されている他のサービスとともに、非GUIボックスにSSHで接続できるはずです。

このようなアプローチにはいくつかの問題があります。その1つは、GUI以外のボックスのクライアントがタイムアウトした場合、ローカル(同じネットワーク上)にSSHで接続し、クライアントを再起動しないと接続が不可能になることです。

2
Shadowcoder

GUIがない場合、必要なのはリモートコンソールだけです。これは通常、非常に優れたセキュリティとssh(リモートファイルコピー)などの付加価値サービスを組み合わせたscpで実現されます。

2
Eugen Rieck