とりあえず、この構成で説明しましょう。
dns.arpa-castle は無線 LAN 側のホスト名。
arpa-castle.fletsphone は有線 LAN 側のホスト名。
必要な物
無線 LAN デバイス
http://linuxwireless.org/en/users/Drivers の内、"AP" の欄が yes になっている物
日本で手に入る物は Broadcom か Ralink が多いかな。
Broadcom なら SSB/PCI/PCI-E/PCMCIA どれでも。
Ralink なら PCI か USB。
やる気・根気・忍耐力
まあ、言うまでもない。
Momonga Linux 6 (または Fedora Core 11) がインストールされたパソコン
これがアクセスポイントになるんだから当然。
hostapd 0.6.9 以上
Momonga Linux 6 STABLE の場合はソースビルドでお願いします。
RPM 化は未定です(僕以外のだれかが入れるかも知れないが)
Fedora Core の場合は RPM があるようです。
Dnsmasq
dhcpd + bind でも良いが設定が面倒なので簡単なほうで。
iptables
これは標準でインストールされているはず。
ifcfg-* の知識 (マニュアル化されていないため)
わからなければ Red Hat のページにあります。
NetworkManager をオフにして network をオンにする。
一時的なら
# service NetworkManager stop # service network start
恒久的なら
# /usr/sbin/ntsysv
または
$ system-config-services
で。
hostapd をビルドする
hostapd をここから取ってきて解凍し、make するだけです。インストールは hostapd と hostapd_cli を /usr/sbin にコピーするだけで済みます。
hostapd の設定
一緒に入っていた hostapd.conf を見ながら変更してください。
# ↓使用するインターフェースの名前 interface=wlan1 # ↓ブリッジを使う時はコメントを外します。上の構成の場合は不要です。 #bridge=br0 # ↓linuxwireless.org のリストにあるデバイスを使用する時はこれを使います。 driver=nl80211 # ↓kill -s SIGUSR1 $(hostapd の PID) をするとこのファイルに接続中のステーションの情報が書き込まれます。 dump_file=/tmp/hostapd.dump # ↓hostapd_cli で使うソケットの場所を指定します。 ctrl_interface=/var/run/hostapd # ↓hostapd_cli でコントロールできるユーザーをグループIDで指定します。 ctrl_interface_group=0 # ↓ステーションのSSIDを指定します。 ssid=test # ↓国を指定します。日本の場合は JP。 country_code=JP # ↓1にすると国情報、速度制限情報を配信します。 ieee80211d=1 # ↓ハードウェアで対応している規格を a b g の中から指定します。a -> IEEE 802.11a hw_mode=g # ↓チャネル番号 channel=2 # ↓ビーコンを送る間隔 (1024ミリ秒単位) beacon_int=256 # ↓トラフィック情報をここで指定した個数のビーコンが送られた時に送ります。 dtim_period=2 # ↓接続可能な最大ステーション数 max_num_sta=255 # ↓RTS/CTSスレッショルド rts_threshold=2347 # ↓フラグメンテーションスレッショルド fragm_threshold=2346 # ↓転送速度の指定 #supported_rates=10 20 55 110 60 90 120 180 240 360 480 540 # ↓MACアドレス許可設定 # 0 = 拒否リストに無い物は許可 # 1 = 許可リストに無い物は拒否 # 2 = 外部の RADIUS サーバーを使用 macaddr_acl=0 # 上が許可リスト、下が拒否リスト # MAC アドレスを1行に1つずつ書く。 # 空でも touch しておく。 accept_mac_file=/etc/hostapd.accept deny_mac_file=/etc/hostapd.deny # 0 = オープンシステム認証 # 1 = キー共有認証 (WEP が必要) auth_algs=0 # 0 = 通常通り # 1 = 空の SSID ビーコンを送る (発見されなくなる) # 2 = クリアされた SSID ビーコンを送る (空白の SSID として見付かる) ignore_broadcast_ssid=1 # 使う WEP キー番号 # コメントアウトしておけば無効 wep_default_key=0 # WEP キー wep_key0=0102030405 #wep_key1="vwxyz" #wep_key2=0102030405060708090a0b0c0d #wep_key3=".2.4.6.8.0.23" # 自分のIPアドレス own_ip_addr=192.168.10.1
まあ、こんなものかな。他を当たればもっといろいろ載ってるよ。たとえば WPA とか。
hostapd の手動起動
# hostapd -B /etc/hostapd.conf
フォアグラウンドで動作してほしい場合は -B を消す。無線機で SSID が見付かるか確認してほしい。
WEP キーを設定したのに iwconfig で
wlan1 IEEE 802.11bg Mode:Master Frequency:2.417 GHz Tx-Power=20 dBm Retry min limit:7 RTS thr=2347 B Fragment thr=2346 B Encryption Key:off Power Management:off Link Quality:0 Signal level:0 Noise level:0 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0
となる場合は iwconfig で手動設定する。
# iwconfig wlan1 key [16進] # iwconfig wlan1 key s:[文字列]
dnsmasq
この設定が簡単なのは /etc/hosts と /etc/resolv.conf および独自の設定ファイル /etc/dnsmasq.conf を使うから。
え? 多い?
まずは /etc/hosts
127.0.0.1 localhost localhost.localdomain ::1 localhost localhost.localdomain 192.168.1.1 setup.fletsphone 192.168.1.11 arpa-castle.fletsphone 192.168.10.1 dns.arpa-castle 192.168.10.11 NintendoDS.arpa-castle 192.168.10.12 NintendoWii.arpa-castle 192.168.10.13 PSP.arpa-castle
こんな風に IP アドレスとホスト名を列挙するだけ。
次に /etc/resolv.conf
; generated by /sbin/dhclient-script search fletsphone nameserver 192.168.1.1
有線 LAN 側で dhcp を使っていると勝手に書き換わってしまいます。その時は、dnsmasq.conf で設定。
最後に /etc/dnsmasq.conf
# ↓無線側で Windows 機を使うならコメントを外す。 # (DNSリクエストが少し特殊らしい) #filterwin2k # resolv.conf の場所 (/etc/resolv.conf なら設定不要) #resolv-file= # /etc/resolv.conf を使わない場合、コメントを外す。 #no-resolv # ↓追加の DNS サーバー server=/setup.fletsphone/192.168.1.1 # ↓DHCP サービスを行わないインターフェース no-dhcp-interface=eth0 # ↓配布するアドレスの範囲とリース時間(この場合は 12 時間) dhcp-range=192.168.10.14,192.168.10.99,255.255.255.0,12h # ↓固定割り当てを行う場合、MACアドレスとIPアドレスを列挙 dhcp-host=00:1a:73:49:1e:cf,192.168.10.1 dhcp-host=00:09:bf:ff:91:a1,192.168.10.11 dhcp-host=00:22:d7:4e:3d:f1,192.168.10.12 dhcp-host=00:23:4d:68:05:72,192.168.10.13 # ↓デフォルトゲートウェイとして 192.168.10.1 を配布。 # DNS は自動的に「自分」を配布する。 dhcp-option=3,192.168.10.1
他にもいっぱい有るのでファイルのコメントを参照。
起動
# service dnsmasq start
で。
確認
$ dig @localhost NintendoDS.arpa-castle
してみる。
; <<>> DiG 9.6.1-P1-Momonga-9.6.1-3m.mo6 <<>> @localhost NintendoDS.arpa-castle ; (2 servers found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16271 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;NintendoDS.arpa-castle. IN A ;; ANSWER SECTION: NintendoDS.arpa-castle. 0 IN A 192.168.10.11 ;; Query time: 21 msec ;; SERVER: ::1#53(::1) ;; WHEN: Thu Oct 22 12:53:42 2009 ;; MSG SIZE rcvd: 56
こんな結果になる。
または
$ ping dns.arpa-castle
してみる。(resolv.conf に自分がはいっていることを確認して!)
ifcfg-* の設定
/etc/sysconfig/network-scripts に入っています。
有線側
# Networking Interface DEVICE=eth0 BOOTPROTO=dhcp HWADDR=00:17:A4:E1:39:C1 ONBOOT=yes TYPE=Ethernet IPV6INIT=no USERCTL=no NM_CONTROLLED=no PEERDNS=yes
HWADDR はデバイスの MAC アドレス。
DHCP から IP をもらう。
無線側
# WLAN Interface DEVICE=wlan1 BOOTPROTO=static HWADDR=00:1A:73:49:1E:CF TYPE=Wireless NM_CONTROLLED=no USERCTL=no IPV6INIT=no ONBOOT=yes IPADDR=192.168.10.1 NETWORK=192.168.10.0 NETMASK=255.255.255.0 BROADCAST=192.168.10.255
上のように固定する。
NETWORK の計算は
IPADDR & NETMASK
で、BROADCAST の計算は
IPADDR | ~NETMASK
で。っていっても C 言語わからくちゃだめかw
こんな書き方はできないけどねw
ルーティング
Web Caster V120 で 192.168.10.x 宛のパケットは 192.168.1.11 へ送信するようにします。
arpa-castle 側は
[lugia@arpa-castle ~]$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan1 169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 wlan1 169.254.0.0 0.0.0.0 255.255.0.0 U 1004 0 0 eth0 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
みたいになってれば問題ないはずです。
ダメだったらマスカレーディングを使います。
$ system-config-firewall
のマスカレーディングのところで有線デバイスと無線デバイスにチェックを付けて「適用」をクリックします。
もちろん CLI もありますが、面倒だったので GUI を使わせてもらいましたw
/etc/sysconfig/iptables に
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT -A FORWARD -p icmp -j ACCEPT -A FORWARD -i lo -j ACCEPT -A FORWARD -i eth0 -j ACCEPT -A FORWARD -i wlan1 -j ACCEPT -A FORWARD -o eth0 -j ACCEPT -A FORWARD -o wlan1 -j ACCEPT
こう書けば良いっぽい。
これでちゃんと接続できるでしょう(笑)
できなくても文句は言わないでほしい。なんて言ったってこの記事結構いい加減なので(笑)
起動時に有効になるようにする
hostapd を自前でビルドした時は起動スクリプトがないので、自分で書く。
#!/bin/bash ### BEGIN INIT INFO # Provides: hostapd # chkconfig: - 16 84 # config: /etc/hostapd.conf # Short-Description: A Mastermode. # Description: ### END INIT INFO # source function library . /etc/init.d/functions # Get network config . /etc/sysconfig/network RETVAL=0 PROG="hostapd" cmd=hostapd LOCK_FILE=/var/lock/subsys/hostapd CONF_FILE=/etc/hostapd/hostapd.conf iwconf=iwconfig case "$1" in start) # Check that networking is up. [ "${NETWORKING}" = "no" ] && exit 1 # The process must be configured first. [ -f $CONF_FILE ] || exit 6 echo -n $"Starting $PROG: " daemon $cmd -B $HOSTAPD_OPTS $CONF_FILE RETVAL=$? [ $RETVAL -eq 0 ] && touch $LOCK_FILE interface=`cat $CONF_FILE | grep -P "^\\s*interface=" | sed 's,^interface=\(.*\)$,\1,'` wep_key=`cat $CONF_FILE | grep -P "^\\s*wep_key0=" | sed 's,^wep_key0=\(.*\)$,\1,'` $iwconf $interface key $wep_key echo ;; stop) echo -n $"Shutting down $PROG: " killproc $cmd RETVAL=$? [ $RETVAL -eq 0 ] && rm -f $LOCK_FILE echo ;; restart|reload) $0 stop $0 start RETVAL=$? ;; condrestart) if [ -f $LOCK_FILE ]; then $0 stop $0 start fi RETVAL=$? ;; status) status $cmd RETVAL=$? ;; *) echo $"Usage: $0 {start|stop|restart|reload|condrestart|status}" exit 2 esac exit $RETVAL
上のコメントブロックは system-config-services で使われます。これを /etc/init.d に突っ込んで有効にしてあげれば完成。
終わり。