SSHとVNCを使用して学校からアクセスしたい自宅に複数のマシンがあります。そのために、静的IPを提供しました。
SSHはポート22を使用することを知っているため、このポートをルーターの192.168.1.51:22に転送できますが、この方法ではRaspberry PiにSSHで接続できません。両方のマシンにアクセスできるように設定する方法はありますか?
IPv6があれば、ポートフォワーディングさえ必要ありません!永続的なIPv6アドレスを取得し(MACアドレスに基づいているため、ISPがIPv6の仕組みを知らない限り同じままであることが保証されています)、これを使用してトンネリングします。IPv6アドレスは公開されており、ローカルNATを経由せずにアクセスするために、どこでもポート転送を有効にする必要はありません。それは「うまくいく」。
ただし、IPv6はまだグローバルにサポートされていないため、ホームインターネット接続とリモートインターネット接続の両方で完全に機能するIPv6が必要です。
ただし、ほとんどの人がIPv4のみを使用している場合は、まだ方法があります!一部のルーターでは、次のように特定の送信元ポートを特定の宛先ポートに転送できます。
この例では、ポート22
はマシンsheepdog
に直接渡され、ポート292
はcoyote
のポート22
に転送されます。
最後に、ルーターにこの機能がない場合は、ポートを変更できます。SSHはポート22
での実行に限定されないためです。任意の値に設定できます(使用されていません)。
/etc/ssh/sshd_config
(編集するにはルートが必要なので、Sudo nano /etc/ssh/sshd_config
)には、ファイルの先頭に次の行があります。
# What ports, IPs and protocols we listen for
Port 22
これを必要なものに変更します。
# What ports, IPs and protocols we listen for
Port 2992
Sudo service ssh restart
を使用してSSHサーバーを再起動し、ルーターのポートを転送します。
ただし、このユースケースでは、SSHトンネルが適切かどうかを検討します。おそらく、ホームネットワークに専用のVPNサーバーをセットアップする必要がありますか?これにより、VPNに必要な適切なセキュリティ資格情報があれば、どこからでもentireホームネットワークにアクセスできます。さらに、VPNを使用するとオーバーヘッドがわずかに少なくなります。通常、1台のマシンに対して1つのポートのみを転送する必要があります。
この問題を解決する簡単な方法は、ルーターのさまざまなポートをマシンのポート22にマップすることです。たとえば、ルーターで次の設定を行うことができます(ルーターにIP 1.2.3.4
があると仮定)
1. 1.2.3.4:22 --> ubuntu:22
2. 1.2.3.4:8888 --> raspberrypi:22
3. 1.2.3.4:9999 --> windows:22 (or some other port)
次に、sshを使用するときに、使用するポートを指定します。
$ ssh <username>@<router ip> -p <your port>
これで、すべてのマシンに接続できるはずです。
コンピューターの1つが常に稼働していることがわかっている場合は、それをsshプロキシーとして使用することもできます。
外部IPアドレス(つまり、myhome.dyndns.comなど)のドメイン名を設定しているとします。1台のコンピューターに接続するだけです(raspberryが常に起動している場合、ルーターからポートを転送します)それ)、あなたのssh接続は次のようになります:
学校->(ここではルーター、透明)->ラズベリー-> ubuntuまたはwindows
次に、学校の〜/ .ssh/configに次の行を追加します。
Host ubuntu 192.168.1.51
Hostname ubuntu (change to match your setup)
User myraspberryuser (change it ;-) )
IdentityFile ~/.ssh/id_rsa (The path to your private key, on the school computer, better on an usb key if public computer)
ForwardAgent yes
RequestTTY yes
ProxyCommand ssh -W %h:%p %[email protected]
次に接続するには:
ssh-add ~/.ssh/id_rsa # to do only once per session
ssh myuser@ubuntu (login without password)
これから、ssh ubuntuと入力すると、コンピューターは最初にラズベリーに接続し、次にubuntuコンピューターへのsshセッションを開始します。
転送するポートに関係なく、/ etc/sshd.confのパスワードを無効にして、sshキーを介したログインのみを許可することをお勧めします。このように、パラメータ 'ForwardAgent'を使用してraspberryおよびubuntuでキーをセットアップする場合、キーをロック解除するだけでよく、接続にパスワードは必要ありません。この方法では、ボットがsshにログインしようとしても、パスワードログオンを許可しないため、ボットはログインできません。
ボーナス、これはscpでも機能します。scpfoo ubuntu:/ tmp/fooは、追加のパラメーターなしで同じセットアップを使用します。ボーナス2、このセットアップは自宅で変更する必要はありません。明日あなたと別のコンピューターがssh configでコードをコピー/貼り付け、ホストとIPを変更するだけで、ルーターで新しいポートを開く必要はありません
私はこれを実行します-実行するのが最も安価であるため、常にrpiをそのままにしてルーターに直接接続し、sshに入れて、それから他のユーザーにバウンスします-それはあまり注意を必要としません。
VNC/RDPでsshパイプを介してGUIを実行したり、ちょっとした楽しみをしたり、プライベートに保ちながらデスクトップコンピューター上のサーバーを参照できるポートを転送したりすることもできます。
この回答を追加した理由は、いくつかの提案をすることです。
1)22以外のポートを使用します。PIには22のままにしておきますが、ルーターの着信ポートを10,000を超える値に変更します。そうしないと、1日に数十から数百の攻撃を受けます。悪用が発見された2番目に、あなたが所有しているSSHホストを実行していることが知られています。
2)ユーザー名/パスワードの代わりに証明書を使用する-ユーザー名/パスワードのログインを完全に無効にします。
3)IPアドレスを変更できる場合は、dyndnsタイプのサービスを使用してDNSホストハムを取得します(noipを使用します。無料で、LinuxクライアントをサポートしてIPアドレスを更新します。パイ今)。これを無料で提供している会社はまだいくつかあります。
4)pi(またはsshを使用するもの)を最新の状態に保ちます(Sudo apt-get update)。私はsshが今ではかなりよく吟味されていると信じていますが、httpsのことも信じていました...
これが答えとしてではなくコメントとしての方が適切かどうか疑問に思っていましたが、とにかくここに投稿します。
これを行う前に考えるべきいくつかのこと: