豆腐とコンソメ

豆腐とコンソメ

もろもろのプログラム勉強記録

ラズパイをアドホック接続で使用する

ラズパイを自宅で使う分には、今回のような設定はいらないと思う。
ラスパイでラジコンを作るにあたって、必要になりそうなのでアドホック接続の設定を行った。

アドホック接続とは

以下に一般的な接続方法とアドホック接続の絵を書いてみた。

図1 一般的な接続方法の図
f:id:konoemario:20170504211457p:plain:w300

アクセスポイントであるルーターを介して、ラズパイと接続している。
ラズパイをPCみたいな使い方をする分にはこちらで事足りる。

図2 アドホック接続
f:id:konoemario:20170504211458p:plain:w300

対して、アドホック接続は、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


ここの定義の仕方で挙動がどう変わるのかが、しっくりきてない。
試した結果(ちょっと怪しい)を以下に残す。

  • dhcpIPアドレス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に内容を少し変更する。

だけ。

/etc/network/interfaces

auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual
#wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

#ad-hoc用の設定 有効にする場合コメント解除して、wpa-confをコメントアウト
#チャンネルの番号はなんでもよいみたい。うまくいかないときにかえてみる 
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を固定する必要がある。

理屈がいまいちよくわかっていないので、さくっとメモがてら記載。

Mac OS X の場合

「システム環境設定」-「ネットワーク」-「Wifiの詳細」-「TCP/IPタブ」で以下の設定を行った。

f:id:konoemario:20170506123812p:plain:w300

DHCPが降り出すIPとかぶらないようにする

固定したIPとDHCPが降り出すIPが重複してしまうと、よろしくないので、DHCP側の設定を行う。
具体的にどうよろしくないかは、あんまりよくわかってないんだ。

また、DHCP側の設定もDHCPの機能を担っている機器によってさまざまなので、ここにあるのは自身のメモになる。

f:id:konoemario:20170506125104p:plain:w300

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が表示される。

f:id:konoemario:20170506125411p:plain:w300

こちらを選択すれば、パスワードの設定をしていれば、入力を求められた上で入力を行い、接続ができる状態になる。

あとはその状態で、ssh接続を行えば、いつもどおり使用ができる。

$ ssh pi@192.168.1.12