質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

受付中

Raspberry PiにLAN外からSSHで接続できない

nokonoko_1203
nokonoko_1203

総合スコア0

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

3回答

0評価

0クリップ

8292閲覧

投稿2018/10/02 22:11

編集2022/01/12 10:55

お世話になっております。

表記の件につきまして、LANの中からはSSH接続できるのですが、LANの外からRaspberry Piに接続できなくて困っております。

色々試したつもりではいるのですが、接続できませんでしたのでお力添えいただきたく質問致しました。

環境 MacBook Pro(macOS High Sierra 10.13.6) raspberry pi 3 model b+

思いつく限りやったことを列挙します。

プライベートIPアドレスを固定

$ sudo nano /etc/dhcpcd.conf
# ファイルの文末に以下を追加 interface wlan0 static ip_address=192.168.2.○/24 #固定するローカルIP static routers=192.168.2.1 #デフォルトゲートウェイのIP static domain_name_servers=192.168.2.1 #DNSサーバーのIP?

LAN内でSSH接続して、ポート番号の変更

Macで接続

$ ssh pi@192.168.2.○ $ sudo nano /etc/ssh/sshd_config
# What ports, IPs and protocols we listen for # Port 22 Port 50000 # 仮に50000とする

デーモンの再起動sudo /etc/init.d/sshd restart

# 接続確認 $ ssh pi@192.168.2.○ -p 50000

公開鍵認証

Macで鍵を作成してRaspberry Piに送る

# 鍵の作成 $ cd ~/ssh $ ssh-keygen Enter file in which to save the key (/home/pi/.ssh/id_rsa): # 鍵の名前と保存するパスを指定。そのままEnterでいいと思う Enter passphrase (empty for no passphrase): # パスフレーズを設定。絶対に忘れない様にすること Enter same passphrase again: # 設定したパスフレーズをもう一度入力 # 公開鍵をRaspberry Piに送信 $ scp id_rsa.pub pi@192.168.2.○ -p 50000:/home/pi/.ssh/id_rsa # 公開鍵としてauthorized_keysに書き出し $ cat .ssh/id_rsa.pub >> .ssh/authorized_keys # 公開鍵に権限を付与 $ chmod 700 .ssh $ chmod 600 .ssh/authorized_keys # SSHの設定変更 $ sudo nano /etc/ssh/sshd_config
# SSH での root ログインを出来なくする PermitRootLogin no # パスワードでのログインを禁止 #PasswordAuthentication yes PasswordAuthentication no # 空パスワードでのログインを禁止 PermitEmptyPasswords no

ポートフォワーディング

Q.【Wi-Fiルーター】【WRC-】ポートフォワーディング設定方法/特定の機器の通信を許可する方法はありますか?を参考にして、

・上で固定したローカルIPアドレスを指定
・タイプは両方
・ポートは仮に「50000-50000」とした

上記設定でルーターの再起動を行った

グローバルIPで接続を試す

curl ifconfig.meでグローバルIPを確認

ssh pi@{グローバルIP} -p {ポート番号}を試すも繋がらず…

nmapでポート解放を確認

Raspberry Piにnmapをインストール

# nmapのインストール $ sudo apt-get install nmap

/etc/ssh/sshd_configで80番を指定しているときは$ nmap localhostで80番が表示されるが、50000を指定した時には表示されない
→そもそもポートが開いていない可能性がある…?

設定ファイルの編集

/etc/hosts.denyは修正しない

/etc/hosts.allowにはsshd:allを追記

→接続できず

素人のため、根本的なことが抜けていたりするかもしれませんが、ネットで調べれる様なことは大抵やった様な気がしてまして、これ以上どう修正をすれば接続できるのかが分かりませんでした。

ご回答いただけると幸いです。

追記:たくさんご回答いただいたので、その内容を試して見ました

  • まずはこのご回答からチャレンジ

念の為の確認ですが、

