PPPoE/固定IP8とPCルータ

    1. IPバケット
    2. Netfilter(iptables)
    3. ipchains
    4. PPPoE/固定IP8とPCルータ
      1. 前提と環境
      2. 経過/unnumbered(アンナンバード)接続
      3. 現状/PCルータとして
      4. ログ
      5. PPPoEのカーネルモード
      6. 補記
    5. DMZ(De-Militarized Zone)

前提と環境

このページで綴った内容は、筆者として責任を持ちますが、利用については無保証です。

さて、異なるネットワーク空間を連結するものをルータと位置付け、その製作のために『ファイアウォールとルーティング』の表題で、関係する概念やプロトコルを、わかったように思って来た事柄などを、何章かに分けて整理してきました。
例えば、ADSL回線でのルータは、まず当り前のことですが、PPP接続が確立していなければなりません。その上でのルータです。そのルータが単に、ADSLモデムにLANコードで接続されただけでは、残念ながら電気代がかかるただの箱です。そうでないためのTCP/IPであり、セキュリティー保証のためのNetfilterなどでした。ここまで来ても「わかったように思って来た事柄」なのかもしれませんが、整理してきた事柄のすべてをPCルータ(Linux Box)として結実させてみたい、と思います。
始めるまえに、これから構築しようとする環境を整理しておきます。それを前提として進めます。
  1. ADSLのPPPoE(Point to Point Protocol over Ethernet)接続
  2. ISPがunnumbered接続に対応していること
  3. グローバルIPアドレスを8つ取得している
  4. ADSLモデムに直結したPC機(Linux Box)をルータ化する
  5. PC機にはNICが二枚
  6. WAN側をppp0(eth0)、LAN側をeth1
  7. LAN側eth1にグローバルIPアドレスを割り振る
  8. LAN内に各種サーバを設置
  9. PPPとRP-PPPoEがインストールされている
  10. グローバルIPアドレスを202.xxx.xxx.100/29とします
PPPoEの詳細設定についてはサイト内参照ページ 「ADSLとDDNS(Domain NameServer System)」をごらん下さい。ここでは設定内容だけを箇条書きにします。
  1. ユーザ名の登録       xxxx@xxxxx.co.jp
  2. NICの指定            eth0(ADSLモデムと接続しているNIC)
  3. 自動切断             no(接続がなければ切断)
  4. DNSの設定            ISP通知のプライマリとセカンダリDNSサーバIP
  5. パスワード           ISPから通知されたパスワード
  6. ファイアウォール     0 (なし)
  7. システム起動時       no (OS起動時ADSL接続しない)
自動接続についてはPCルータ安定稼働後「on」にすることにします。また、ファイアウォールは独自に設定します。

《 ■ Linux Box ■ 》

参考までに、PCルータ機の仕様を掲げておきます。
過日、日本橋にでかけ中古PCを買い求めてきました。「FMV 6667CL6C」です。NICが1枚オンボードだったので、手持ちの「intel PRO/100+」を挿しました。メモリは64MB。CPUはCeleronTM-667MHz。二万円で収まりました。ワンランク落とし、一万数千円のもありましたが、カーネル2.4xをインストールして、iptablesを想定していましたので、とりあえずとなりましたが、少々もったいない仕様です。

詳しくは 「FMV Desktop Series FMV‐6667CL6c(Windows 95モデル)」 こちら

< 追記 >
OSのことになります。OSはTurbokinux W8を採用しました。Red Hat系であればここで用意するPCルータ(Linux Box)の仕様に特に手を加えることは、必要ないものと思います。
起動するサービスですが、以下のサービスを起動しています。他のサービスは必要に応じて起動するものとします。
  1. anaclon
  2. cron
  3. keytable
  4. network
  5. random
  6. syslog
これらのサービスでPCルータ(Linux Box)の稼働は可能ですが、例えば、
  1. adsl
  2. dhcpd
  3. iptables
  4. ssh
などが必要になるかもしれません。それもこれも環境次第です。一つの基準として記載します。(03.09.07)

