images header
Index >> Plamo Linux Fan >> インストール実績メモ〜Libretto20でルータ編
                インストール実績メモ〜Libretto20でルータ編
2001/10/15
2001/04/13:
ipchainsにログ収集オプションをつけました。

 いまさらながら、Libretto20 へ Plamo-2.1 をインストールしたときのメモです。いえ、使い道がなくなってしまった Libretto20 があったので、ダイヤルアップルータにしてしまおうと考えたのです。もう内蔵時計も電池がないのか、時刻がずれるようになってしまいましたしね(>_<)

1.マシン情報
  1. メーカ:東芝
  2. 機種名:Libretto20
  3. SuperProbe出力
First video: Super-VGA
        Chipset: Cirrus (chipset unknown) (Port Probed)
                Signature data: 38 (please report)
        Memory:  512 Kbytes
        RAMDAC:  Sierra SC1148{2,3,4} 15-bit or SC1148{5,7,9} 15/16-bit HiColor
                 (with 6-bit wide lookup tables (or in 6-bit mode))
  1. dmesg抜粋
Console: colour VGA+ 80x25
Calibrating delay loop... 37.38 BogoMIPS
Memory: 18896k/20672k available (892k kernel code, 412k reserved, 432k data, 40k
 init)
Checking if this processor honours the WP bit even in supervisor mode... Ok.
Dentry hash table entries: 4096 (order 3, 32k)
Buffer cache hash table entries: 32768 (order 5, 128k)
Page cache hash table entries: 8192 (order 3, 32k)
VFS: Diskquotas version dquot_6.4.0 initialized
CPU: AMD 486 DX/4 stepping 04
Checking 386/387 coupling... OK, FPU using exception 16 error reporting.
Checking 'hlt' instruction... OK.
POSIX conformance testing by UNIFIX
PCI: No PCI bus detected
Linux NET4.0 for Linux 2.2
Based upon Swansea University Computer Society NET3.039
NET4: Unix domain sockets 1.0 for Linux NET4.0.
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP
TCP: Hash tables configured (ehash 32768 bhash 32768)
Starting kswapd v 1.5
Detected PS/2 Mouse Port.
Serial driver version 4.27 with no serial options enabled
ttyS00 at 0x03f8 (irq = 4) is a 16550A
pty: 256 Unix98 ptys configured
apm: BIOS version 1.1 Flags 0x02 (Driver version 1.13)
Real Time Clock Driver v1.09
hda: TOSHIBA MK2105MAT, ATA DISK drive
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
hda: TOSHIBA MK2105MAT, 2067MB w/0kB Cache, CHS=525/128/63
md driver 0.36.6 MAX_MD_DEV=4, MAX_REAL=8
Partition check:
 hda: hda1 hda2
VFS: Mounted root (ext2 filesystem) readonly.
Freeing unused kernel memory: 40k freed
Adding Swap: 92728k swap-space (priority -1)
Linux PCMCIA Card Services 3.1.19
  kernel build: 2.2.16 #1 Sat Feb 24 02:24:01 JST 2001
  options:  [pci] [apm]
Intel PCIC probe:
  Intel i82365sl B step rev 00 ISA-to-PCMCIA at port 0x3e0 ofs 0x00
    host opts [0]: none
    host opts [1]: none
    ISA irqs (scanned) = 3,5,7,9,10,11,12,15 status change on irq 15
