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

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

ただいまの
回答率

90.45%

  • Raspberry Pi

    1090questions

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

  • SSH

    704questions

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

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

受付中

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,571

nokonoko_1203

score 11

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

表記の件につきまして、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で待ち受けれている

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • y_waiwai

    2018/10/03 07:20

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

    キャンセル

  • kacchan822

    2018/10/03 10:34 編集

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

    キャンセル

  • nokonoko_1203

    2018/10/04 08:28

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

    キャンセル

  • nokonoko_1203

    2018/10/04 08:29

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

    キャンセル

回答 3

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 11: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) が予約されていますので、これらのアドレスを使うようにしてください。

    キャンセル

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/04 08:30

    ご回答ありがとうございます。

    そうだったのですね、勘違いしておりました。

    ご指摘の通り、Raspberry Pi上で`sudo netstat -tnlp`を実行したところ、ポート番号が出てきました。

    キャンセル

  • 2018/10/04 08:54 編集

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

    キャンセル

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/04 08:25 編集

    詳細なご回答、アドバイスありがとうございます。

    本文に追記も致しましたが、`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も通っていない様でした…

    キャンセル

  • 2018/10/04 08:57

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

    キャンセル

  • 2018/10/04 09:46

    ごめんなさい。

    「Wi-Fiを切って」の表現は間違いです。

    Macの無線LANの接続を切り、スマホとMacをWi-Fiで接続してスマホをアクセスポイントとしてインターネットに接続しています。

    表現がややこしくて申し訳ございません。

    キャンセル

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

  • ただいまの回答率 90.45%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

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

  • Raspberry Pi

    1090questions

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

  • SSH

    704questions

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