経過/unnumbered(アンナンバード)接続

少々てこずりました。問題はeth1にどうやってグローバルIPアドレスを割り振るかでした。この経過を綴ることでPCルータの構築説明にします。
基本的にPPP(Point-to-Point Protocol)接続は、認証を経て二点間の通信を一対一で行うものです。PPPoEもまたこれにならい、EthnetをPPPの上で仮想的に実現しようというものです(と理解しているのですが)。コマンド「adsl-start」で通信が確立した状態を、以下のコマンド「adsl-status」で観てみます。

# adsl-status
adsl-status: Link is up and running on interface ppp0
ppp0     Link encap:Point-to-Point Protocol
         inet addr:202.xxx.xxx.100 P-t-P:yyy.yyy.yyy.yyy Mask:255.255.255.255
         UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1454 Metric:1
         RX packets:23 errors:0 dropped:0 overruns:0 frame:0
         TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:3
         RX bytes:2612 (2.5 Kb) TX bytes:889 (889.0 b)

この初期の状態のルーティングテーブルを観てみます。
# route 
ernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
isp.d-osaka.    *               255.255.255.255 UH    0      0        0 ppp0
192.168.0.0     *               255.255.255.0   U     0      0        0 eth1
loopback        *               255.0.0.0       U     0      0        0 lo
default         isp.d-osaka.    0.0.0.0         UG    0      0        0 ppp0
RP-PPPoEの設定書類をさわらず、eth1にローカルIPアドレスを割り振っています。
実はこの方法でしか、接続は確立しませんでした。eth1にグローバルIPアドレスを割り振り、コマンド「adsl-start」では通信が確立しませんでした。
結論からいえば、unnumbered(アンナンバード)接続をしないとeth1にグローバルIPアドレスを割り振ることはできない、ということです。
unnumbered接続とは何かは、以下に引用しましたので参照下さい。
unnumbered  (アンナンバード)

ネットワーク間をルータを使って接続するときにルータの外側(WAN側)にIPアドレスを割り当てないで運用する方法のことです。
2台のルータを1対1で接続するときには、1台のルータのWAN側の宛先はもう1台のルータであることが決まっているので、 WAN側にIPアドレスを割り当てなくてもパケットを送信することができます。また、ネットワーク間を専用線や電話線で接続する場合にも、 パケットの宛先は一意に決まるためunnumbered接続が可能です。
unnumbered接続をすると2台のルータが1台であるかのように扱えます。また、unnumbered接続ではWAN側にIPアドレスを割り当てなくてよいので、 管理が楽になるというメリットがあります。
市販されているいわゆるブロードバンドルータの中には、unnumbered対応と書かれているものがあります。 これは、ISP(Internet Service Provider)によっては、複数のIPアドレスを割り当てるサービスを行っているところがあり、 このサービスを受けるためにはunnumberedに対応したルータが必要になるからです。
http://dictionary.rbbtoday.com/ 『ブロードバンド辞典から』
では、RP-PPPoEでunnumbered接続をするにはどうするのか。以下のとおり「/etc/ppp/pppoe.conf」の設定を変更しました。

PPPD_EXTRA=""

の行を、次のように変更しました。最後の「:」は必須です。

PPPD_EXTRA="202.xxx.xxx.101:"

これで、eth1にグローバルIPアドレスを割り振り、pppoe接続が確立しました。
次に、PCルータ稼働での関係設定ファイルを示します。

現状/PCルータとして

《 ■ eth0とeth1 ■ 》

[ /etc/sysconfig/network-scripts/ifcfg-eth0 ]

DEVICE=eth0
ONBOOT=no





[ /etc/sysconfig/network-scripts/ifcfg-eth1 ]

DEVICE=eth1
IPADDR=202.xxx.xxx.101
NETMASK=255.255.255.248
NETWORK=202.xxx.xxx.100
BROADCAST=202.xxx.xxx.107
ONBOOT=yes
BOOTPROTO=none

eth0には何ら設定をしません。pppoe接続が確立しeth0は立ち上がりますが、ppp0として稼働します。この状況をコマンド「ifconfig」で観てみます。
# ifconfig 

