2012年03月14日

Ubuntuで無線LANルーターを構築する

時々ですけど外出先で一つしか無いデータ通信端末(USBスティック)とMac OSのインターネット共有機能(Wi-Fiルーター機能)を使って、その他のパソコン、iPhoneからインターネットに接続することがありまして、これをXubuntuで出来るようにしておきたいなぁ・・・ということで、手順を整理してみまた。

09

単純なアクセスポイントを作るだけであればUbuntuにルーター機能は必要無いんですが、今回の目的はグローバルIPアドレスが割り当てられた回線(イーモバイルのデータ通信端末)を共有したいのでルーター(NAT)機能も使います。
当たり前ですが、無線LANルーターの役目をするUbuntu(実際にはXubuntu使ってます)パソコンには無線LANアダプタともう一つのネットワーク・インタフェース(有線ポートまたはデータ通信用USBスティック)が必要です。

hostapd(WI−FIアクセスポイントデーモン)のインストールと設定


アクセス・ポイントの構築は比較的簡単に動かすことができるhostapdを使います。
ソフトウェア・センターからでもインストールできると思いますが、ここでは端末(ターミナルエミュレータ)から次のコマンドでインストール。

$ sudo apt-get install hostapd

hostapdの設定は/etc/hostapd/hostapd.confファイルで行います。
vi又はgeditで/etc/hostapd/hostapd.confを開いて、

$ sudo vi /etc/hostapd/hostapd.conf
(viが苦手な人はgeditで。geditがなければsudo apt-get install geditでインストール)

次に示す項目を設定します。

#アクセス・ポイントとして利用する無線LANインタフェース名
interface=wlan0
#無線LANアダプタのドライバ
driver=nl80211
#クライアントに表示される無線LANアクセス・ポイント(SSID)名 
ssid=XUBUNTU
hw_mode=g
channel=7
wpa=2 # WPA2
#認証パスワード 
wpa_passphrase=MYPASSWORD
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

interfaceは無線LANで利用するインタフェース名で、通常1つしか無線LANインタフェースは無いはずでwlan0です。 心配な人は$ ifconfigと入力して表示されるインタフェース名(wlan*)を確認して下さい。
driverは$ lsmod | grep athと入力して、

26

表示される値と、こちらのページを参考に指定します。

19

僕の場合はmac80211なのでnl80211を指定(よくわからない・・・という人は、まずnl80211で試してみましょう)。


DHCPサーバのインストールと設定


hostapdで用意した無線LAN側ネットワークに接続したクライアント端末にIPアドレスをリースしてあげる為にDHCPサーバ(ISC-DHCP)を用意します。
まずは次のコマンドでインストール。

$ sudo apt-get install isc-dhcp-server

設定は/etc/dhcp/dhcpd.confファイルで行います。

$ sudo vi /etc/dhcp/dhcpd.conf

設定する項目は次の通り。

default-lease-time 600;
max-lease-time 7200;
INTERFACES="wlan0";
option domain-name "";
max-lease-time 7200;
log-facility local7;
 
subnet 10.0.0.0 netmask 255.255.255.0 {
    range 10.0.0.10 10.0.0.20; # リースするIPのレンジ(範囲)
    option routers 10.0.0.1; # クライアントから見てゲートウェイ・アドレスとなるwlan0のIPアドレス。
    option domain-name-servers 8.8.8.8; # 公開DNSサーバ
}
 
ここではwlan0で受信したDHCP要求に対し、 10.0.0.10〜20の範囲でIPアドレスをリースします。
option routersはDHCPオプションでクライアントに伝えるデフォルト・ゲートウェイのIPアドレスでwlan0のIPアドレスになります。
※この時点ではwlan0にIPアドレスは設定していないのでisc-dhcp-serverは起動しません。


ルーター設定


最後にUbuntuをNATルーターにします。10.0.0.0/24に接続したクライアントからのパケットをグローバル側のアドレスに変換してインターネットと接続してあげます。

$ sudo iptables -t nat -A POSTROUTING -s "10.0.0.0/255.255.255.0" -o ppp0 -j MASQUERADE

ppp0はイーモバイルなどのデータ通信端末で接続した場合に設定されるPoint to Point Protocolインタフェースの名前です。心配な人はインターネットに接続したら後に$ ifconfigでインタフェース名を確認してください。
あと、もう一つ次のコマンドで2つのネットワークの中継器として使うことを宣言します。

$ sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"


Wi-Fiルーターの起動


さあ、準備は出来ました!用意したサービスを起動してみましょう。
まずは無線LANインタフェース(wlan0)にIPアドレスを設定します。ここでは10.0.0.1。

$ sudo ifconfig wlan0 10.0.0.1 netmask 255.255.255.0 up

続いてDHCPサーバを起動。

$ sudo /etc/init.d/isc-dhcp-server start

NAT(アドレス変換)、パケット中継(ブリッジ)を開始。

$ sudo iptables -t nat -A POSTROUTING -s "10.0.0.0/255.255.255.0" -o ppp0 -j MASQUERADE
$ sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

