まださなぎ(旧)

誰かさんの蝋の翼。気負わず気楽に書いてくよ。

openSUSE Leap 42.1 でのWifiアクセスポイント構築方法

f:id:dettalant:20160913084534p:plain:w400

(画像はいつもの公式Geekoくん)


追記:2016/11/09
以下二つを追記
* DHCP設定に「authoritative」の部分
* 起動時の問題への対処法

追記:2016/11/09 タイトルでナチュラルに間違えてた、opensuseのバージョンを修正


 USBのWifiアダプターを使って、アクセスポイントを作ろう。 軽い気持ちでそう思ったの。

 だけど僕のOSはLinuxで。 その道のりは険しいものだったの……。

 

 えーっとね。
Linux関連の記事では「コマンドだけ書かれてて理由は書かれてない」ことが多い。
 大変多い。


 完全に同じ環境なら、コマンドコピペでいいのかもしれないけれど。
ディストロが違っていると、そうもいかない。

 

 そして結局、ネットの上から下から海外から情報を調べて、
パズルのように理解していくしかなくなる。

良くもあり悪くもありな、Linux初心者あるあるの一つだよね。
   

 少なくとも僕はそれで困ったので、調べた結果を書き残すことにした。
なので、なるべく「別ディストロでもやるべきことが伺える記事」を目標にお送りするよ。



 手っ取り早いのが好きなopenSUSE人は、記事一番下の「おまけ2」を参照のこと。


1:Wifi構築のためのチェックポイント

 
 まず問題を切り分けよう。
Wifiアクセスポイント構築に必要なステップは、以下の通り。


  1. Wifi機器を用意
  2. ネットワーク機器として接続
  3. アクセスポイント構築
  4. DHCPサーバーを構築
  5. ファイアーウォール設定
  6. 任務完了!


 文字として書くとこれだけだけど、一つ一つがこんがらがってる。
すっきりまとまった情報が無かったりするんだよね。

なのでそれぞれ、個別に説明していくよ。


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まで行うなら)主に三つの設定を変えなくちゃならない。

  1. 自宅ルーターの設定変更
  2. PCのメイン接続の設定変更
  3. 無線機器の設定構築


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の設定ページを開いて、次のように設定を追加。

  • Desination(送信先IP)
    • 無線機器/Wlan0のIPを入力
  • Gen Mask
    • 255.255.255.0
  • Gateway
    • メインPC/Eth0のIP
  • Device
    • Wlan0


また、同じ設定ページの「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
  • 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の設定を行う必要がある。


 具体的には以下の方法。

  1. sudo vim /etc/systemd/system/multi-user.target.wants/dhcpd.timer
  2. 記事下にある「dhcpd.timer」の内容を入力
  3. sudo systemctl daemon-reload


これでなんとかなったはず。 PCを再起動してたしかめてみて。


おまけ2:各種設定部分だけもう一度

行うべきこと

  1. Wifi機器を用意
  2. ネットワーク機器として接続
  3. アクセスポイント構築
  4. DHCPサーバーを構築
  5. ファイアーウォール設定
  6. 任務完了!

ネットワーク機器設定で必要なこと

  • 自宅ルーターの設定変更
  • 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
  • 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