eth0      Link encap:Ethernet  HWaddr 11:00:00:00:00:11
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:53 errors:0 dropped:0 overruns:0 frame:0
          TX packets:43 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:4596 (4.4 Kb)  TX bytes:2390 (2.3 Kb)
          Interrupt:5 Base address:0x2000 Memory:f4300000-f4300038

eth1      Link encap:Ethernet  HWaddr 22:00:00:00:00:22
          inet addr:202.xxx.xxx.101  Bcast:202xxx.xxx.107  Mask:255.255.255.248
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:101 errors:0 dropped:0 overruns:0 frame:0
          TX packets:49 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:10919 (10.6 Kb)  TX bytes:4820 (4.7 Kb)
          Interrupt:5 Base address:0x2040 Memory:f4301000-f4301038

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

ppp0      Link encap:Point-to-Point Protocol
          inet addr:202.xxx.xxx.101  P-t-P:yyy.yyy.yyy.yyy  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1454  Metric:1
          RX packets:26 errors:0 dropped:0 overruns:0 frame:0
          TX packets:17 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:3010 (2.9 Kb)  TX bytes:1102 (1.0 Kb)

《 ■ /etc/sysconfig/network ■ 》

この時の「/etc/sysconfig/network」ファイルは以下が内容です。
[ /etc/sysconfig/network ]

[ /etc/sysconfig/network ]

NETWORKING=yes
PROFILENAME="(null)"
HOSTNAME=router
DOMAINNAME=tako.ne.jp
#GATEWAY=202.xxx.xxx.101
#GATEWAYDEV=eth0
FORWARD_IPV4=yes
IPX=no
TIMESERVERATBOOT=yes
TIMESERVERTYPE=ntp
TIMESERVERHOST=zzz.zzz.zzz.zzz
TIMESERVERRESYNC=(none)

ここでは「GATEWAY」と「GATEWAYDEV」はコメントにしています。pppoe接続で設定されるからです。
この確立状況は上記のコマンド「ifconfig」の「ppp0」欄で観ることができます。ルーティングテーブルは以下です。
# route 
ernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
isp.d-osaka.    *               255.255.255.255 UH    0      0        0 ppp0
202.xxx.xxx.100 *               255.255.255.248 U     0      0        0 eth1
loopback        *               255.0.0.0       U     0      0        0 lo
default         isp.d-osaka.    0.0.0.0         UG    0      0        0 ppp0
これですべての設定が完了です。
あとはサーバサービスの趣旨と意図に従って、iptablesの設定を行い、拡張性の高い「PCルータ」と堅牢な「ファイアウォール」に仕立て挙げていくことになります。


《 ■ /etc/ppp/option ■ 》

なお、pppoeの回線接続が突如切れた時の対応ですが、これは「/etc/ppp/option」ファイルを以下のように修正しました。回線が切れた時は、接続するまで繋ぐことを持続せよ、となるかと思います。
スクリプトを用意すべきかと思いますが、作業が追い付きません。あなたの対処方法などお教え頂ければ幸いです。
つまり、ISP側の問題で回線が切れた場合はこちらから接続しろと指示は出しております。ですが、RP-PPPoEがダウンの場合は、OS側でスクリプト処理をしなければならないのではないか。不確かですが、それはRP-PPPoEに内装されている、という一文に出会ったように記憶するのですが、確証はありません。

[ /etc/ppp/option ]

lock
persist
maxfail 0

上記の設定で、以下のログが吐き出されているので今のところよしとしています。

