FreeBSDでADSL用ダイヤルアップルーターを作ろう

使うマシン pentium MMX 157MHZ , RAM 96MB , HDD 2G (FMV DESKPOWER SU165)
使う環境 フレッツADSL8M IP8 サービス、タイプ2、レンタルモデムに、ルーターを付けて接続。

(1)なぜ作ったか??
 2月22日待望のADSLを導入。OCNの8M IP8(グローバルIPを8個付与)のサービスでインターネットサーバーを運用し始めました。しかし・・・・これがトラブルの始まり。
×数分で1回は回線が切れる「リンク切断」現象が多発。
×利用していた方たちから、たくさんの「使えない」という苦情の言葉が・・・。
×切断がひどすぎてついに市販の「ルーター」がストライキ!(ハングアップ!)数時間完全切断

ということでサーバー運用の体をなさない現象が1ヶ月も続きました。

 NTTのフレッツADSLセンターになんども電話し、おこなった改善策は
@回線スピードを8Mから1.5Mまで落としてもらった。<---全く効果無し
Aレンタルモデムを換えてもらった。<---効果無し
B近くの(歩いて10分)交換局内で工事。<---効果無し
 どうしよう???
とにかくストライキ(ハングアップ)まで起して再ダイヤルしない「ヤマハRT55i」ではダメなので、しばらく切断が続くならリブートして再ダイヤルするルーターを作れないかと思っていたら・・・ありました!!FreeBSDMLで見つけた!さすがFreeBSD

(2)さあつくろう!!<---ルーターの単なる応用でした。
 さてマシンに2枚差し込んで差し込んでカードを認識したら、カーネルを作りましょう。(OSはFreeBSD 4.5R)
KERNEL名を ADSLKERN とします。 /usr/src/sys/i386/conf の中で
cp GENERIC ADSLKERN
vi ADSLKERN

-----------------------------
ident      ADSLKERN
・・・・・・
・・・・・・
options     NETGRAPH
options     NETGRAPH_ETHER
options     NETGRAPH_PPPOE
options     NETGRAPH_SOCKET

ipfwを使ってパケットフィルターす場合は
options     IPFIREWALL
options     IPFIREWALL_VERBOSE
を追加。
またNATも使いたい場合は
options     IPDIVERT
も入れましょう。

必ずtunデバイスも有効にします。
pesudo-device    tun    1

以上編集が終わったら
いつものようにコンフィグレーションです。
config ADSLKERN
cd ../../compile/ADSLKERN
make depend ; make
このあと時間がかかって、コンパイルが終わりますので、終わったら
make install
で終了。さてリブートすれば新しいカーネルで動きます。

(3)次に ppp.conf <---ダイヤルのためのファイルを編集しましょう
/etc/ppp/ppp.conf を編集します。ed0をモデムにつなぐWAN回線側のネットワークカードとします。

default:
 set device PPPoE:ed0
 set MRU 1454
 set MTU 1454
 speed sync
 set log phase Chat IPCP CCP tun command
 add default HISADDR
 accept chap
 #enable dns <--自前のdnsサーバーを立てるならコメントアウト。

OCN:
 set authname usrname@###.ocn.ne.jp <---ユーザー名
 set authkey ******* <---パスワード

あとは訂正しないでそのままで使えます。

(4)さあつなげよう!!
# ppp -ddial OCN <-- ddial はもし切れた場合自動的にダイヤルするオプション
すると
Working in ddial mode
using interface: tun0
が表示されます。
うまくいけば、自動的にダイヤルしてインターネットにつながるはず。
# ifconfig tun0
として
inet ###.###.###.### --> aaa.bbb.ccc.ddd netmask ・・・・
とメッセージが出てくればOKです。
もしうまくいかない場合は、 /var/log/ppp.log にログがありますのでそれを見てエラーの原因を調べましょう。
なお、一部のデバイスでは自動でインターフェースが有効にならないようですので、その場合
# ifconfig ed0 up
としてインターフェースを有効にしてから接続しなければならない場合もあります。
なお、つながってもまだルーターまでですので、ルーターとして内部と外部をつなぐためには以下の方法を使います。

(5)起動時に接続する。
/etc/rc.conf 内に以下の記述をします。

ppp_enable="YES"
ppp_mode="ddial"
ppp_profile="OCN"
を追加。
さて、グローバルIPを付与されている場合は
ppp_nat="NO"
とNAT機能を禁止します。
 さてルーターとして動かすためには
gateway_enable="YES"
firewall_enable="YES"
firewall_type="open"
を必ず記述しましょう。なお、このルーターにipfwを設定する場合は、他のページに設定方法を載せておきましたのでそれをご覧ください。
もしクラッカーなどのアクセスがあった場合は、柔軟にルーターのipfwを設定すればいいのです。

上記が私のところのネットワーク図です。ルーターにIPフィルターを設定しないのは、FreeBSDでかなりのセキュリティー機能があること、またファイアーウォールを挟んで、マイクロソフトウィンドウズを使っているためです。
 なお、マイクロソフトウィンドウズですが、そのままネットワークに直につなげることは危険です。直につなげて常時接続する場合は必ずアンチウィルスソフトやファイアーウォールソフトを入れておかなければなりません。なにしろ、毎日誰かがインターネット上のマシンにアタックをかけているというのがこの世界の常識ですから・・・。私のFirewallマシンにはほとんど毎日誰かが入れ替わり立ち替わりアクセスを試みています。「なんか空いているポートはないかな?、OSはウインドウズかな?」という感じで・・・。
 