curl ifconfig.meでグローバルIPを確認
これは Raspberry Pi にて実行したんですよね?
ssh pi@{グローバルIP} -p {ポート番号}を試すも繋がらず…
これはLANの外(インターネット上)のホストから実行したんですよね?
書き方からは Raspberry Pi にて実行したようにも見えますが、そのような事は無いですよね?
インターネット上のホストで実行したとして、この時にどのようなエラーメッセージが表示されましたか?
設定をざっと見た限りでは問題なさそうなので、まずはどの部分に問題が有るかを切り分ける為、tcpdump を使って Raspberry Pi までパケットが届いているかを確認してください。
tcpdump -n -i wlan0 host {インターネット上のホストのIPアドレス}
tcpdump を実行中にインターネット上のホストから ssh を実行し、パケットが Raspberry Pi まで届いているかを確認します。
パケットが届いていない場合はルータまでに問題が有りますので、
ルータの設定を再度見直す
ルータを再起動してみる
インターネット上のホスト側で接続できるポートに制限がかけられていないか確認する
などを確認してみてください。
Raspberry Pi まで届いている場合は、そのパケットがどうなっているかを確認します。
外部からパケットが来るだけで Raspberry Pi が応答していない
外部からのパケットに対し、Raspberry Pi は RST を返している
外部からのSYNパケットに対し、Raspberry Pi は SYN+ACK パケットを返している
その他
上記のどれに当てはまるかを確認し、それによって怪しい部分を絞り込みます。

LAN内からSSHで接続ssh pi@raspi.local -p 50000

Raspberry Piからcurl ifconfig.me
{グローバルIP}

MacのWi-Fiを切って、スマホでテザリング

WAN側から接続を試すがタイムアウトssh pi@{グローバルIP} -p 50000
ssh: connect to host {グローバルIP} port 50000: Operation timed out

tcpdunpを使ってインターネット上のホストから ssh を実行し、パケットが Raspberry Pi まで届いているかを確認sudo tcpdump -n -i wlan0 host {グローバルIP}
tcpdump: wlan0: No such device exists (BIOCSETIF failed: Device not configured)
→パケットが届いていない!

そもそもPingが通っていない

$ ping {グローバルIP} PING {グローバルIP} ({グローバルIP}): 56 data bytes Request timeout for icmp_seq 0 Request timeout for icmp_seq 1 Request timeout for icmp_seq 2 Request timeout for icmp_seq 3 Request timeout for icmp_seq 4 ... --- {グローバルIP} ping statistics --- 17 packets transmitted, 0 packets received, 100.0% packet loss
  • 次の回答にチャレンジ

/etc/ssh/sshd_configで80番を指定しているときは$ nmap localhostで80番が表示されるが、50000を指定した時には表示されない

→そもそもポートが開いていない可能性がある…?
→ nmapはデフォルト(オプションつけない)だと1024までのポートをスキャンします。50000は範囲外です。LAN内からSSHができているのであれば、ポートは開いていると思います。
sudo netstat -tnlp で右端にsshdとある行の、Local Addressの列に、0.0.0.0:50000(SSHで使うポート)が出てくれば、さらに間違いないです。

Raspberry Piでsudo netstat -tnlp

Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:50000 0.0.0.0:* LISTEN 9145/sshd

→Local Addressの列に0.0.0.0:50000(SSHで使うポート)と出てくるから、Raspberry Pi上ではポート番号50000で待ち受けれている

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

y_waiwai
y_waiwai

2018/10/02 22:20

LANの外から、とは具体的にどういう環境からどういうOSでどういうコマンドでアクセスしようとしてますか
kacchan822
kacchan822

2018/10/03 01:37 編集

「ssh pi@{グローバルIP} -p {ポート番号}を試すも繋がらず…」のときにはどのような状況が発生していますか?エラーメッセージなどは出ますか? また、/var/log/auth.log に接続を試した時刻で何かログは出力されていますか?
nokonoko_1203
nokonoko_1203

2018/10/03 23:28

ありがとうございます。LAN外とは、スマホのテザリングで、macOS High Sierra 10.13.6から`ssh pi@{グローバルIP} -p {ポート番号}`を実行することを指しております
nokonoko_1203
nokonoko_1203

2018/10/03 23:29

これを実行した際に、`ssh: connect to host {グローバルIP} port 50000: Operation timed out`が表示されます。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。