戻る

玄箱ルーター化その1

玄箱をルーター化する。


玄箱の性能上、通信速度が出ないという噂もあるが、それでもルーター化してみる。
ここでは、以下のような構成を目指す。
※この構成はクライアントPCにも無線LANが必要です。

Bフレッツ − 光終端端末 − (eth0:有線)玄箱(wlan0:無線) 〜 クライアントPC(多数)

これまでの設定と合わせて玄箱を回線につないで電源を入れたら、ファイルサーバにもなる、メールサーバにもなる、webサーバにもなる、DHCPサーバにもなる、無線アクセスポイントにもなる・・・という、お手軽多機能コンパクト玄箱を目指す。
ここまでやってくれると、なんつーか、これは革命だね(笑
というか、このくらいの機能をデフォルトで搭載したルーターをどこかの会社が発売してくれればいいのにね。

DNSサーバとDHCPサーバを兼用してdnsmasqをインストールすることにした。
apt-get install dnsmasq

host.confの編集(hosts,bindで名前を解決すると言う意味だと思う)
vi
/etc/host.conf
order hosts,bind


DNSサーバの優先順位で玄箱自身最優先に選択
vi /
etc/resolv.conf
nameserver 192.168.0.100
nameserver 192.168.0.1 <以前の設定のルーター。そのまま残してみた


hostsファイルの確認。
vi /etc/hosts
127.0.0.1 localhost
192.168.0.100 KURO-BOX
192.168.1.100 KURO-BOX   <<追加

dnsmasqの設定ファイルを修正
vi /etc/dnsmasq.conf
以下の行を探して行頭の#を削除して修正
黒箱のIPはlocalnetドメインにすると言う設定だと思う。
server=/localnet/192.168.1.100
localnetドメインはローカルですの宣言かな。
local=/localnet/
wlan0に接続に来た端末にIPを割り当てると言う設定だと思う。
interface=wlan0
192.168.1.50から192.168.1.99の間のIPを割り当て、ネットマスクは255.255.255.0で、12時間IPを貸与する。
dhcp-range=192.168.1.50,192.168.1.99,255.255.255.0,12h


DHCPで割り当てるIPにアクセス許可があるか、hosts.allowファイルの確認。(結構な落とし穴)
vi /etc/hosts.allow
ALL : 192.168.1.0/255.255.255.0

USB無線LANチップを抜いても問題ないようにホットプラグのスクリプトに設定を書く。
vi /etc/hotplug/usb/zd1211
ブリッジ接続を解除するために以下のように修正
#!/bin/sh
ifup wlan0
iwconfig wlan0 essid "F43F4EGROUP"
iwconfig wlan0 key s:testt
iwconfig wlan0 mode master
iwconfig wlan0 rate auto
iwconfig wlan0 channel 11
ifconfig wlan0 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255 up

vi /etc/hotplug/usb/zd1211.off
次の2行のみ記述して保存
#!/bin/sh
ifconfig wlan0 down


ここで、再度カーネルの再構築
cd /usr/src/linux-2.6.20
にて作業をする。

玄箱のCPUの指定
export ARCH=ppc

カーネル2.6.20へのmoduleの追加と削除(2.6.20以前では選択項目の場所が異なる)
make menuconfig
Networking ->
   
Networking options ->
        [*]Network packet filtering framework (Netfilter) ->
            Netfilter connection tracking support(CONFIG_NF_CONNTRACK_ENABLED)
                Core Netfilter Configuration --->  以下すべてを*で組み込む
                IP: Netfilter Configuration ---> 以下すべてを*で組み込む
                Bridge: Netfilter Configuration ---> 以下すべてを*で組み込む
                ※以下のものだけでよいと思うが、必要機能の組み込み忘れが怖いので上のように全ての物を組み込んでいる
                Core Netfilter Configuration
                    <*> Netfilter netlink interface
                    <*> Netfilter Xtables support (required for ip_tables)
                        <*> Netfilter Xtables supportを組み込んだら新たに表示される項目すべて
                        <*> "conntrack" connection tracking match support
                        <*> "state" match support
                IP: Netfilter Configuration --->
                    <*> IPv4 connection tracking support (required for NAT) (NEW)
                    <*> IP tables support (required for filtering/masq/NAT)
                        <*> Packet filtering

                        <*> Full NAT
                    <*> MASQUERADE target support
            <*> 802.1d Ethernet Bridging     <-<M>で組み込んでいたので<*>に変更
別に<M>のままでもよいのだが<*>に変更する。
Device Drivers --->
    Network device support --->
        <*> Universal TUN/TAP device driver support    <-<M>で組み込んでいたので<*>に変更
        Wireless LAN (non-hamradio) --->
            <*> Hermes chipset 802.11b support (Orinoco/Prism2/Symbol)    <-<M>で組み込んでいたので<*>に変更
            <*> USB ZD1201 based Wireless device support    <-<M>で組み込んでいたので<*>に変更

モジュールで組み込むより、カーネルで組み込んだほうが通信速度が速いらしいので<*>で組み込む。

カーネル作成
make vmlinux

処理待ちの時間に休憩をとる。

objcopy -O binary vmlinux /boot/vmlinux.bin
cp System.map /boot/

module作成
make modules

moduleのインストール
make modules_install

再起動
reboot



念のために最新版にするためにインストール
apt-get update
apt-get install iptables
ルーティングやブリッジ接続をインストールしていいない場合は、外部への接続がうまくいかない。iptableの設定が終わるまでUSB無線LANを取り付けないこと。、

ipフォワードを有効にする。
vi /
etc/network/options
noをyesに変更
ip_forward=yes


再起動
reboot

ここで、USB無線LANから音信普通になった。
原因不明なのでドライバを再インストール。
ネットワーク系のカーネルを更新したので、USB無線LANドライバーを再コンパイルして再インストール(USB無線LANのドライバーインストール参照


ここでUSB無線LANを玄箱に取り付け、玄箱のLANコード(有線)をはずす。

無線LAN搭載のwindowsPCから無線LANにて玄箱に接続(F43F4EGROUP)にアクセス。(以前の設定でESSIDはF43F4EGROUP、キーは"testt"にしている)
teratermでログイン時にサーバー名をKURO-BOXで引けているか接続してみる。
接続されたらクライアントPCの無線LANのIPを確認。

※接続を確認したら、以後クライアント->無線LAN->玄箱の経路で接続したまま作業を進める。


まずは、
IPテーブルの設定
最終的にはppp0なのだが、ここでは、まだLAN内部で作業をしているので eth0を選択

vi /etc/hotplug/usb/zd1211
にて?行を追加
/etc/init.d/dnsmasq restart
/sbin/iptables -F
/sbin/
iptables -t nat -F
/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
/sbin/
iptables -A FORWARD -o eth0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
  
vi /etc/hotplug/usb/zd1211.off
に追加
/sbin/iptables -F
/sbin/
iptables -t nat -F
/sbin/iptables -t nat -D POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
/sbin/iptables -D FORWARD -o eth0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

今度は玄箱につけたUSB無線LANを引っこ抜きぃ〜再度取り付けて、再度無線にて玄箱にアクセスしてみる。
その後、玄箱に有線を付けて、インターネットにアクセスできるか試す。
現時点で、玄箱はすべてのパケットを通過させるルーターとして機能している。
ブロードバンドルーターと玄箱ルーターのダブルルーター接続!(笑

IPテーブルの確認
iptables -nL

この時点の構成
Bフレッツ − 光終端端末 − ルーター − (eth0:有線)玄箱(wlan0:無線) 〜 クライアントPC(多数)


LAN内部での玄箱HGの通信速度(有線)
FTP接続有線 玄箱->クライアントPC 5,600Kbyte/s = 5.6Mbyte/s = 44.8Mbit/s
FTP接続有線 クライアントPC->玄箱 4,900Kbyte/s = 4.9Mbyte/s = 39.2Mbit/s
玄箱と有線接続したPC間ではまずまずの速度が出るが・・・

玄箱へ無線LANにて接続して、玄箱を通じて外部(インターネット)へ接続して、速度測定を行うと
UP:3,000Kbit/s Down:3,000Kbit/s という事は? 3Mbit/s ということになる。
有線で玄箱を通さずにインターネットに接続して同様に計測すると、上り下りともに約6Mbit/sだった。

つまり、玄箱の何処かがボトルネックになっている!?

次の章にて最終的な構成
Bフレッツ − 光終端端末 − (eth0:有線)玄箱(wlan0:無線) 〜 クライアントPC(多数)
を目指すことにする