Jul 19 23:27:19 router pppd[635]: No response to 3 echo-requests
Jul 19 23:27:19 router pppd[635]: Serial link appears to be disconnected.
Jul 19 23:27:19 router pppd[635]: Connection terminated.
Jul 19 23:27:19 router pppd[635]: Connect time 1111.8 minutes.
Jul 19 23:27:19 router pppd[635]: Sent 30343391 bytes, received 14488128 bytes.
Jul 19 23:27:19 router pppoe[636]: read (asyncReadFromPPP): Input/output error
Jul 19 23:27:19 router pppoe[636]: Sent PADT
Jul 19 23:27:19 router pppd[635]: Using interface ppp0
Jul 19 23:27:19 router pppd[635]: Connect: ppp0 <--> /dev/pts/1
Jul 19 23:27:24 router pppoe[1557]: PPP session is 2260
Jul 19 23:27:25 router pppd[635]: local IP address 202.xxx.xxx.101  ←PCルータのIPアドレス
Jul 19 23:27:25 router pppd[635]: remote IP address 210.xxx.xxx.218  ←ISPのDNSIPアドレス

最後にやはりお断りしておきます。上記すべては筆者の環境で検証した結果の報告です。自己責任でお願い致します。(文責/k 03.07.10)

これらの設定のあと、次の一文に出会いました。参考資料として掲げておきます。『こんなにかんたんTurbolinux7』(刊/インプレス p464)からですが、環境前提は動的に割り振られるIPアドレスを利用したADSL回線のようです。
「ADSLルータとのセッション切断後、自動接続するにはPPPoE設定ファイル/etc/ppp/pppoe.confの最後の行を変更する」

PPPD_EXTRA="persist holdoff 10"

persist ←切断の後終了せず、再接続する
holdoff (秒数) ←リンク切断から再接続まで何秒待つか。
(03.07.23)

PPPoEがダウンした場合の処置ですが、いまのところ模索段階ですが、次のように試みています。
/usr/local/bin/restart-pppoe ファイルを以下の内容で作成しました。

#!/bin/sh
if [ ! -e /var/run/ppp0.pid ]; then
/etc/rc.d/init.d/adsl restart

このファイルに実行権限を与えて、クローンに任せるというものです。

# chmod 500 /usr/local/bin/restart-pppoe
# crontab -e
  0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/local/bin/restart-pppoe

五分ごとにチェックすることになります。設定状況は「crontab -l」のコマンドで見ることができます。
この設定内容は、PCルータ機やWWWサーバ機等とそのサービスの種類によって変えなければならないでしょうが、少々不安なのは ppp0.pidファイルの処され方です。ここではPPPoEのダウンでこのファイルはなくなるであろう、という前提にたっています。このファイルがなければ処置せよ、なのですから。(03.07.31)

ログ

iptablesのfilterテーブルに以下のログ取得のルールをチェーンとして追加しているとします。

# /sbin/iptables -A INPUT -i eth1 -j LOG --log-level info --log-prefix '#DMZ#: '

iptablesのログは/var/log/messagesに出されます。
/var/log/messagesファイルから「#DMZ#」の文字列を含む行を抜き出します。

# grep "#DMZ#" /var/log/messages | less
Jul 14 08:22:23 router kernel: #DMZ#: IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:03:11:11:fe:11:11:00 SRC=192.168.0.170 DST=192.168.0.255 LEN=234 TOS=0x00 PREC=0x00 TTL=128 ID=51470 PROTO=UDP SPT=138 DPT=138 LEN=214
------ 略 ------

上記例のこのログは、DMZとして設定したローカルゾンーに対し、UDPプロトコルが送られてきていることが判ります。
項目の具体は以下のとおり。

項目内容
IN受信元NIC
OUT送信元NIC
SRC送信元IP
SPT送信元ポート
DST送信先IP
DPT送信先ポート
PROTOプロトコル

これらのログを端末エミュレータで、いちいちコマンドを打つのも大変です。MTA(Mail Transfer Agent)を起動させ、一時間毎にmailでログというのも一考ですが、ルータ内でMTAはいかがか? 何か他にいい手はあると思うのですが、決定策を今は持ちません。


PPPoEのカーネルモード

PCルータの稼働がほぼ十カ月になります。この状況に問題があるからではありませんが、ここではPPPoEのユーザモードを、カーネルモードにする手順をまとめてみたいと思います。
PPPoEをカーネルモードにするには、二つの方法があるようです。

1.カーネルの再構築でするPPPoEのカーネルモード
2.PPPとRP-PPPoE再インストール後、PPPoEのカーネルモード