最後にhostapdを起動。

$ sudo hostapd /etc/hostapd/hostapd.conf

ここまでできたらクライアント側端末からアクセスしてみましょう。設定したSSID名が見えましたか?


35

認証・接続後、インターネットに接続できれば無事完了。


もっと簡単に・・・


多分このままだと、いざという時に手順を忘れるので、簡単なシェル・スクリプトを用意してみました。
ご参考程度に。こちらからwfrouter.zipをダンロードし、ファイルを解凍します。
この中に含まれるstart.shを実行するとこの記事にあるのと同じ設定でWi-Fiルーターとして動作します(多分)。

$ sudo /path/to/wfrouter/bin/start.sh 
 Starting AP INTERFACE wlan0...
 Starting DHCPD...
 * Starting ISC DHCP server dhcpd                      [ OK ] 
 Starting IP MASQUERADE...
 Starting APD...
 
停止はstop.sh。

$ sudo /path/to/wfrouter/bin/stop.sh 
 Stopping DHCPD...
 * Stopping ISC DHCP server dhcpd                    [ OK ] 
 Stopping APD...

動作設定はwfrouter/bin/setenv.shに集めています。
 
WIFI_IF=wlan0
WIFI_DRIVER=nl80211

SHARE_IF=eth0
#SHARE_IF=ppp0

AP_SSID=UBUNTU
AP_WPA_PASSPHRASE=passwd1234567890
AP_CHANNEL=3
AP_NETWORK=10.0.0.0
AP_NETMASK=255.255.255.0
AP_RANGE="10.0.0.10 10.0.0.20"
AP_ROUTER=10.0.0.1
AP_DNS=8.8.8.8
 
有線LANを共有したい人はeth0をそのまま指定し、僕と同じようにデータ通信端末を共有する場合はppp0を有効にしてください。 
 尚、このシェルはdhcpd.conf及びhostapd.confを自動生成して上書きします。もし、既に何かしらの用途で使っていて設定ファイルが消えると困る、という方は事前にコピーをとっておいてください。 
 
それでは、より良いインターネット・ライフを!


PLANEX 150MbpsリアルポータブルWi-Fiポケットルータ (ちびファイ) MZK-RP150N
プラネックス (2011-04-28)
売り上げランキング: 438



Posted by netbuffalo at 01:10│Comments(5)TrackBack(0) Linux | ネットワーク


この記事へのトラックバックURL

この記事へのコメント
こんにちわ、こちらのページを参考にubuntuのAP化をさせてもらっております。
そちらの記事に従って設定をしたのですが、どうしてもわからないことがありましたので質問させていただきたいと思い、コメントしました。

設定は上記のとおりなのですが、
最後に sudo hostapd /etc/hostapd/hostapd.conf
にてスタートしたところ、
IEEE802.11 deassociated とエラーがでてしまいます。
このときはどういった対応をすればよろしいのでしょうか?

PC:ubuntu 12.04 ルーター:WLI-UC-GNMです。

お分かりになるようでしたら、よろしくお願いいたします。
Posted by 通りすがり at 2012年12月22日 14:30
頂いたエラーを詳しくは調べていないのですが、apt-getでインストールされるhostapdは確か0.7系だったと思います。こちら使っていて気がついたのですが、バグが多いようです。
本家サイト(http://hostap.epitest.fi/hostapd/)から最新版をダウンロードし、以下の手順でインストール確認したらどうなるでしょうか?

$ sudo apt-get install libnl-dev
$ tar xvzf hostapd-1.0.tar.gz
$ cd hostapd-1.x/hostapd
$ cp defconfig .config
$ sudo make
$ sudo make install
$ hostapd -v
hostapd v1.x)
Posted by netbuffalo(管理者) at 2012年12月23日 01:36
ご参考に僕のhostapd.confの内容を以下に示します。


$ cat /etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211
ssid=Sputnik
hw_mode=g
channel=7
wpa=1
wpa_passphrase=********
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
rsn_pairwise=CCMP
wpa_ptk_rekey=600
Posted by netbuffalo(管理者) at 2012年12月23日 01:37
5
2年も前のお話に失礼します。

参考にさせて頂き、大変助かりました。
ただ、最終的にルーティングにbridge-utilsを使いました。

原理はページオーナー様の考え方がもっとシンプルだと思います。
出先であれば対応すべきケースも多々有りましょうし。
今回の私は自宅鯖AP化だったので、自宅セグメントで統一を目指しました。
ここのページの説明でwlan0の設定はほぼ完璧に動きました。
ありがとうございます。ただただお礼を述べるばかりです。
Posted by 通りすがり at 2014年04月21日 09:19
通りすがりさん、コメントありがとうございます。
bridge-utilsを使った透過的AP、ネットワーク共有の方が家庭内ではベストですよね。
僕もどちらを記事にするか迷ったのですが自宅外の施設ではアドレス代理・NAT型ルータの方が無難よいかと思い選択しました。今後ともよろしくお願い致します。
Posted by netbuffalo at 2014年04月21日 10:57

コメントする

名前
 
  絵文字