- 2017.04.14
- 技術ブログ電子工作
Raspberry PiのIPアドレスをログインせずに調べるやり方
基本的にINDETAILは札幌本社で開発を行ないますが、案件によっては東京にスポットで出張することもあります。
そんなわけで、現在東京出張中のtacckです。
東京出張ついでに、桜の花見を満喫しました。
最近はラズパイの記事を中心に書いていますが、ラズパイで作業するときは自分のPCから ssh
でラズパイにログインすることが多いです。
たまにGUIで操作したい時は、モニタとHDMIで接続し、キーボード・マウスをUSBで接続して、ログインして利用しています。
ところが、現在は出張の身。ラズパイを持ってきたは良いけど、普段と違うネットワーク環境、おまけにキーボードもマウスも無い。。。
これではIPアドレスもわからずログインもできない、、、そして、記事も書けない!
ということで、今回は、出張のお供に持ってきた Raspberry Pi 3 Model B
のIPアドレスをログインせずに調べる方法と、そこからWiFi経由で ssh
接続できる方法を紹介してみたいと思います。
普段はどうやっているか
普段ですと、
- Raspberry PiをHDMIでモニタに接続 (マウスとPCも接続)
- GUIでログイン後に自宅のWiFiアクセスポイントに接続していることをモニタで確認
- そこからIPアドレスを調べてそのIPアドレスへ
ssh
でPCからログイン
というふうにして作業をできるようにしています。
すごく簡単です。
WiFi経由で ssh
接続をやってみる
まず有線LAN経由で接続
WiFiのアクセスポイントは、出張用に持ってきたモバイルルータです。
有線LANの口がついたクレードルもあり、これを経由して外部に接続しています。
モバイルルータは、 "APモード" という状態です。
普段と違うアクセスポイントになるので、Raspberry Piにてアクセスポイントの登録が必要です。
しかし、マウスもキーボードも無いので、そもそも設定のやりようが無い、、、という現実に打ちひしがれました。
しかし、Raspberry Piには有線LANの口があります。
そして、モバイルルータもクレードルに有線LANの口があります。
そう、「ここをイーサネットケーブルで繋げば良いじゃないか!」と気づきました。
モバイルルータを、 "ルータモード" に切り替えて、イーサネットケーブルでクレードルとRaspberry Piをつなぎます。
こうすれば、Raspberry Pi側はDHCPによりIPアドレスを取得でき、私のPCと接続できるようになるはずです。
しかし、そのIPアドレスが何か、普段と違うやり方で調べないといけません。
細かい話は省きますが、同じネットワーク内の機器が通信をする際に、MACアドレスというものを利用します。
このMACアドレスとIPアドレスの組み合わせを機器同士が互いに教えあうことで、通信ができるようになります。
つまり、これをPCからRaspberry Piに聞けば良いのです。
とはいえそのRaspberry Piを特定できないから聞きようが無い、、、となるところなのですが、これはわからなくても大丈夫です。
特定の機器だけではなく、ネットワーク内の機器全部に尋ねる方法があるのです。
まずは、現在PCが知っている"MACアドレスとIPアドレスの組み合わせ"を表示します。
(今回は192.168.100.0/24
のネットワークに繋がっている状態とします。)
1 2 3 4 5 6 7 8 |
$ arp -an ? (192.168.33.255) at ff:ff:ff:ff:ff:ff on vboxnet7 ifscope [ethernet] ? (192.168.100.1) at xx:xx:xx:xx:xx:xx on en0 ifscope [ethernet] ? (192.168.100.102) at xx:xx:xx:xx:xx:xx on en0 ifscope [ethernet] ? (192.168.100.103) at xx:xx:xx:xx:xx:xx on en0 ifscope permanent [ethernet] ? (192.168.100.255) at ff:ff:ff:ff:ff:ff on en0 ifscope [ethernet] ? (224.0.0.251) at 1:0:5e:0:0:fb on en0 ifscope permanent [ethernet] ? (239.255.255.250) at 1:0:5e:7f:ff:fa on en0 ifscope permanent [ethernet] |
細かい話は省きますが、ここでは 192.168.100.1
192.168.100.102
192.168.100.103
がネットワーク内の有効なIPアドレスです。
また、PC自体は 192.168.100.103
ということも調べることができます。
(192.168.100.1
はモバイルルータで、192.168.100.102
はスマホでした。)
では、他にネットワークに繋がっている機器が無いか、ネットワーク内の機器に尋ねてみたいと思います。
1 2 3 4 5 6 7 8 9 10 11 |
$ ping 192.168.100.255 PING 192.168.100.255 (192.168.100.255): 56 data bytes 64 bytes from 192.168.100.103: icmp_seq=0 ttl=64 time=0.140 ms 64 bytes from 192.168.100.103: icmp_seq=1 ttl=64 time=0.344 ms 64 bytes from 192.168.100.103: icmp_seq=2 ttl=64 time=0.420 ms 64 bytes from 192.168.100.103: icmp_seq=3 ttl=64 time=0.354 ms 64 bytes from 192.168.100.103: icmp_seq=4 ttl=64 time=0.365 ms ^C --- 192.168.100.255 ping statistics --- 5 packets transmitted, 5 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 0.140/0.325/0.420/0.096 ms |
ここで使った 192.168.100.255
というのは "ブロードキャストアドレス" と言います。
このアドレスで "ネットワーク内の機器すべて" を指すことができる、と考えてください。
しかし、ここでのpingの応答は自分からしか返ってきてないですね。
きちんとRaspberry Piが探せたか、再び"MACアドレスとIPアドレスの組み合わせ"を表示します。
1 2 3 4 5 6 7 8 9 |
$ arp -an ? (192.168.100.1) at xx:xx:xx:xx:xx:xx on en0 ifscope [ethernet] ? (192.168.100.101) at xx:xx:xx:xx:xx:xx on en0 ifscope [ethernet] ? (192.168.100.102) at xx:xx:xx:xx:xx:xx on en0 ifscope [ethernet] ? (192.168.100.103) at xx:xx:xx:xx:xx:xx on en0 ifscope permanent [ethernet] ? (192.168.100.106) at xx:xx:xx:xx:xx:xx on en0 ifscope [ethernet] ? (192.168.100.255) at ff:ff:ff:ff:ff:ff on en0 ifscope [ethernet] ? (224.0.0.251) at 1:0:5e:0:0:fb on en0 ifscope permanent [ethernet] ? (239.255.255.250) at 1:0:5e:7f:ff:fa on en0 ifscope permanent [ethernet] |
192.168.100.106
が増えていますね。これが、Raspberry Piのようです。
ここに ssh
で接続してみましょう。
ユーザー名・パスワードは、Raspbianのデフォルト(pi/raspberry)を使用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ ssh pi@192.168.100.106 The authenticity of host '192.168.100.106 (192.168.100.106)' can't be established. ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.100.106' (ECDSA) to the list of known hosts. pi@192.168.100.106's password: The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Sun Feb 26 22:17:10 2017 pi@raspberrypi:~ $ |
無事に繋がりました!
これで、「まったく操作できない」状態から「有線LAN経由で操作できる」状態になりました。
次にWiFi経由で操作
Raspberry Piが操作できるようになったので、早速WiFi経由で操作できるようにします。
これは、モバイルルータのSSIDとパスワードを正しく設定すれば良いです。
/etc/wpa_supplicant/wpa_supplicant.conf
にアクセスポイント情報が記載されているので、これを修正します。
1 2 3 4 5 6 7 8 9 |
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 country=JP network={ ssid="New SSID" psk="New Password" key_mgmt=WPA-PSK } |
上記のssid
にSSID名、psk
にパスワード、をそれぞれ正しく入力します。
その後、WiFiのインタフェースの再起動を行ないます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
pi@raspberrypi:~ $ sudo ifdown wlan0 pi@raspberrypi:~ $ sudo ifup wlan0 pi@raspberrypi:~ $ ifconfig eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx inet addr:192.168.100.106 Bcast:192.168.100.255 Mask:255.255.255.0 inet6 addr: fe80::6e86:dc76:a9e2:a7d7/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:677 errors:0 dropped:1 overruns:0 frame:0 TX packets:512 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:61930 (60.4 KiB) TX bytes:141823 (138.4 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:320 errors:0 dropped:0 overruns:0 frame:0 TX packets:320 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:25920 (25.3 KiB) TX bytes:25920 (25.3 KiB) wlan0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx inet addr:192.168.100.107 Bcast:192.168.100.255 Mask:255.255.255.0 inet6 addr: fe80::20e2:e5eb:814f:fd58/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:788 errors:0 dropped:777 overruns:0 frame:0 TX packets:31 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:301170 (294.1 KiB) TX bytes:6746 (6.5 KiB) |
wlan0
がWiFiのインタフェース名となります。
上記のように 192.168.100.107
が割り当てられています!
では、WiFi経由でRaspberry Piに接続してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
pi@raspberrypi:~ $ logout Connection to 192.168.100.106 closed. $ ssh pi@192.168.100.107 The authenticity of host '192.168.100.107 (192.168.100.107)' can't be established. ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.100.107' (ECDSA) to the list of known hosts. pi@192.168.100.107's password: The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Sun Feb 26 22:20:18 2017 from 192.168.100.103 pi@raspberrypi:~ $ |
無事に接続できました!
イーサネットケーブルを抜いても、きちんとRaspberry Piを操作できています。
モバイルルータを "APモード" に戻し、モバイルルータが外部と通信できる状態に戻しておきます。
これで、Raspberry Piから外部へも通信できるようになりました。
まとめ
これで、いつでもRaspberry Piを持ち出せるようになりました!
有線LANで繋げた状態の時にRaspberry PiのIPアドレスを調べる方法は、少々力技ではありますが、ネットワーク(主にTCP/IPとその実装周り)を知っていれば思いつくものです。
基礎的な知識ですが、きちんと身につけておくといざという時に役に立つものだと実感できました。
近いうちに秋葉原で何かセンサーを探してきて、次回の記事のネタとしたいと思います。