はじめまして、インなんとかさんです。いやうそです。ごめんなさいよく知らないんですそのアニメ。
私たちKLabには、六本木本社や大阪、福岡の各事業所以外に、遠隔地から参加して勤務している社員が何名かおりまして、私はそのうちの一人です。普段の業務はメールはもちろんJabberやIRCやSkype、WikiやTracなど様々なツールを用いて連絡を取り合いつつ、通常勤務の人たちと変わらず日々はたらいております。
さてそんな折、自宅のネットワーク環境はやっぱりまあある程度充実させておきたいなと思うわけです。ましてやネットワークやLinuxをいじって飯食ってる手前、ただ漫然と○○バシカメラで買ってきたブロードバンドルータをつなげてわーいらくちんだなあえへへーとか言ってるんじゃいかんと思ったわけです。どうやってISPとつなげてどうやってパケットがルータを通って、とか見てみたいじゃないですか。
というわけでやってみました。Linuxマシンでルータづくり。
まず機材選定というか、PCを組まなければいけないわけですが最初から狙いはAtomで組もうと定めてました。mini ITXなら静音で小型のやつが組めるだろうなと。でどうせルータ用途に専念させるなら拡張性は無視でいいし、ディスク容量もほとんど要らないので取捨選択もしやすかったです。
http://www.intel.co.jp/products/desktop/motherboards/D510MO/D510MO-overview.htm
Intel® Desktop Board D510MO - Overview
私が選んだのはScythe製BM639。縦置き可能なほうが都合よかったので選びました。
http://www.scythe.co.jp/case/bm639.html
株式会社サイズ | 商品詳細 |BM639
メモリやHDDはそこそこに、あとせっかくルータなのでNICを1枚買ってきてONUと直結用にしました。
http://buffalo.jp/products/catalog/item/l/lgy-pci-gt/
LANアダプタ|LGY-PCI-GT
そして組み立ては無難に完了。LinuxのインストールはUSBメモリを使いました。
http://www.jp.debian.org/releases/lenny/i386/ch04s03.html.ja#usb-copy-flexible
4.3.2. ファイルのコピー — 柔軟な方法 [www.jp.debian.org]
USBメモリを使ってインストールイメージを作成するのには、上記URLの方法を参考にしました。設定項目を入力していけばほとんど詰まることなくいけましたよ。
あとは設定ですね。まずはsysctl周り。
net.ipv4.ip_forward = 1
これがないとはじまりません。
続いてiptablesなんですが、最近のDebianでは/etc/network/if-pre-up.d/以下に配置するべきと聞きまして、下のようなスクリプトを用意しました。
#!/bin/sh IPTABLES='/sbin/iptables' LOCAL_IF=eth0 LOCALNET='x.x.x.x/yy' ########## # initialize $IPTABLES -F $IPTABLES -X $IPTABLES -Z $IPTABLES -t nat -F POSTROUTING $IPTABLES -P INPUT DROP $IPTABLES -P FORWARD DROP $IPTABLES -P OUTPUT ACCEPT ########## $IPTABLES -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED $IPTABLES -A INPUT -j ACCEPT -i lo $IPTABLES -A INPUT -j ACCEPT -s $LOCALNET $IPTABLES -A INPUT -j ACCEPT -p tcp --dport 1723 $IPTABLES -A INPUT -j ACCEPT -p 47 $IPTABLES -A FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED ########## $IPTABLES -N outer_local ########## $IPTABLES -N local_outer $IPTABLES -A local_outer -j ACCEPT -s $LOCALNET ########## # nat $IPTABLES -t nat -A POSTROUTING -j MASQUERADE -s $LOCALNET -o ! $LOCAL_IF ########## # main table $IPTABLES -A FORWARD -j outer_local -i ! $LOCAL_IF -o $LOCAL_IF $IPTABLES -A FORWARD -j local_outer -i $LOCAL_IF $IPTABLES -A INPUT -j outer_local -i ! $LOCAL_IF
さて最後にPPPoEの設定、こちらはマルチセッションでつないでいるので、以下のようなファイルを二つ、それぞれ/etc/ppp/peers/配下に置きました。
# /etc/ppp/peers/ISP_A noipdefault defaultroute hide-password lcp-echo-interval 20 lcp-echo-failure 3 connect /bin/true noauth persist mtu 1492 noaccomp default-asyncmap plugin rp-pppoe.so eth1 user "aaa@bbb" usepeerdns
# /etc/ppp/peers/ISP_B noipdefault nodefaultroute noproxyarp hide-password lcp-echo-interval 20 lcp-echo-failure 3 connect /bin/true noauth persist mtu 1492 noaccomp default-asyncmap plugin rp-pppoe.so eth1 user "xxx@yyy"
パスワードファイルが必要なので、/etc/ppp/{chap-secrets,pap-secrets}に次の内容で配置します。
"aaa@bbb" * "ccc" "xxx@yyy" * "zzz"
最後に、自動接続させるために/etc/network/interfacesに下記を追加。
auto eth1 iface eth1 inet static auto ppp0 iface ppp0 inet ppp pre-up /sbin/ifconfig eth1 up provider ISP_A auto ppp1 iface ppp1 inet ppp pre-up /sbin/ifconfig eth1 up provider ISP_B
最後に、マルチセッションの使い分けのためのルーティング設定を追加しました。ISP_Bの方の接続は固定IPアドレスになっていて、本社との間のsshやVPN接続を行う際の認証にこのIPアドレスでのフィルタリングも行っているためです。
#!/bin/sh if [ "x$PPP_IFACE" = "xppp1" ]; then ip route add a.a.a.a dev $PPP_IFACE ip route add b.b.b.b dev $PPP_IFACE fi
以上の設定で無事Linuxルータが稼働しました。でも、これはまだまだ最初の一歩にすぎません。せっかく市販のブロードバンドルータからLinuxに入れ替えたからには、中をいろいろといじりやすい環境になったわけですからまだまだいろいろと試してみたいじゃないですか。次回以降、これにさらに手を加えて自分なりにあそんでみたいと思います。