お世話になっております。
表記の件につきまして、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で待ち受けれている