カーネルモードにするということは、概略、ユーザモードのようにPPPがPPPoEを動かすのではなく、カーネル段階でPPPoEをモジュールとして組み込み動かす、ということになると思います。
では[1]と[2]の違いは何か?カーネルの再構築では、カーネルがモジュールを扱えるようにするということでいいのだと思いますが、一方[2]はPPPが作成したモジュール「rp-pppoe.so」をPPPoEが利用する、ということになると思います。この拙い理解が、やがて修正を迫られるかもしれませんが、いまはまずこのレベルで、[2]を進めます。


[ PPPとRP-PPPoEを再インストール ]

再インストールするということは、ここで対象とした「TurboLinux S8」にインストールされている両RPMパッケージが、対応していないからです。では対応しているRPMパッケージを探してくればいいではないか?となるのですが、みつかりませんでした。そこで以下のものを利用します。

ppp-2.4.2b3.tar.gz
rp-pppoe-3.5-1.src.rpm

既存のpppパッケージをアンインストールしておきます。
ppp-2.4.2b3.tar.gzは、展開してmakeするとrp-pppoe.soができます。また、rp-pppoe-3.5-1.src.rpmをリビルドしてインストールすることで、rp-pppoe.soを使えるようになりました。

# tar zxvf ppp-2.4.2b3.tar.gz
# cd ppp-2.4.2b3
# ./configure
# make
# make install

上記のインストールでrp-pppoe.soが/usr/lib/pppd/2.4.2b3/rp-pppoe.soとして作成されます。
つづいてrp-pppoe-3.5-1.src.rpmのリビルドとインストールです。

# rpm --rebuild rp-pppoe-3.5-1.src.rpm
# find / -name rp-pppoe*
/var/srs/rpm/RPMS/i586/rp-pppoe-3.5-1.i586.rpm
/var/srs/rpm/RPMS/i586/rp-pppoe-gui-3.5-1.i586.rpm
# cd /var/srs/rpm/RPMS/i586/
# rpm -Uvh rp-pppoe-3.5-1.i586.rpm
# rpm -Uvh rp-pppoe-3.5-1.i586.rpm

上記のように「TurboLinux S8」の場合「/var/srs/rpm/RPMS/i586」にRPMパッケージが作成されます。これを「turbopkg」コマンドでインストールしても何ら問題ありません。
最後に先ほどの「rp-pppoe.so」を「/etc/ppp/plugins」にコピーし「/etc/ppp/pppoe.conf」ファイルを以下のように修正して終わりです。

# Linux kernel-mode plugin for pppd. If you want to try the kernel-mode
# plugin, use LINUX_PLUGIN=/etc/ppp/plugins/rp-pppoe.so
LINUX_PLUGIN=/etc/ppp/plugins/rp-pppoe.so

この他の修正変更はありません。すべてPPPoEユーザモードと同じです。
ただし、筆者の環境ではSSLなどが安定しません。(04.04.06)


[ カーネルの再構築でするPPPoEのカーネルモード ]

これまだ試していません。
PPPoEのページを読んだりしているところです。(04.04.06)


補記

《 ■ 参考URL  ※サイト内参照ページ  引用、参考書籍 ■ 》
PPPoEを使った設定方法
ppp-2.4.2b3.tar.gz
rp-pppoe-3.5-1.src.rpm
ADSLのルータの構築について
おい、iptablesの使い方を具体的に詳しく教えろ!
※ ADSLとDDNS(Domain NameServer System)
『実践セキュリティ』 刊/ASCII
『図解ネットボランチ RTA54i/RTW65b/RTW65i 徹底活用ガイド』 著/猪口修道 刊/技術評論社
『TCP/IPで使うローカルルータ』 著/伊藤ぽん太 刊/エーアイ出版
『ステップ式サーバ構築入門 はじめてのファイアウォール』 著/内田法道 刊/技術評論社

top     home:top     server library:top     PHP PostgreSQL MySQL サンプルスクリプト     SiteMap     Open SiteMap