openSUSE Leap 42.1 でのWifiアクセスポイント構築方法
(画像はいつもの公式Geekoくん)
追記:2016/11/09
以下二つを追記
* DHCP設定に「authoritative」の部分
* 起動時の問題への対処法
追記:2016/11/09 タイトルでナチュラルに間違えてた、opensuseのバージョンを修正
USBのWifiアダプターを使って、アクセスポイントを作ろう。 軽い気持ちでそう思ったの。
だけど僕のOSはLinuxで。 その道のりは険しいものだったの……。
えーっとね。
Linux関連の記事では「コマンドだけ書かれてて理由は書かれてない」ことが多い。
大変多い。
完全に同じ環境なら、コマンドコピペでいいのかもしれないけれど。
ディストロが違っていると、そうもいかない。
そして結局、ネットの上から下から海外から情報を調べて、
パズルのように理解していくしかなくなる。
良くもあり悪くもありな、Linux初心者あるあるの一つだよね。
少なくとも僕はそれで困ったので、調べた結果を書き残すことにした。
なので、なるべく「別ディストロでもやるべきことが伺える記事」を目標にお送りするよ。
- 1:Wifi構築のためのチェックポイント
- 2:アクセスポイント設定
- 3:DHCPサーバー構築
- 4:ファイアーウォール設定
- 5:接続テスト
- おまけ1:「再起動したら接続できなくなった」場合は
- おまけ2:各種設定部分だけもう一度
手っ取り早いのが好きなopenSUSE人は、記事一番下の「おまけ2」を参照のこと。
1:Wifi構築のためのチェックポイント
まず問題を切り分けよう。
Wifiアクセスポイント構築に必要なステップは、以下の通り。
文字として書くとこれだけだけど、一つ一つがこんがらがってる。
すっきりまとまった情報が無かったりするんだよね。
なのでそれぞれ、個別に説明していくよ。
1.1:Wifi機器
Wifiは電波を使って通信する技術。
なので当然ながら、Wifiとして電波をやり取りする機器がいる。
ここは説明無用だろう。
USBドングルなりネットワークカードなり、PCにそういったものをつないでね。
その時には「AP対応」であるか否かが重要になってくる。
APってのはいわゆるアクセスポイント……親機のこと。
自分の機器が対応してるかどうかを調べるには、
端末でsudo iwlist scan
と入力すればいいはず……なのだが。
正直買ってから対応してなかったら泣けるよね。
買う前にきちんと調べる。重要。
(ちなみに僕の機器はiwlist
コマンドでもAPが出てこない。
そういう機種もあるみたいね)
1.2:ネットワーク機器として接続
最近のLinuxだと、おおむねの機器が挿しただけで動く。
だけどさすがに、アクセスポイント設定まで全自動というわけではない……。
とはいえ、openSUSEだとYast先生が全てやってくれるので楽ちんだ。
Yast→System→Network Settingsの欄だね。
1.2.1:ざっくり設定
(DHCPまで行うなら)主に三つの設定を変えなくちゃならない。
- 自宅ルーターの設定変更
- PCのメイン接続の設定変更
- 無線機器の設定構築
a.自宅ルーター
まずはじめに、自宅ルーターの設定画面からDHCP設定を切る。
各社によって方法が違うので、そこはGoogle先生に聞くよろし。
この辺りでしくじると即ネット寸断しちゃうから、各自注意して行ってね。
また、その際に「自宅ルーターのIPアドレス」をメモしておこう。
b.PCのメイン接続
「DHCP機能を切る = 自前でローカルIP管理」ということ。
そのため、はじめにメインPCのネット接続から見直さなくちゃならない。
利便性のため、これ以降「メインPCのネット接続」を「Eth0」と表記するよ。
もしインターフェース名違ってたら各自で読み替えてね。
この辺りが、必要なEth0接続設定。
- Default Gateway
- (Local) IP Address
- net mask
- ようわからん人はとりあえず「255.255.255.0」と入力
- host name
- 適当な名前でよし
- DNS
- 自分で立てることもできるけど、ここはGoogle先生のお力頼り
- | 8.8.8.8 | 8.8.4.4 | の二つを入力
この辺りを設定したら、とりあえずネットは復旧する……はず。
c.無線機器の設定
ここがちょっとややこしい。
なので、順を追って説明していこう。
まずはじめに、ネットワークカード自体の設定。
ここはメイン接続の部分と同じ。
- Local IP Address
- Net Mask
- Host Name
この際に気をつけるべきことは、IPアドレスの書き方。
「サブネット」を変える必要があるんだけど……まあ、細かい説明はいいや。
下の例を参考にしてね。
(僕の環境で設定したものだよ)
機器名 | 設定したIP |
---|---|
Default Gateway | 192.168.11.1 |
メインPC/Eth0 | 192.168.11.3 |
無線機器/Wlan0 | 192.168.22.1 |
数字が違っている場所が、それぞれ重要な部分。
要するに「左から三番目、192.168.***.1の部分を変えとこうね」ってこと。
IPアドレスが設定できたら、次はRouting設定。
Default Gatewayの設定ページを開いて、次のように設定を追加。
また、同じ設定ページの「Enable IPv4 Forwarding」ってところにチェックを入れておく。
IPv6については、(基本的には)入れなくて大丈夫だよ。
ともかく、これで第一段階完了!
2:アクセスポイント設定
無線機器を設定すると、アクセスポイント設定が出てくる。
これもGUIで楽ちん……だったら本当によかったんだけど。
僕の環境ではGUIから設定しても動かなかった。
他の人ではどうなのかは知らにゃい。
ともかく、そういうことなので別手段を取る。
ほかのディストロでの王道手段である、Hostapdを使う。
インストールしてない人は、おもむろに端末を開いてね。
sudo zypper in -y hostapd
無事インストールできたら、まずHostapdのコンフィグ設定。
管理者権限のもとで/etc/hostapd.conf
をいじるよ。
sudo vim /etc/hostapd.conf/
emacsおじさんやnano兄さんは、ご自分の愛用エディタを使うとよろし。
その後は、コンフィグいじり。
下のテキストを参考に、文頭の#を取るなり値を書き込むなりする。
書かれてる英語に目がクラクラするって人も、これだけは頑張って。
#重要部分 #APインターフェース #別の機器にしたいならその機器を入力 interace=wlan0 #ドライバーインターフェース #基本は初期状態のまま手を付けなくて良い #問題が起きたら変えてみて driver=hostap #SSID #下記は一例。かっちょいいオリジナルネーム推奨 ssid=The_Pipes_Are_Calling #動作モード #a/gを選択したら、nも併用される hw_mode=g #チャンネル数 #おすすめは1,6,11のどれか channel=6 # 鍵のタイプ設定 # 理由がなければ2にしておく wpa=2 # 共有鍵パスワード # 理由がなければ**絶対に**切らないこと # 下記の文章はもちろん一例。変更を強く推奨 wpa_passpharass=MY_PASSWORD_IS_WEAK # 鍵設定のおまじない # 必要ないまじないでも許して wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP #以下オプション #IEEE 80211n 規格を使うか #持ってる機器が対応してるなら1にする ieee80211n=1 #IEEE 80211ac 規格を使うか #持ってる機器が対応してるなら1にする #(僕と同じで)機器が対応してない人は手をつけないこと ieee80211ac=1
これでいいはず!
ファイルを保存できたら、いざ試験運用。
Yast→System→Services Manager から起動してみよう。
Hostapdの欄を見つけたら、おそれずにStart/Enable。
理論上はうまく行くはず。エラー落ちしたら深い悲しみが襲ってくるけれど。
エラー落ちしなかったなら、次。
DHCPサーバーの設定に向かおう。
3:DHCPサーバー構築
ぶっちゃけた話、ネット繋げるだけならDHCPサーバーはいらない。
ルーターの便利機能を切ることにもなるし、自前でトラブルを抱える羽目になる。
だけど……マイサーバーって立ててみたくない?
もしそうならば、いざ尋常にDHCPサーバーと勝負だ。
DHCPサーバー関連のパッケージは、Yast Software Management にまとめられてる。
Yast→Software→Yast Software Management
だね。
それでView→Patterns
から、DHCP/DNS Serverの欄をチェック。
ほかに用が無かったら、右下のAcceptボタンでインストール開始。
インストールが終わったら、一旦Yastを全部閉じよう。
それでもっかい開いたら、
Yast→Network Services→DNCP Server
が出てきてるはずだ。
ここは僕が設定した部分だけ紹介するから、ゆっくり応用していってね!
# アドバンスドモードでの記述だよ # GUI前提の記述のため、confファイルの記法じゃない点に注意! # global Options deault-lease-time 14400 option domain-name-servers 8.8.8.8, 8.8.4.4 #"8.8.8.8"と"8.8.4.4"を別々に入力するってことだよ # DHCPサーバーのGateway # Eth0のIPアドレスを入力 option routers 192.168.11.3 # Subnet Configuaion # Wifi機器が接続する部分 # Wlan0と同じサブネットにすること subnet 192.168.22.0 netmask 255.255.255.0 # 確保するIPアドレス量 # ぶっちゃけ家庭用ならこんな多くなくて良い range 192.168.22.1 192.168.22.50 deault-lease-time 3600 max-lease-time 86400 # おまじない二つ option.broadcast-address 192.168.22.200 option subnet-mask 255.255.255.0 #忘れちゃいけないInterface Configuration #Wlan0にのみチェックを入れること
ほんでもってDHCPサーバー起動……の前に、ファイアーウォール設定。
DHCPサーバー周りはややこしいし、 すぐエラー落ちするので、万全を期したほうが良い。
4:ファイアーウォール設定
openSUSEちゃんのファイアーウォール設定、めっちゃくちゃ楽ちん。
Yast→Security and Users→Firewall
ここも僕が設定したのを紹介するだけで大丈夫かな。
- Start Up
- Enable Firewall Automati Starting にチェック入ってるか確認
- Interfaces
- eth0 : External Zone
- wlan0 : Internal Zone
- Masquerading
- Masquerade NetworksのチェックボックスON
- Broadcast
- Internal Zone部分に「192.168.22.200」
これで……いいはず。
少なくとも僕のPCはこれで動いてる。(問題起きたらごめんね)
さあさ、これで準備は終わり!
いざ決戦の時だ!
5:接続テスト
ファイアーウォールの設定が終わったら、もっかいDHCPサーバー設定へ。
「Run DHCP Server in Chroot Jail」を設定してから、
おそるおそるStart DHCP Serverをオン→Finish。
これで「エラー落ちせず+再度設定を開いても起動したまま」なら、大成功!
もしエラー落ちしてたら、どこか設定を間違えてるかも。
もしくは他の名状しがたき干渉による問題かも。
一応、もっかいだけ Service Manerger を開いて、状態確認。
hostapd/dhcpdの二つが「Enable/Active」であるなら、だいじょぶ。
……なはず。接続を試してみて。
うまく接続できたなら、お疲れ様でした。
接続できなかったら……うん、強く生きてね。
といったところでこの記事は終わり!
じゃね!
おまけ1:「再起動したら接続できなくなった」場合は
Yast→System→Services Manager
で、hostapd/dhcpd の状態確認。
両方ともStart/Enabled になってたら、ひとまずそこはオーケー。
次はYast→Network Services→DHCP Server
を開いて、
おもむろに設定を再読み込みしてFinish。
これで動くはず。
というかこの記事書いてる今、僕の環境でも発生してるから、
何か問題が隠れてる可能性大。たぶん、サービスの起動順序じゃないかと睨んでるんだけど……。
原因がわかるまでにかかる時間が読めないので、とりあえず記事は見切り発車。
理由がわかったら追記します。
と、記事投稿時は書いていた。 なんとかする方法がわかったので、追記するよ。
ぶっちゃけるとDHCPサーバー……正確にいえばdhcpd.service
の起動を遅らせれば良い。
そのためには、systemdの設定を行う必要がある。
具体的には以下の方法。
sudo vim /etc/systemd/system/multi-user.target.wants/dhcpd.timer
- 記事下にある「dhcpd.timer」の内容を入力
sudo systemctl daemon-reload
これでなんとかなったはず。 PCを再起動してたしかめてみて。
おまけ2:各種設定部分だけもう一度
行うべきこと
ネットワーク機器設定で必要なこと
- 自宅ルーターの設定変更
- PCのメイン接続の設定変更
- 無線機器の設定構築
Eth0の設定
- Default Gateway
- (Local) IP Address
- net mask
- ようわからん人はとりあえず「255.255.255.0」と入力
- host name
- 適当な名前でよし
- DNS
- 自分で立てることもできるけど、ここはGoogle先生のお力頼り
- | 8.8.8.8 | 8.8.4.4 | の二つを入力
Wlan0の設定
- Local IP Address
- 下のリストを参考につけて
- Net Mask
- 255.255.255.0
- Host Name
- お好みで
IP設定参考リスト
機器名 | 設定したIP |
---|---|
Default Gateway | 192.168.11.1 |
メインPC/Eth0 | 192.168.11.3 |
無線機器/Wlan0 | 192.168.22.1 |
/etc/hostapd.conf/
に行うべき設定。
SSID周りを除いて、僕が実際に設定してる状態だよ
#重要部分 #APインターフェース #別の機器にしたいならその機器を入力 interface=wlan0 #ドライバーインターフェース #基本は初期状態のまま手を付けなくて良い #問題が起きたら変えてみて #driver=hostap #SSID #下記は一例。かっちょいいオリジナルネーム推奨 ssid=The_Pipes_Are_Calling #動作モード #a/gを選択したら、nも併用される hw_mode=g #チャンネル数 #おすすめは1,6,11のどれか channel=6 # 鍵設定 # 理由がなければ2にしておく wpa=2 # 共有鍵パスワード # 理由がなければ絶対に切らないこと # 下記の文章はもちろん一例。変更を強く推奨 wpa_passpharass=MY_PASSWORD_IS_WEAK # 鍵設定のおまじない # 必要ないまじないでも許して wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP #以下オプション #IEEE 80211n 規格を使うか #持ってる機器が対応してるなら1にする ieee80211n=1 #IEEE 80211ac 規格を使うか #持ってる機器が対応してるなら1にする #(僕と同じで)対応機器持ってない人は手をつけないこと #ieee80211ac=1
DHCPサーバーの設定
dhcpd関連のconfファイルの場所は、以下の三つ。
/etc/dhcpd.conf
#Yastから設定した個人設定/etc/sysconfig/dhcpd
#専門的な設定1/etc/sysconfig/network/dhcp
#専門的な設定2
# アドバンスドモードでの記述だよ # GUI前提の記述のため、正式なconfファイルの記法じゃない点に注意! # global Options deault-lease-time 14400 option domain-name-servers 8.8.8.8, 8.8.4.4 #"8.8.8.8"と"8.8.4.4"を別々に入力するってことだよ # DHCPサーバーのGateway # Eth0のIPアドレスを入力 option routers 192.168.11.3 # Subnet Configuaion # Wifi機器が接続する部分 # Wlan0と同じサブネットにすること subnet 192.168.22.0 netmask 255.255.255.0 # 確保するIPアドレス量 # ぶっちゃけ家庭用ならこんな多くなくて良い range 192.168.22.1 192.168.22.50 deault-lease-time 3600 max-lease-time 86400 # おまじない二つ option.broadcast-address 192.168.22.200 option subnet-mask 255.255.255.0 #忘れちゃいけないInterface Configuration #**Wlan0にのみ**チェックを入れること #認証の高速化 #きちんとIP管理できる人だけいれてね authoriative __true
ごくごくローカルなDHCPサーバーなら、以上の設定をするとスムーズ。
ファイアーウォール設定
- Start Up
- Enable Firewall Automati Starting にチェック入ってるか確認
- Interfaces
- eth0 : External Zone
- wlan0 : Internal Zone
- Masquerading
- Masquerade NetworksのチェックボックスON
- Broadcast
- Internal Zone部分に「192.168.22.200」
dhcpd.timer
この記述そのままで行うなら、
必ずファイル名をdhcpd.timer
とすること。
別のファイル名にしたい場合は、
[Timer]
部分にUnit=dhcpd.service
と入れれば良い。
[Unit] Description=When system boot, boot Waited dhcpd. [Timer] OnBootSec=1min [Install] WantedBy=multi-user.target.wants