現在(4月5日以降)、ルーターでは簡単なフィルターを付けて、軽めのファイアーウォールにしてます。で、FreeBSDで作ったファイアーウォールではかなり厳しいフィルタールールで運用してます。

(6)後日談@・・・・
 さて、このルーターに8分間インターネットにつがってなければ、自動的にリブートして再接続をはかるというシェルコマンドをCRONで設定したら、ひどいときには1日に15回もリブートしてました。もう頭にきて、ADSLのサポートセンターに電話。(何回もかけて・・・)で、「いつもブチブチに切れてこまるんだけど」と苦情を言うと、今度は応対が違う!
 「お客様の環境(交換局は自宅から歩いて10分)で、しかも1.5Mまで落としてつながらないのはあきらかにケーブルがおかしいです。さっそく係のものをご自宅に行かせます」の返事。「おーーーッ」と思ったが、すでに2回来てもらってもダメなんだがとやはり心配。
 しかし2日後きたかた(同じ方、これで3回目)が、「やっとケーブルを換える許可がでましたので」とケーブル線を換えてくれました。そうしたらー!!!!!!なんとつながって全く切れないんじゃああーーーーりませんか・・・!係の方もうれしそうに「これで大丈夫ですね」、当然わたしも「ありがとうございます」でした。
現在の接続状況は
http://www.nishnet.ne.jp/setuzoku.shtml
にあります。データは3分おきにpingを飛ばし、通信状況をチェックしたものです。3月24日以前は50%〜80%だったのですが、今はほとんど100%。

(7)後日談A・・・・
 ADSLのリンク切れ問題はよくインターネットのあちこちのサイトで紹介されてますが、今回の件はあきらかにケーブルという根本的なところに問題があったのです。
 ただ、NTT側がトラブル原因解明に時間がかかったことについては、仕方がない点もあります。実は、当初ADSLを引いたケーブルそれ自身にはなんも問題がなかったのです。検査しても「交換局からお宅まで、7M以上出てます」というくらい良い結果が出ていましたから。
 しかし、ケーブル変更時に別のケーブルに換えようとしたら、「あれーおかしいぞ」。つまり隣接するケーブルに不良があり、これが使っていたケーブルに悪影響を与えていたようです。さすが高周波通信。デリケートです。昔の64kbps,33.6kbps通信や会話では現れない現象だったようです。
 で、この不良ケーブルから物理的に遠いケーブルを選んでつなげたら>(^0^)<でした。まさに偶然にリンク切断の原因が判明。

(8)後日談B・・・一般のご家庭では難しいかも
 実は、2月までプロバイダーをして、たくさんの電話回線を引いていたので、ケーブル変更も簡単にできました。また不良ケーブルから物理的に遠いケーブルもその場で選ぶことができました。
 しかし、一般のご家庭では通常電話回線1本だけですよね。だからこんなに簡単にケーブルが変更できるかは保証できません。やはり時間がかかる上に、費用もかかります。
無料ではない。もし、ほかのご家庭でこんなトラブルをかかえた場合は、気長にNTTと交渉してトラブルを解決してください。結構現場の方は親切に対応してくれます。

(9)後日談C・・・ヤマハルーターが余った
 3万円もしたルーターが余ってしもうた・・・。なにしろファイアーウォール&ルーターならノートパソコン(2台)があるし、使い道が無い。今回のトラブルのおかげで、勉強にもなったけど、このヤマハどうしようかな・・・。一応ルーターマシンが壊れたときの代替えマシンとして残しておくかな?と使い道に困っているのであります。(^^;....

(10)後日談D・・・ヤマハルーターに戻したら・・・あれッ?!
 回線が安定したころに、ルーターをヤマハRT55iに戻しました。ついでにセキュリティーも付けて。そうしたらなんと私のサーバーに誰かが頻繁にアタックしているように見えました。実際にアタックかどうかは不明ですが、あきらかにIPからホスト名の分からないものはあります。でも通常の接続でもネットワーク経由のなんらかの障害が発生し、正常な接続を「不正」と判断する場合もあるようです。
(例)
2003/03/30 13:21:11: TCP SYN flooding ###.###.###.### > (私の さーばー)
2003/03/30 13:47:58: TCP SYN flooding ###.###.###.### > (私のサーバー)
               ###.###.###.### <---IPは多分詐称でしょう。
ここでよくあるサーバーに対する攻撃を紹介します。
★ポートスキャン
 マシン上の各ポートを調べて、どんなサービスを行っているか調べることをいう。もしサービスが稼働中ならそこを攻撃しようというもの。
 これはADSL接続当初からやられていた。特に、ファイアーウォールに関するポートへは執拗に行われたようである。一応各ポートはIPFW&IPFilterで守られているけど、やはり気持ちが悪い。現在はめったにないけどたまにあるようようだ。
★DoS(Denial of System)攻撃
[1]大量のICMPをサーバーにぶつけ、その回線の通信用の回線を渋滞させる攻撃。
[2]SYN flood 攻撃--->TCP/IPの通信方法を逆手にとって、相手のサーバーのTCPコネクションを不能にする攻撃が「SYN flood攻撃」と言います。
 で、よく見ると、この
ヤマハルーターはちゃんと攻撃内容も記述して、しかもそのパケットを廃棄してくれるというんで、早速その設定をしておきましたら、たまに「誰かがアタックしてるよ」と、ルーターが警告音ならします。
 また
フィルタリングも簡単なんで、やっぱり3万円を出したことはあるかと妙に感心したんであります。みなさんも、サーバーをインターネット上で公開する場合はこういう不届き者に気を付けましょう。ちなみに、windowsマシンを常時につなげている場合は絶対にファイアーウォールソフトを入れておかないと危険です。