Pi 3をWifi AccessPoint化(Raspbian stretch Lite 2018)
昨年7月のRaspbianでアクセスポイント化する方法では、今年の3月以降のRaspbianではうまく動作しません。
なんとも厄介な話ですが、常に新しいソフトや仕組みを取り入れて成長してきた「Linux」らしい環境の変化ともいえます。
もう少し正確にかくとAccess Pointは動作するのですが、DHCPクライアントが起動に失敗していて、結果的に有線LAN側がネットワークに繋がらなくなります。
試行錯誤の結果、まともに動作できるようになりましたので手順を書いておきます。
Wifi AccessPoint化は、有線LANを接続しなくてもタブレットやスマホからWifiで直接RaspberryPi 3にアクセスできるようにするのが目的です。
1:1接続ならアドホックモードもありますが、ここでは1:N接続できるようにします。そして有線LANを接続したら、そちらからもアクセスできるようにしたいのです。
では早速はじめましょう。 基本的には昨年の方法に沿ってやっていきます。
raspi-configで国を設定する
ここでは割愛しますが、ここの中央あたりをみると分かりやすいかも。
4 Localisation Options
> I4 Change Wi-fi Country
> JP Japan
2019年10月 追記
dhcpcd.conf に
country_code=JP を追記する必要があるとのこと。
eth0、wlan0の名称を使う
Raspbian stretchになってからmacアドレスを基にした固有名称で呼ぶようになっていて使いにくくなっているので、/boot/cmdline.txt の末尾に下記を追記します。
net.ifnames=0
これでeth0、wlan0として指定することが出来るようになります。
無くても大丈夫になっている?? さすがにあの仕様は嫌われたのかも。
ソフトウェアのインストール
avahi、hostapd、dnsmasqという3つのソフトウェアを使って実現しています。 avahiはRaspbianに最初から入っているので、残り2つをインストール&設定していきます。
sshでログイン後のコマンドです。ピンク文字がコマンド。青文字はファイル編集内容です。コピペしてください。
sudo apt-get update
sudo apt-get install hostapd dnsmasq -y
とコマンドを打ってインストールします。
hostapd : アクセスポイントのソフト。
dnsmasq : ホスト名とIPアドレスを覚えるDNSサーバソフト。
今回、dnsmasqはシンプルなDHCPサーバとして使用しています。ホスト名など覚えません。 つまり本来のDNSの機能を使っていません。
DHCPクライアント設定
sudo nano /etc/dhcpcd.conf で開いて以下を追記します。(コメントアウト「行の先頭の # 」を取って編集してもよい。)
# define static profile
profile static_eth0
static ip_address=192.168.1.50
static routers=192.168.1.1
static domain_name_servers=192.168.1.1
# fallback to static profile on eth0
interface eth0
fallback static_eth0
denyinterfaces wlan0
interface wlan0
static ip_address=172.24.1.1/24
static routers=172.24.1.1
static domain_name_servers=172.24.1.1
static broadcast 172.24.1.255
dhcp割り当てに失敗したときに、fallbackで(固定)IPアドレスを指定しています。ご自身のネットワーク環境に合わせてください。これを指定しないとAPモード時にdhcpクライアントが機能しなくなります。ここがミソでした。
また、wlan0のIPアドレスもここに書きます。
以前は/etc/network/interfacesにwlan0のIPアドレスを書いていましたが /etc/dhcpcd.conf で集中管理するようにしています。新しいやり方に則ったカタチです。
ctrl+oで保存。 ctrl+x で閉じます。
hostapdの設定(AP設定)
sudo nano /etc/hostapd/hostapd.conf で新規ファイルを作って下記を書き込みます。
interface=wlan0
driver=nl80211
ssid=Pi3-AP
hw_mode=g
channel=6
ieee80211n=1
wmm_enabled=1
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_passphrase=raspberry
rsn_pairwise=CCMP
以上、ここまでです。 保存して閉じます。
太字の部分のSSIDやパスフレーズ(8文字以上)は任意で変更することが出来ます。というか、セキュリティ面から考えると必ず変更するべきです。
チャンネルは空いているところをandroidアプリのWifi Analyzerなどで探して指定してください。
この設定ファイルをhostapdに登録します。
sudo nano /etc/default/hostapd で開いて下記の1行を追記します。
DAEMON_CONF="/etc/hostapd/hostapd.conf"
ht_capab の [HT40] では チャンネル「1~9」、 [HT40-] ならチャンネル「5~13」 が使えます。
<< 2.4GHz wifiのチャンネル分布図 こちらからの転載 >>
※Pi 3 B+の 2.4G/5G Dual AP化はこちらを参考にすれば良いかもしれません。
dnsmasqでのDHCPサーバー設定
sudo nano /etc/dnsmasq.conf で下記を書き込みます。
interface=wlan0
listen-address=172.24.1.1
#bind-interfaces
server=8.8.8.8
domain-needed
bogus-priv
dhcp-range=172.24.1.50,172.24.1.100,12h
ここまで、一気にコピペしてください。 保存して閉じます。
172.24.1.50 から 172.24.1.100 までの50アドレスをDHCP用として登録しています。
※bind-interfaces の記載があるとエラーが出るため削りました。
ソフト起動&リブート
sudo systemctl enable hostapd
sudo systemctl enable dnsmasq
sudo reboot
一旦、再起動します。
これで繋がるはずだったのですが接続できませんでした。パスワード認証までは通るもののdhcpサーバからIPアドレスが降ってきません。
なぜかdnsmasqの起動に失敗している
systemctl status dnsmasq で状態を見てみると起動に失敗しています。
ということで、sudo nano /etc/rc.local で exit 0 の上に以下を追記します。
service dnsmasq stop
sleep 8
service dnsmasq start
dnsmasqを一旦止めて、数秒まってから再起動しています。
5秒くらいのスリープでもPi 3なら大丈夫なのですが、Pi ZERO W ではたまに失敗します。 ZERO Wを使うなら8秒にする方が安心です。
以上で設定完了です。
お疲れ様でした。
さらにIPv4をFORWARDING してみましょ
ようは、RaspberryPi 3がWifiルーターと同様の機能をもってしまえば済む話です。
上のところまででアクセスポイントとして動作しているため、ルーティング、フォワーディングするだけWifiルーター化できます。
IPv4 フォワードをEnableする
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
sudo nano /etc/sysctl.conf で開いて下記を追加 (というか該当箇所のコメントアウト # を外す)
net.ipv4.ip_forward=1
iptables でルーティング、フォワーディングの設定(NAT設定)
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
iptablesをセーブします
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
sudo nano /etc/rc.local で exit 0 より上の行に下記を追加して再起動時にiptablesをレストアするようにします
iptables-restore < /etc/iptables.ipv4.nat
再起動すれば完了です。
これで、Pi 3上のサーバーにもアクセスでき、さらにインターネットにも繋げることが出来ます。
Pi 3のWifi-APからネットに繋げられるということでセキュリティー面には十分お気をつけください。少なくともパスフレーズは変更してください。 また、WEPは絶対に使わないでください。 その他、インターネット側からの攻撃などもあるかもしれませんので、ご理解いただける方のみ参考にしてください。
参考サイト
https://frillip.com/using-your-raspberry-pi-3-as-a-wifi-access-point-with-hostapd/
https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md
http://kassyjp.ninja-web.net/ras/jessie/bridge.htm
にほんブログ村
ブログランキングに参加中です。 めざせ1位!
もしよろしければ「ぽちっと」お願いします。
« 新プロテクタ基板PRT-02とDC-ARROW基板 | トップページ | shairport-syncをRaspbianにインストールしてAirPlayレシーバーに »
「Raspberry Pi」カテゴリの記事
- OSC Tokyoの準備で「IGZO 7インチ」1920x1200 LCDを動かそうとしたら・・・(2024.03.08)
- Raspberry Pi5 が来た!(2024.02.26)
- Open Audio Lab.さんのPi4用ラズパイケース(2024.02.20)
- Raspberry Pi 5(2023.10.02)
- 来年からRapberryPiの供給が改善されるらしい。(2022.12.17)
コメント
« 新プロテクタ基板PRT-02とDC-ARROW基板 | トップページ | shairport-syncをRaspbianにインストールしてAirPlayレシーバーに »
[url=http://ukzakon.ru] Переуступка долга [/url] - [url=http://ukzakon.ru]ukzakon.ru[/url]
投稿: advokatBug | 2018年5月24日 (木) 16時20分
ロシア語? よめません。
投稿: たかじん | 2018年5月24日 (木) 19時09分
やりたいことがドンぴしゃりの内容で助かりました.
RasPi3をWIFI経由でスマフォから遠隔操作できるようになりました.
デバッグ時は有線のEthernetを使用するので,まさに
ぴったりの内容です.
ありがとうございました.
投稿: randi | 2018年5月26日 (土) 09時19分
good
投稿: | 2018年5月30日 (水) 10時54分
randi さん
遠隔操作系の活用ですか。 ラスベリーパイは、色んな使い方ができて面白いですよね。
お役に立てたようで良かったです。
投稿: たかじん | 2018年5月30日 (水) 22時23分
こちらこそありがとうございます.
他にも沢山,勉強になる記事を書かれていますね.
RasPi3はロボット工作も楽しいですよ.
ぜひいらしてください.
投稿: randi | 2018年6月 2日 (土) 09時34分
randiさん
いいですね。ロボット工作。
投稿: たかじん | 2018年6月 3日 (日) 09時16分
はじめまして。
ad hoc通信をしたく、上記の通りにしたのですが、AP名すら表示されません。どん詰まりになってしまいました。良いお知恵を拝借できればありがたいのですが。
投稿: Sho | 2018年6月13日 (水) 21時18分
上記の状態からの詳細になります。
小生、ラズパイゼロWを使っております。
AP名も表示されず、ifconfigやstatusをみても、正常に見えており、どん詰まり状態から調べた結果になります。
ゼロWなので、下記の有線LAN設定を消してみたところ、WiFi上ではAP名が表示されるようになりましたが、ifconfigで「172.24.1.1」が表示されず、スマホからコネクトもされないです。
「/etc/dhcpcd.conf」の
profile static_eth0
・
・
・
fallback static_eth0
#までコメントアウト
denyinterfaces wlan0
interface wlan0
static ip_address=172.24.1.1/24
static routers=172.24.1.1
static domain_name_servers=172.24.1.1
static broadcast 172.24.1.255
「dhcp割り当てに失敗したときに、fallbackで(固定)IPアドレスを指定しています。ご自身のネットワーク環境に合わせてください。これを指定しないとAPモード時にdhcpクライアントが機能しなくなります。ここがミソでした。」
っと、書かれてありましたが、ゼロWのように有線LANがない場合の対象方法が分かると助かります。
ご助言お願いいたします。
投稿: Sho | 2018年6月14日 (木) 17時42分
Sho さん
> ifconfigやstatusをみても、正常に見えており、どん詰まり状態から調べた結果になります。
この時点でのアクセスはHDMI画面でしょうか?
全て記入した状態で、有線LANがないZERO WでもAP動作します。
有線LANがなくても、fallbackに適当に何か書いてください。
いろいろ試行錯誤していて、やっと動作した!
という設定ができたあと、使っていないだろう項目(fallbackなど)をコメントアウトしたら、動作しなくなりました。 理由はよく分かりません。使っていないハズなんですけどね。
試しに、Z-MPDをSDカードに入れてみて、ifconfigなどの情報を見てみるというのも良いかもしれません。
https://nw-electric.way-nifty.com/blog/2018/05/z-mpd-ap-b90a.html
投稿: たかじん | 2018年6月14日 (木) 18時14分
たかじんさん。
ご助言ありがとうござます。
端折らずに起動すると、WiFi上でAP名が表示されないです。
AP名が出ない原因を探しております。
Eth0を設定しているのをコメントアウトすると、表示されるのですが。。。
何かコンフリクトを起こしているのでしょうか?
投稿: Sho | 2018年6月14日 (木) 19時46分
追伸
リブートすると、SSH接続が出来なくなるので、HDMIです。
Z-MPDで試して見ますね。
ありがとうござます。
投稿: Sho | 2018年6月14日 (木) 19時58分
たかじんさん。
Z-MPDを解凍して試したところ、ちゃんと起動しました。
設定ファイルを見比べたところ、「wpa_pairwise=TKIP」くらいしか違いがなかったです。
自分のシステムで、Dnsmasqを停止&起動をしてみると、「Job for dnsmasq.service failed decoause the control process exited with error code. See "systemctl status dnsmasq.service" and "journalctl -xe" for details.」と出てます。
ご助言があると助かります。
投稿: | 2018年6月15日 (金) 00時09分
Sho さん
> 設定ファイルを見比べたところ、「wpa_pairwise=TKIP」くらいしか違いがなかったです。
そこですね。 それで動かないんでしょうね。
wpa_pairwiseとrsn_pairwiseのパラメータ設定は私も少し苦労しました。
記事中の設定から変更するのであれば、
https://qiita.com/JhonnyBravo/items/5df2d9b2fcb142b6a67c
あたりが参考になるかと思います。他にももっと解りやすいサイトがあったのですが。。。 見失いました。
hostapd設定を変えたあとは、hostapdを再起動したあとにdnsmasqを再起動すれば、本来であれば反映されると思うのですが、これもうまくいきません。
手間がかかりますが、毎回OSを再起動して設定が有効かどうかをチェックしてみてください。
投稿: たかじん | 2018年6月15日 (金) 08時24分
たかじんさん。
「wpa_pairwise=TKIP」を追加して見たところ、やはりダメでした。
真っさらな、SDカードにOSだけ入れて、ad hoc通信が稼働したら自分のアプリを入れると言う実験をしようと思います。
それでもダメだったら、Z-MPDのad hoc通信が動いているのを、稼働しているアプリをアンインストールして、自分のアプリを入れてみようと思っています。こちらのアンインストールについて質問するかも知れませんかよろしくお願いします。
投稿: Sho | 2018年6月15日 (金) 10時44分
たかじんさん。
・真っさらなSDカード
・ラズパイ3(テスト用に変更)
・Raspbian Stretch Lite(2018.04.18)
上記の記事通りの手続きを行ないましたが、やはりダメでした。
Z-MPDとの違いをもう一つ見つけました。
$ systemctl status hostapd
の結果が違っていますね。
・Z-MPDだと
Active: active (running) .....
・上記の手続きだと
Active: active (exited) .....
・更にエラーメッセージがありました!
.... raspberrypi hostapd[589]: Starting advanced IEEE 802.11 management: hostapderror: unexpectedly disconnected from boot status deamon
... raspberrypi hostapd[589]: failed!
この二つのエラーメッセージが気になります。Z-MPDの当時の設定と、今回の記事の違いなのか、hostapdの仕様変更なのかが小生だと区別つきません。
お手数ですが、ご助言をお願いします。
投稿: Sho | 2018年6月15日 (金) 11時56分
Sho さん
なるほど。 仕様が変わったのかもしれませんね。
http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian_lite/images/raspbian_lite-2018-03-14/
を使っても、apt-getで取得されるソフトウェアの方がバージョンUPしていると同じ結果かもしれません。
ひとつ言えるのは、hostapdでエラーが出ていることが分かったので、そこを解決していくのが近道かと思います。
まあ、こういうバージョンによる設定の違い、仕様の違いを乗り越えて行くのがLinuxの面白いところであり、面倒なところですね。
海外サイトも含めて検索するか、ひたすら設定項目をシラミ潰し的にトライしていくか、です。
投稿: たかじん | 2018年6月15日 (金) 12時38分
たかじんさん。
やはり、Ver.2018.03.14でも変わらなかったです。
hostapd関連で海外サイトをみて、何とか例のエラーメッセージを消せる事が出来ましたが、問題が発生しました。
・hostapd、dnsmasqのプロセスが立ち上がってる状態から
⇒自動取得だと、一瞬繋がったが切れてしまう(AP名がその後消える)
⇒IP固定だと、一瞬繋がったが切れてしまう(AP名がその後消える)
・hostapdのみプロセスが立ち上がってる状態から
⇒自動取得だと、繋がらない(当然の如く)
⇒IP固定だと、一瞬繋がったが切れてしまう(AP名がその後消える)
・$ sudo hostapd /etc/hostapd/hostapd.conf
⇒上記のコマンドでも事象は同じ結果になった
⇒AP名が見えてるのが、5〜15secくらいでした。
やはり、hostapdが原因のような感じですかね。この問題は追って、自分の研究課題として追い追いと調査をします。その後、分かった事があればご報告します。
最終手段として、「Z-MPD」のイメージファイルだとad hoc通信が稼働しているので、こちらのプロセスを停止し、アンインストールして、自分のアプリを入れる方向にします。
そこで、ご相談なのですが、Z-MPDで稼働しているアプリの種類とそれらのアンイストール方法もわかればお教えて頂けませんでしょうか?
お手数をおかけします。
追伸
Sabreberry32、ケース、専用アクリル板等を購入したまま、暫く組み上げてないです。
投稿: Sho | 2018年6月15日 (金) 15時41分
Sho さん
先ほどダウンロードした2018-04-18-raspbian-stretch-lite に
上の記事のままの設定をしてみたら、APが見えて、接続できましたよ。ついでにIPv4 FORWARDINGまでやってみました。
どこかコピペミスがあるのではないでしょうか?
見えにくい「スペース」に気をつけてください。全角スペースがまじっていたら削除して下さい。
一番あやしいのは /etc/hostapd/hostapd.conf ですかね。。。
一度、半角、全角スペースが判別できるテキストエディタにコピーしたあとに再びコピペしてみるというのも良いかもしれません。
検証に使ったのはPi 3B+です。
投稿: たかじん | 2018年6月15日 (金) 21時08分
http://fast-uploader.com/file/7084628567664/
こちらにSDカードイメージを置いておきます。上の記事をそのままコピペしただけです。
独自に設定変更したり、書いている内容を端折ったりする前に、まずは正しくコピーするスキルを身に付ける事が大切かと思いました。
HDMI接続で画面を出してキーボードで入力するとコピペ出来ませんから、ssh接続して設定をするのがおススメです。
Z-MPDは、色んなサービスを削除したり止めたりしているので、他のことをするベースには向いていないと思います。
全てを憶えている訳ではありませんが、例えばHDMI画面からはログインすら出来ません。
投稿: たかじん | 2018年6月15日 (金) 23時46分
たかじんさん。
お手数をおかけしています。
原因が判明しました。単純なことでした。
/etc/wpa_supplicant/wpa_supplicant.conf
このファイルのWiFiのSSID&PASSを全て(上3行を除く)削除したら自分のシステムでも行きました。ラズパイにapt-get等するために、ネットワーク(WiFi)に繋いで、上記のインスト後にネットワーク設定をしていたため、親機(Host)ではなく、子機(Client)になろうとしてAP名が数秒で消えてしまっていたようです。
お騒がせいたしました。それと、親切にご対応していただいてありがとうござました。
投稿: Sho | 2018年6月17日 (日) 19時16分
初めまして。質問させていただきます。
「dhcp割り当てに失敗したときに、fallbackで(固定)IPアドレスを指定しています。ご自身のネットワーク環境に合わせてください。」
とあるのですが,IPアドレスは何を記述したら良いのでしょうか?
ページに記載されているIPアドレスのままでも動作するのでしょうか?
投稿: wa | 2018年10月 4日 (木) 15時23分
wa さん
ご自宅のルータの(初期)設定次第と思います。
多くのルータのDHCP設定は「192.168.0.***」もしくは「192.168.1.***」になっていると思います。
sshで接続しているときに ifcongif とコマンドを打って現在のRaspberryPiのIPアドレスを見てみると分かります。 DHCPサーバーが割り当てる領域を外して設定すればOKです。
投稿: たかじん | 2018年10月 7日 (日) 09時28分
参考にさせてもらっています.
上の設定で接続するところまでは行きました(上の方と同じくwpa_suppliment.conf を入れていてAPが見えずたいそうハマりましたが...
それで上記を踏まえてさらにUSB無線LANを接続して
・wlan0(内蔵)をeth0の代わりにインターネットへ接続
・wlan1(USB)をAP化して内部で接続
・(もし可能なら)eth0は緊急時のwlan0の代わり
のように使いたいとtryしています.
目的は,ローカル内にIoTを繋げてお互いに通信しつつ,時刻合わせなど必要な処理は外に出したい(なおかつ屋外で無線で使いたい)
というところです.
記事の状態に対してwlan1を挿して認識させたあとにwlan0を家のルーターなどに接続するとwlan1も子機化してしまっているように見えます(APが見えなくなる)
自分としては完全に手詰まり状態です.
なにかアドバイスなどありましたら教えていただけると助かります
投稿: yakatano | 2018年11月30日 (金) 10時47分
yakatano さん
2つのwlanを使うということですね。
私も試したことがないので、何ともアドバイスのしようがないのですが、RaspberryPiはユーザー数がすごく多く、海外のサイトも視野にいれて検索に入れると、色々な案がヒットすると思います。
ただ、Linuxは古い情報のものは使えないことも多いので、1年以内の情報で検索するのが良いかと思います。
おやくにたてず、すすみません。
投稿: たかじん | 2018年11月30日 (金) 23時02分
貴重な情報ありがとうございました。おかげさまでAP化できました。
dhcpcd.confに
country_code=JP
を追加しないと、全てまともに動いていても、APが見えませんでした。
Debian 9 jessieです。
投稿: Gara | 2019年10月13日 (日) 12時21分
Gara さん
ご報告ありがとうございます。
Linuxは常に更新し続けていくので、同じ方法が通用しなくなったりしますからね。
> dhcpcd.confに
> country_code=JP
があれば、今でも通用するということで、記事の方に追記させていただきたいと思います。
投稿: たかじん | 2019年10月14日 (月) 14時58分