Linux |
Top
FLET'S ADSL & Linux で PPPoE
注意: フレッツADSLのサービスが始まった頃に書いたページなので、所により内容が古いです。
FLET'S ADSL の契約
ADSLモデムの物理的接続
- ADSLモデムとの接続方法としては次の 2通りがあります。
- NIC を 2枚挿しにして、片方は LAN に、片方は ADSL モデムを接続する。
ADSLモデムと NIC は「クロス接続」します。
ADSLモデム側でクロスにするスイッチが付いていれば、ケーブルはストレートでもいいです。
- NIC は 1枚で、LAN 上の HUB に ADSL モデムを接続する。
ADSLモデムと HUB は「ストレート接続」します。
NIC が 1枚で済むので、コストや設定の手間が軽減されます。
しかしこのネットワーク構成の場合、些細な弊害があります。
- ネットワークのトラフィックを MRTG などで測定すると、
eth0 上では「PPPoE のトラフィック + LAN 上の他のマシンとのトラフィック」の合計が計測されてしまう。
ただ、おそらくもっとも気になるであろう外部との通信量は ppp0 を測定すれば済む。
- ADSL モデムが 10Base-T の製品なので、100Base-TX で統一していた LAN 上にそういう機械が繋がると、何となく気分がよろしくない。:-)
PPPoE 接続
- NTT から送られてくる CD-ROM に Linux のドライバも入ってますが、
RP-PPPoE
などのフリーの実装もあります。
私は何となく RP-PPPoE 使ってます。:-)
- PPP over Ethernet というぐらいで PPP も使うので、
PPPoE の結果出来るデバイスも当然 ppp0 になります。
- RP-PPPoE などの PPP を使う接続方法の場合は、
/etc/ppp/options (Debian の場合)で「maxfail 0」と指定しておくと、
PPP コネクションが切れた後の再接続を無限に繰り返すようになるので(デフォルトは 10回でギブアップ)、
上記の保安器の問題などで万が一 ADSL のリンクが切れてしばらく復旧しない場合でも安心かもしれません。
フィルタリング
静的NAT
IRC の dcc とか、ネットゲームとか、そういう時に必要になるのが「静的NAT」です。
- PREROUTING ルールで、特定のポート番号で接続してきたパケットの宛先の IPアドレスを、
IRC とかネットゲームとかしている LAN 上のマシンのものに変換します。
- そのパケットを FORWARD ルールで通過させます。
iptables 設定例
iptables.pppoe
[追記 2005/02/04] このスクリプトは、再実行してフィルタリングルールを更新する際に
古いルールを削除する方法が乱暴なので、
既存の通信が中断されることがあります。
「Linuxでマルチホーム」のページで
よりよいスクリプトを公開していますので、そちらをご利用ください。
外からのアクセスに対しては:
- 公開サービスのポートへの接続は許可します。
- NNTP は上流(フィード元)からの接続のみ許可します。
- IRC の dcc 用に静的NAT のルールを追加し、そのパケットは FORWARD します。
- それ以外のパケットは、ログを取って捨てます。
内からのアクセスに対しては:
- 内側からの WWW アクセスは Transparent Proxy (透過プロキシ)で squid を経由させます。
[2001/12/28 追加] PlayOnline (FF XI) への対応
基本的には内(PS2)→外(PlayOnline)への通信なので、ただの NAT だけで問題ないようですが、iptables のログを見てると稀に外→中への通信が発生して(当然 reject され)るので、以下のルールを追加してみました。
PS2_IPADDR の部分(4ヶ所)を PS2 に割り振られた IPアドレスに書き換えてください。
iptables -t nat -A PREROUTING -i ppp0 -p tcp --source 61.195.48.0/21 --source-port 51240 -j DNAT --to-destination PS2_IPADDR
iptables -A FORWARD -p tcp --source 61.195.48.0/21 --destination PS2_IPADDR --source-port 51240 -j ACCEPT
iptables -t nat -A PREROUTING -i ppp0 -p tcp --source 61.195.48.0/21 --source-port 54000 -j DNAT --to-destination PS2_IPADDR
iptables -A FORWARD -p tcp --source 61.195.48.0/21 --destination PS2_IPADDR --source-port 54000 -j ACCEPT
ログ整形スクリプト
iptables の LOG ルールで syslog に出力したログを整形します。
上記の iptables.pppoe の例のように「--log-prefix 'iptables: '」と設定して
syslog に「kernel: iptables:」という文字列が記録されている行を対象にします。
- iptables-log.pl
- 標準入力からログファイルを読み込み、整形して標準出力に出力します。
perl script です。
- iptables-log.cgi
- iptables-log.pl にログを食わせるための sh script です。
出力例:
Apr 15 00:30:16 UDP AAA.aaa.ad.jp(xxx.xxx.xxx.xxx):137 > 203.141.129.23:137
Apr 15 00:30:45 TCP (yyy.yyy.yyy.yyy):4261 > 203.141.129.23:111
Apr 15 04:05:42 ICMP BBB.bbb.org(zzz.zzz.zzz.zzz):8 > 203.141.129.23
順にこう並んでます。
- 日時
- パケットタイプ
- ホスト名(始点IPアドレス):始点ポート [ICMP の場合は ICMP type]
- 終点IPアドレス:終点ポート [ICMP の場合は終点ポートなし]
ホスト名は始点IPアドレスから索けたら出力されます。
ホスト名の情報はキャッシュに溜めるので、
一度索けなかった IPアドレスについては次からは索きにいきません。