ラズパイを自宅で使う分には、今回のような設定はいらないと思う。
ラスパイでラジコンを作るにあたって、必要になりそうなのでアドホック接続の設定を行った。
以下に一般的な接続方法とアドホック接続の絵を書いてみた。
図1 一般的な接続方法の図
アクセスポイントであるルーターを介して、ラズパイと接続している。
ラズパイをPCみたいな使い方をする分にはこちらで事足りる。
図2 アドホック接続
対して、アドホック接続は、PCとラズパイが直接通信を行う。
これは、アクセスポイントであるルーターが届かない範囲でラズパイを動かしたいときに使える。
ラジコンも外で動かしたいので、アドホック接続で設定を行うことにする。
PCとラズパイが通信できる距離がどんなもんなのかは、ラジコンを動かし始めたら測定してみる。
尚、ラズパイにsimカードを挿して通信することも可能みたいで、そうなれば距離の制約はなくなるんじゃないか!と夢が広がります。
以降は、実際にアドホック接続の設定を行った際の作業内容をメモする。
ssh経由で設定を行ってもいいんだけれども、接続確認でNICの再起動をすると、きっとsshの接続が切れたり、設定がうまくいかないと、ssh接続そのものができなくなる。
なので、キーボードやらHDMIケーブルやら用意して作業した方が無難。
IPを固定する
アドホック接続では、DHCPサーバーの役割を担っている、Wifiルーターを経由しないことになる。
つまり、IPアドレスは固定で振り出す必要がある。
ここでは、二度手間感があるけれども、IPアドレスの固定を行った後に、アドホックの設定を行った。
/etc/dhcpcd.conf
固定するIPをdhcpcd.confに記載する。
後述のinterfaceに記載してもいけるけれども、推奨はこっちとのこと。
interface wlan0
static ip_address=192.168.1.12/24
static routers=192.168.1.1
staitc domain_name_servers=192.168.1.1
~
/etc/network/interfaces
iface wlan0 inet の部分を、dhcp→manualに変更する。
auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
ここの定義の仕方で挙動がどう変わるのかが、しっくりきてない。
試した結果(ちょっと怪しい)を以下に残す。
dhcp:IPアドレスをDHCPサーバーから取得する。
dhcpcd.confに固定IPを記述しても、interfaceの定義が優先されそう。
static:IPアドレスを固定する。
ただ、staticにすると、interfaceにその定義を追加しなきゃいけないっぽい。
manual:dhcpcd.confを見にいってくれるみたい。
でもdhcpcd.confでDHCPサーバから取ってこいって書くことってあるのかな。
ifdown、ifupコマンドで確認
前述の設定を行ったら、IPアドレスが固定されていること、今まで通りsshで接続できること、を確認する。
再起動するのもいいんだけれども、うまくいっていない場合、何がうまくいっていないかわからないことが多い。
ここでは、NICの有効化、無効化を行う、ifdown、ifupコマンドを使って確認を行った。
・インタフェースを一旦、無効化してから
pi@raspberrypi:~ $ifdown wlan0
・インタフェースを、再度有効化する
pi@raspberrypi:~ $ifup wlan0
このとき、interfaceの定義に問題があったりすると、エラーメッセージを表示してくれる。
その後、ifconfigコマンドで、wlan0に固定したIPアドレスが設定されていれば大丈夫。
設定はシンプル。
interfacesに内容を少し変更する。
- wirelss〜の定義を追加する
- wpa_conf〜をコメントアウトする
だけ。
/etc/network/interfaces
auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual
wireless-channel 1
wireless-mode ad-hoc
wireless-essid pi
wireless-key 1616116161
微妙にはまるところ
wireless-key
wireless-keyはアドホック接続の際に必要となるパスワードを適当に決めて書く。
ただ、なんでもいいというわけではなく、ルールがあるみたい。
10桁か26桁の16進数である必要がある?っぽいです。
askubuntu.com
これに則っていない場合、前述のifdown、ifupコマンドを実行してみると、以下のエラーが吐かれます。
Error for wireless request "Set Encode" (8B2A) :
SET failed on device wlan0 ; Invalid argument.
とはいえ、wireless-kyeの設定がエラーの場合でも、接続自体は問題なくできます。ログイン時にパスワードを求められなくなるだけです。
# misplaced option
設定をいろいろ試している最中でinterfacesを編集し終わって、ifdown、ifupを試したところ出力されたエラー。
単純に、interfacesファイル冒頭の説明文のコメントアウトを誤って消していた。viエディタで作業するときは、あるあるな気がするので、記載しておく。
PC側のIPも固定する
アドホック接続する際には、ラズパイ側だけではなく、片方の端末もIPを固定する必要がある。
理屈がいまいちよくわかっていないので、さくっとメモがてら記載。
「システム環境設定」-「ネットワーク」-「Wifiの詳細」-「TCP/IPタブ」で以下の設定を行った。
DHCPが降り出すIPとかぶらないようにする
固定したIPとDHCPが降り出すIPが重複してしまうと、よろしくないので、DHCP側の設定を行う。
具体的にどうよろしくないかは、あんまりよくわかってないんだ。
また、DHCP側の設定もDHCPの機能を担っている機器によってさまざまなので、ここにあるのは自身のメモになる。
DHCPの機能を担っているルーターにログイン後、DHCPが割り当てるIPの個数を9個にしただけ。
割り当て開始が、192.168.1.2なので、192.168.1.10までDHCPが振ってくれると思われる。
同一ページに「DHCP固定IPアドレス設定」ってあるけれども、きっとこれはとある端末がDHCPサーバーにIPを要求した場合、常に同じIPを返却してくれるという仕組みだと思う。
DHCPサーバーありきの仕組みなので、アドホック接続の場合利用できないはず。
PC側のIPの固定が終えると、wifiのネットワーク一覧にラズパイの「wireless-essid」に設定したESSIDが表示される。
こちらを選択すれば、パスワードの設定をしていれば、入力を求められた上で入力を行い、接続ができる状態になる。
あとはその状態で、ssh接続を行えば、いつもどおり使用ができる。
$ ssh pi@192.168.1.12