cs: IO port probe 0x0c00-0x0cff: clean.
cs: IO port probe 0x0800-0x08ff: clean.
cs: IO port probe 0x0100-0x04ff: excluding 0x1f8-0x1ff
cs: IO port probe 0x0a00-0x0aff: clean.
cs: memory probe 0x0d0000-0x0dffff: clean.
eth0: NE2000 Compatible: io 0x300, irq 3, hw_addr 00:xx:xx:xx:xx:xx
CSLIP: code copyright 1989 Regents of the University of California
PPP: version 2.3.7 (demand dialling)
PPP line discipline registered.
registered device ppp0
PPP BSD Compression module registered
PPP Deflate Compression module registered
2.特記事項
 
  1. インストール手順について
     Libretto20 は、PCMCIA TypeII スロットが1つしかないので、普通なら DOS パーティションをいくばくか残しておいて NIC を刺した状態で loadlin.exe でインストールをはじめるのじゃないかと思います。Plamo-2.1 の CD 内のドキュメント(/AT/docs/libretto-install.txt)でもそのような記述になっています。
     が、幸い手元に TypeII スロット増設用のポートリプリケータがあったので、これをつかって純正 FD ドライブと NIC(ACCTON EN2216-2、古い(^^;)の2枚を刺して、普通の NFS 経由インストールをしました。
    こちらのページではカードスロット1枚でインストールされているみたい・・・
     僕んちの場合は他にも LinuxBox があるので NFS インストールしましたが、他のマシンは Windows だけ、とかいう場合は、Samba 経由でインストールするといいでしょうね。こちらのメモを参考にしてください。
     また、HDD を東芝製2Gのもの(裏切らなくていい純正サイズの)に変えてあるので、X も動かしてみようと思い、お勧めパッケージの [Cannaを使うNote PCに適したパッケージ] を選択しました。XFree86 のドライバは、svga用だけ入れておきます。
     その他の手順は、通常通りです。

  2. パーティション作成について
     純正のWin95をインストールすると、ハイバネーション用に HDD の末尾にいくらか空き領域を残してパーティショニングするようですので、まずはWin95をリカバリFD (42枚!) からインストールしてみて、どのくらい残すか見てみました。メモリは拡張モジュールが入って、合計20Mです。Linux の fdisk で見て、1 - 525 シリンダーが全領域なのですが、1 - 518 までしか使わないらしかったので、Linux 用のパーティションも同様に 1 - 518 までしか使わないように設定しました。

  3. インストール
     起動フロッピーですが、/AT/Install/PCMCIA/bootdsk-net を使って作成しました。幸い、利用した ACCTON EN2216-2 という NIC は NE2000互換として認識されるので、これですんなり NFS 経由でインストールできました。
     多分おなじACCTONで、EN2216-1(RJ45コネクタしかついてないモデル)は、比較的安価で手に入るはずです。

  4. 追加したパッケージ
     パッケージを追加する前に、Plamo-2.1 の CD イメージを適当な(/home/ftp/pub)ディレクトリに FTP 経由でコピーして、/etc/fstab いじって起動時に常に /plamo あたりに loopback デバイスとしてマウントしました。fstab ではこんな感じです。

    /home/ftp/pub/plamo2.1.iso /plamo iso9660 ro,loop,exec 0 0

     手元に Libretto20 で動く CDROM ドライブがないので、インストール直後のまだちゃんと動く(笑)状態で入れておくと後が楽だ、というのがその理由です。他の CDROM ドライブがついてないサブノートでも使える手じゃないでしょうか?(自画自賛(笑)

     で、追加したパッケージですが、例によって、

    # installpkg /cdrom/contrib/Texttools/jvim.tgz(jvim)
    # installpkg /cdrom/contrib/Network/wget.tgz(wget)

    などです。
     それと、nobody 権限で updatedb が出来ない問題の対策パッケージ [find.tgz] と、アップデートされた [bind823.tgz] を、それぞれ Plamo のページ桑村さんのページ(実体はhttp://www.linet.gr.jp/~juk/plamo/parts/2.x/Network/bind823.tgz)から持ってきて当てています。

     これ以外にインストールしたものは、

    1. ProFTPD
    2. xntpd
    3. libapm

    などです。但し、proftpd は inetd 経由で動かしています。アクセスコントロールを /etc/hosts.allow だけでやりたかったのと、要らないのに常駐されるのが嫌だったもので。なにせ、20Mしかありませんからねぇ(^^;<最大搭載メモリ
     libapm は、Libretto の電源管理をコマンドラインでできるもので、今回のように Win95 を全く削除してしまった環境では、電源関係をいじる手段が他にありませんので、あるいは助かるのではないかと思って入れました。今のところ全く使ってませんが(^^;
     そのほかの方法はそれぞれのメモに記述してある通りです。

  5. X の設定
     ちょびっとペンディング(^^;
     動いていたはずなのですが、ちと変になってしまいました(笑)

  6. カーネル再構築
     インストールされるカーネルではパケット転送が出来ませんので、カーネルを再構築しました。ノートでは、PCMCIA 関連があるので、デスクトップのように簡単ではないのはご存知のとおりです。出来れば避けたかったのですが、これではやむを得ません(^^;
     また、Plamo-2.1 ではどうやら pcmcia 関連の必要なファイルのいくつかが足りないようなので、pcmcia-cs の再構築もします。カーネルの再構築と pcmcia-cs の再構築で、メモリを極限まで増設した(っつっても20Mですが(笑)libretto20 では、5時間以上かかりました(^^;

    # cd /usr/src/linux
    # zcat Patches/plamo-2.1.diff.gz | patch -p1
    # cp /boot/config .config
    # make oldconfig
    # make menuconfig

    カーネルコンフィグレーションでいじったところです(.configファイルでの表記、{}内は make menuconfig での表記)。
Processor type and features  --->
CONFIG_M486=y {(486/Cx486) Processor family }
# CONFIG_MATH_EMULATION is not set {[ ] Math emulation}
Networking options  --->
CONFIG_FIREWALL=y {[*] Network firewalls}
CONFIG_IP_FIREWALL=y {[*] IP: firewalling}
CONFIG_IP_TRANSPARENT_PROXY=y {[*] IP: transparent proxy support}
CONFIG_IP_MASQUERADE=y {[*] IP: masquerading}
CONFIG_IP_MASQUERADE_ICMP=y {[*] IP: ICMP masquerading}
CONFIG_IP_MASQUERADE_MOD=y{[*] IP: masquerading special modules support}
CONFIG_IP_MASQUERADE_IPAUTOFW=y {<*> IP: ipautofw masq support (EXPERIMENTAL)}
CONFIG_IP_MASQUERADE_IPPORTFW=y {<*> IP: ipportfw masq support (EXPERIMENTAL)}
CONFIG_IP_MASQUERADE_MFW=y {<*> IP: ip fwmark masq-forwarding support (EXPERIMENTAL)}
CONFIG_IP_ROUTER=y {[*] IP: optimize as router not host}
CONFIG_SYN_COOKIES=y {CONFIG_SYN_COOKIES=y}
Console drivers  --->
# CONFIG_FB is not set

# make dep; make clean; make bzlilo
# make modules; make modules_install
# cd ..
# tar xvfz pcmcia-cs-3.1.19.tar.gz
# cd pcmcia-cs-3.1.19
# make config
# make all
# make install
# shutdown -r now
 なお、floppy_cs-1.02 は当てませんでした。というか、当てると make install がエラー終了しちゃうんで(泣)
 今までノートPCで Plamo は避けて通ってきたからなぁ。つけが回ってきたカモ(T_T)
 そのうち必要になったらやることにします。今のところFDDには用がないので(^^;

 これらの処理が終わったら、netconfig をしましょう。pcmcia のネットワークの設定が駄目になってしまうみたいですからね。

  1. オンデマンドダイヤルアップの環境設定
     このホストをダイヤルアップルータにしたいので、pppd の設定をしました。Plamo-2.1 では、pppd と ppxp の両方が用意されていますが、僕はもう長いこと ppp を使っていなかったため、ppxp は触ったことがありません。で、昔いじったことがある pppd の方で設定することにしました。
     Plamo-2.1 の pppd の設定は、pppsetup というスクリプトで行います。これを使えば(シリアルポートのデバイス定義が間違っていなければ)多分あっという間に ppp は動作をはじめます。pppsetup スクリプトからは、下記の質問が出されますので、間違い無く答えてください。
    1. ISP へのダイヤルアップアカウント名
    2. そのパスワード
    3. ISP のドメイン名(接続したときにあてがわれるIPのドメイン名でISP自体のではない)
    4. ISP のネームサーバアドレス(これもISP自体のではなくダイヤルアップユーザに使用を許されているもの)
    5. AP(アクセスポイント)の電話番号
    6. ユーザ認証方法(ログイン認証 or PAP認証)

     最後のが結構分からない方が多いんじゃないかと思いますから、ISP との契約書類をよく読んでください。僕んちのISPの場合は、同じ電話番号でもISDNで接続するとPAP認証、モデムで接続するとログイン認証になっています。
     これで pppd が動作できるようになっているはずなので、試してみます。別のマシンから telnet で libretto20 へ接続し、

    $ tail -f /var/log/messages

    として動作状況を見ながら、本体のコンソールの方で

    # ppp-on

    とします。すると、
    kernel: PPP: version 2.3.7 (demand dialling)
    kernel: PPP line discipline registered.
    kernel: registered device ppp0
    pppd[177]: pppd 2.3.11 started by root, uid 0
    chat[178]: timeout set to 3 seconds
    chat[178]: abort on (\nBUSY\r)
    chat[178]: abort on (\nNO ANSWER\r)
    chat[178]: abort on (\nRINGING\r\n\r\nRINGING\r)
    chat[178]: send (rAT^M)
    chat[178]: expect (OK)
    chat[178]: ^M
    chat[178]: OK
    chat[178]:  -- got it
    chat[178]: send (ATH0^M)
    chat[178]: timeout set to 60 seconds
    ...
    pppd[177]: Serial connection established.
    pppd[177]: Using interface ppp0
    pppd[177]: Connect: ppp0 <--> /dev/modem
    kernel: PPP BSD Compression module registered
    kernel: PPP Deflate Compression module registered
    pppd[177]: local  IP address aaa.bbb.ccc.dd
    pppd[177]: remote IP address eee.fff.ggg.hh

    という感じで、pppd が接続をしにいく様子を見ることが出来るでしょう。このとき、このマシンにはデフォルトゲートウェイが設定されていてはいけません。pppd は接続が確立したとき、このホスト自身をデフォルトゲートウェイとして設定します。もし既存のLANで使う場合で既に1つ以上のルータが存在する場合は、ppp-on する時点でデフォルトゲートウェイを削除しておかなくてはなりません。

    # /sbin/route del default
    # netstat -rn 
    Destination     Gateway
    192.168.0.0     0.0.0.0
    127.0.0.0       0.0.0.0

     この場合は、ローカルマシンのIPアドレスは 192.168.0.x です。違う場合は適宜読み替えてください。

     デフォルトのままですと、ppp-on スクリプトを実行した時点で即接続しますが、ダイヤルアップルータにしたいので必要なときだけ接続して、無通信になったら勝手に切れるようにします。pppd-2.2 の時は外部の仕組み(kerneld/diald)を使ってこれを実現していましたが、pppd-2.3 では pppd 自身にその機能があるのでこれを設定します。
     まずは、/etc/ppp/options を開いて、適当なオプションを追加しましょう。

    # vi /etc/ppp/options

     追加したのは、
    1. demand
    2. persist
    3. 192.168.0.1:0.0.0.0 <== 2.3.10 からリモート側は設定しなくていいことになっているらしいので。これにすると、デフォルトで10.112.112.112がリモートIPになるようだ。
    4. holdoff 60 <== 2.3.10からはデフォルトで0になるようだ。
    5. idle 240
    6. ipcp-accept-local
    7. ipcp-accept-remote

    です。192.168.0.1 というのは自分のホストのIPアドレスですが、192.168.255.254 というネットワークもホストもありません。一説によると、ここはダミーのIPアドレスで、なんでもいいということになっています。しかし、自ホストのネットワーク上の現存するアドレスだと自動でダイヤルしないらしいので、存在しないIPアドレスにしなくてはなりません。僕は間違いのないように、存在しないネットワークアドレスにしました。このような場合、後に続く ipcp-accept-local / ipcp-accept-remote によって接続後の実際のアドレスへの差し替えを許さなくては通信できませんから注意してください。
     また、idle の 240 という数字は単位が秒で、4分間無通信だと自動切断するという事です(タイムプラス対応(笑))。holdoff 60 とは、一旦切断したら、60秒は再接続しに行かないということですが、無通信タイムアウトで切断した場合は無効らしいです。

    ※と聞いているのですが、タイムアウト後おなじアドレスへのリクエストが出てもリダイヤルしないという現象に遭遇しています(泣)
     上記の設定を終えてから ppp-on を起動すると、pppd が常駐してもダイヤルしないでしょう。これで存在しないアドレスへ ping を打ったりすると、ダイヤルを始めればしめしめです。また、所定のアイドル時間が経過すると勝手に電話が切れることも確認しましょう。

     更に今回のケースでは、ローカル側から ICQ ができなくてはならないので、ICQ をマスカレーディングするモジュールを組み込みました。ICQ Masquerading for Linux というものです。

    # tar xvfz ip_masq_icq-0.56.tar.gz
    # cd ip_masq_icq-0.56
    # make; make install
    # /sbin/modprobe ip_masq_icq

     これで ICQ が起動して、ちゃんと mirabilis のサーバへリンクが張れればOKです。

     ちなみに、他の定番モジュールも組み込んでおきます。

    /sbin/modprobe ip_masq_ftp
    /sbin/modprobe ip_masq_cuseeme
    /sbin/modprobe ip_masq_irc
    /sbin/modprobe ip_masq_quake
    /sbin/modprobe ip_masq_raudio
    /sbin/modprobe ip_masq_user
    /sbin/modprobe ip_masq_vdolive

     これだけ確認できたら、起動時に ppp-on とモジュールのロードが自動で行われるように、/etc/rc.d/rc.local に記述しましょう。

    /etc/rc.d/rc.local

    if [ -x /usr/sbin/ppp-on ]; then
      /usr/sbin/ppp-on
      /sbin/modprobe ip_masq_ftp
      /sbin/modprobe ip_masq_cuseeme
      /sbin/modprobe ip_masq_irc
      /sbin/modprobe ip_masq_quake
      /sbin/modprobe ip_masq_raudio
      /sbin/modprobe ip_masq_user
      /sbin/modprobe ip_masq_vdolive
      /sbin/modprobe ip_masq_icq
    fi
  2. パケット転送(IPマスカレード)の環境設定
     Plamo-2.1 はカーネルが 2.2 系列ですから、昔よく使った ipfwadm ではなく、ipchains を使います。また、このカーネルではパケット転送の為におまじないが必要です。

    # echo 1 > /proc/sys/net/ipv4/ip_forward

     これを忘れずに行わないとパケットが通過してくれません。また、

    # echo 1 > /proc/sys/net/ipv4/ip_always_defrag

    で、パケット転送時にパケットを常に再構築しますし、

    # echo 1 > /proc/sys/net/ipv4/tcp_syncookies

    で、いわゆるSYN攻撃をかわします。

     これらを、/etc/ppp/ip-up へ記載しましょう。外部からのいたずら防止のための設定は、実際に netstat -l などして LISTEN ポートを調べて設定するといいでしょう。
     また、ppp がリンクを張ったときに時刻を同期するようにする処理も、/etc/ppp/ip-up で行いましょう。

/etc/ppp/ip-up
#!/bin/sh
/usr/local/bin/ntpdate -u clock.nc.fukuoka-u.ac.jp
/sbin/hwclock --systohc

echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_always_defrag
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
/sbin/ipchains -F forward
/sbin/ipchains -F input
/sbin/ipchains -F output
/sbin/ipchains -P forward DENY
/sbin/ipchains -A forward -i ppp0 -s 192.168.0.0/24 -j MASQ -l
/sbin/ipchains -A forward -i ppp0 -p tcp -s 0.0.0.0/0 137:139 -j DENY -l
/sbin/ipchains -A forward -i ppp0 -p udp -s 0.0.0.0/0 137:139 -j DENY -l
/sbin/ipchains -A input -i ppp0 -s 192.168.0.0/24 -j DENY -l
/sbin/ipchains -A input -i ppp0 -p tcp -d 0.0.0.0/0 7100 -j DENY -l
/sbin/ipchains -A input -i ppp0 -p tcp -d 0.0.0.0/0 5680 -j DENY -l

/etc/ppp/ip-down

#!/bin/sh
echo 0 > /proc/sys/net/ipv4/ip_forward

 これらのファイルを作成したら、きちんと実行属性をつけておきましょう。

# chmod a+x /etc/ppp/ip-up
# chmod a+x /etc/ppp/ip-down
  • ローカル用ネームサーバの設定
     ネームサーバは、最新の 8.2.3 を桑村さんのページから持ってきて入れています。これを設定して、ローカルネットワークだけで使える専用のネームサーバにします。ローカル側で処理できない名前参照は、ISP のネームサーバを参照するようにします。

     BIND の設定はさほど難しくありません。/etc/named.conf を以下のとおり設定します。logging の部分は、http://www.ku3g.org/negi/note_router.html の記述をありがたく頂戴しましたm(_ _)m
     アクセス制御をローカル側だけにするために当初 allow-query ステートメントを使うように書きましたが、これでは netstat -l してみると PPP 側に対して LISTEN したままなので、listen-on ステートメントに変更して聞き耳立てること自体をやめさせました。

    /*
     * A simple BIND 8 configuration
     */
    options {
            directory "/etc/named";
            forward only;
            forwarders {
                    isp.no.name.server;
            };
            notify no;
            listen-on {
                    192.168.0.0/24;
                    127.0.0.1/32;
            };
    };
    logging {
            category default { default_syslog; default_debug; };
            category panic { default_syslog; default_stderr; };
            category packet { default_debug; };
            category eventlib { null; };
            category statistics { null; };
            category cname { null; };
            category lame-servers { null; };
    };
    zone "local" in {
            type master;
            file "host/local.zone";
    };
    zone "0.168.192.in-addr.arpa" in {
            type master;
            file "rev/0.168.192.in-addr.arpa.zone";
    };
    zone "0.0.127.in-addr.arpa" in {
            type master;
            file "rev/0.0.127.in-addr.arpa.zone";
    };
    zone "." in {
            type hint;
            file "root.cache";
    };

     それぞれのゾーンファイルの中身は、http://www.atmarkit.co.jp/flinux/rensai/bind02/bind02.html とか見ると詳しく載ってますから、御覧ください。僕なんかが書くよりずっと親切です(笑)

  • 付録1.参考文献

    ノートをルーターにしよう
    とっても役にたちました。ありがとうございますm(_ _)m
    libapm & devapm
    libapm の一次配布元(だと思う(^^;
    Dial Up Router with IP Masquerade & PPXP
    ip_masq_icq の使い方を参考にしました。ありがとうございますm(_ _)m
    PlamoLinuxをLibrettoにインストール
    Libretto 全般の情報を参考にしました。このページ自体も僕んちを Referring されているようで、重ねてありがとうございますm(_ _)m(結果的に相互リンクか?(笑)
    Canna Home Page
    日本語入力システム「かんな」のページ。Cannaserver のアクセス制御について、参考にさせてもらいました。


    Index >> Plamo Linux Fan >> インストール実績メモ〜Libretto20でルータ編
    images footer