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

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

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

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

Raspberry Pi

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

Q&A

3回答

11019閲覧

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

nokonoko_1203

総合スコア17

SSH

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

Raspberry Pi

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

0グッド

0クリップ

投稿2018/10/02 22:11

編集2018/10/04 00:46

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

表記の件につきまして、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の無線LANの接続を切り、スマホと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で待ち受けれている

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2018/10/02 22:20

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

2018/10/03 01:37 編集

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

2018/10/03 23:28

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

2018/10/03 23:29

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

回答3

0

念の為の確認ですが、

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 まで届いている場合は、そのパケットがどうなっているかを確認します。

  1. 外部からパケットが来るだけで Raspberry Pi が応答していない
  2. 外部からのパケットに対し、Raspberry Pi は RST を返している
  3. 外部からのSYNパケットに対し、Raspberry Pi は SYN+ACK パケットを返している
  4. その他

上記のどれに当てはまるかを確認し、それによって怪しい部分を絞り込みます。

投稿2018/10/03 03:06

doda

総合スコア947

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nokonoko_1203

2018/10/03 23:51 編集

詳細なご回答、アドバイスありがとうございます。 本文に追記も致しましたが、`curl ifconfig.me`はRaspberry Piにて実行、`ssh pi@{グローバルIP} -p {ポート番号}`はスマホでテザリングをしてMacから実行しております。 その際には`ssh: connect to host {グローバルIP} port 50000: Operation timed out`というエラーが出ております。 `tcpdump -n -i wlan0 host {インターネット上のホストのIPアドレス}`をLAN外でMacから実行したところ、`tcpdump: wlan0: No such device exists (BIOCSETIF failed: Device not configured)`というエラーが表示されております。 そもそも`ping {グローバルIP}`を実行すると`--- {グローバルIP} ping statistics --- 17 packets transmitted, 0 packets received, 100.0% packet loss`と表示されてしまい、Pingも通っていない様でした…
kacchan822

2018/10/03 23:57

テザリングされた状態であれば、-i wlan0 の部分のインターフェース名が異なっているのかもしれません。Wifiを切ってとあるので、USBなどで接続されている場合は、-i のあとに書くインターフェース名が異なります。 ip a で表示されるネットワークインターフェース名の中から適当なものを選んであげる必要があります。
nokonoko_1203

2018/10/04 00:46

ごめんなさい。 「Wi-Fiを切って」の表現は間違いです。 Macの無線LANの接続を切り、スマホとMacをWi-Fiで接続してスマホをアクセスポイントとしてインターネットに接続しています。 表現がややこしくて申し訳ございません。
guest

0

/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で使うポート)が出てくれば、さらに間違いないです。

投稿2018/10/03 01:41

kacchan822

総合スコア57

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nokonoko_1203

2018/10/03 23:30

ご回答ありがとうございます。 そうだったのですね、勘違いしておりました。 ご指摘の通り、Raspberry Pi上で`sudo netstat -tnlp`を実行したところ、ポート番号が出てきました。
kacchan822

2018/10/03 23:58 編集

他の追記事項も踏まえると、ルーター部分に問題がありそうですね。ポートフォワードの設定と別にセキュリティ対策の設定があったりすると、それらが干渉しあってうまく設定できていないことがあるかもしれません。
guest

0

プライベートアドレス("10."で始まるIPアドレス、"192.168."で始まるIPアドレス、"172.16.0.0"~"172.31.255.255"の範囲のIPアドレス)はプライベートに(非公開で)使うために特定の組織に割り当てられない(誰でも、断りなく使える)アドレスです。

日本中に192.168.2.1のアドレスを持つマシンは大量(無線LANルータの無線LAN側は192.168で始まるプライベートアドレスが使われているものがほとんどで、DOCOMO,AU,Softbankのアクセスポイントだけでも100万台以上、事業所や個人宅を含めると数百万台規模)にありますから、192.168.2.1でLAN外からアクセスしても特定のマシンに接続することができないのです。(もちろん、世界中には

家庭で無線LANが使えるようになっている場合、通常以下のような機器構成になっています。(==はケーブルによる配線、--は無線通信を表しています)
モデムと無線LANルータは別々の機器である場合と、一体化した機器の場合があります。

(インターネット回線) == モデム == 無線LANルータ -- PCやラズパイ等(192.168.x.x)

無線LANルータは、インターネット側と無線側の2つの口を持っていて、インターネット側では固有(固定)のIPアドレスを、無線通信側ではローカルアドレスを持っています。

ポートフォワーディングというのは、固定アドレスのポートにアクセスされたら、それを事前に設定されているローカルアドレスのポートに回送(forward)する仕組みです。

説明のため、固定のIPアドレスが"12.34.56.78"だったとします。

「"12.34.56.78:80"にアクセスされたら、それは"129.168.2.3:80"のWebサーバにforwardしてください」という設定を無線LANルータにしておけば、
"129.168.2.3:80"のWebサーバは、外部からは"12.34.56.78:80"のWebサーバであるかのように見えることになります。

===
こうしたことを理解したうえで、設定などを見直してください。

ラズパイは無線LANで接続されているのでプライベートアドレスしか持ちようがありません。
それなのに質問に、「ssh pi@{グローバルIP} -p {ポート番号}」と書かれているので、何か誤解があるのだと思われます。

投稿2018/10/03 01:08

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

doda

2018/10/03 02:45

12.34.56.78は正規に割り当て済みのIPアドレスで有る為、例として使うのは不適切です。 例示用として 192.0.2.0/24 (TEST-NET-1), 198.51.100.0/24 (TEST-NET-2), 203.0.113.0/24 (TEST-NET-3) が予約されていますので、これらのアドレスを使うようにしてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問