Last Updated at $Date: 2005/12/04 03:47:19 $.
以前,この ThinkPad 560 には,Slackware をインストールして利用していたのだが,液晶のバックライトの故障によって現役引退を余儀なくされた. 今回は,このマシンを下宿の dial-up router として復活させようと言うプロジェクトである.
Linux-2.4 以降は,PCMCIA ドライバとして, kernel に付属している版と, 従来から pcmcia-cs という名称で単独配布されている版の2つが利用できる. 通常は,どちらを利用しても大差ないのだが,ThinkPad 560 の場合は事情が異なる.
まず,ThinkPad 560 の PCMCIA bridge には,Cirrus CL6729 が使われているらしい.
$ /sbin/lspci | grep PCMCIA 00:13.0 PCMCIA bridge: Cirrus Logic CL 6729 (rev e2)
しかし,pcmcia-cs
の付属文書(README-2.4
)には以下のように記述されている.
PCI-to-PCMCIA bridges that are not CardBus capable, like the Cirrus PD6729, are not supported at all by the kernel PCMCIA drivers.
微妙に型番が異なっているが,現実には問題の PD6729 と認識されているので, kernel 付属の PCMCIA ドライバ群は利用できないと予想される.
$ dmesg | grep Cirrus Cirrus PD6729 rev 00 PCI-to-PCMCIA at slot 00:13, port 0x3e0
そのため,pcmcia-cs 由来の PCMCIA ドライバを利用するように設定した. ただし,デフォルトの設定では,IRQ の取得が正常に行われず, 以下のエラーメッセージが頻繁に出力される.
$ dmesg | tail -1 eth0: interrupt(s) dropped!
この現象は,/etc/default/pcmcia
に以下の設定を追加して,IRQ を明示的に指定すると解決できた.
PCIC_OPTS="poll_interval=100 irq_list=3,10"
以前は diald + pppd で実現されることが多かったが, pppd-2.3 以降の pppd は単独で on-demand dial up の機能を持っているので, これを利用する設定を行うことにした.
# pppconfig # adduser user dialout # adduser user dip % pon
# cd /etc/ppp/peers # cp -p provider ondemand-provider # patch -p0 <<__EOF__ --- provider Mon Apr 1 23:52:31 2002 +++ provider-ondemand Fri May 17 00:18:22 2002 @@ -15,3 +15,8 @@ usepeerdns +demand +idle 90 +holdoff 60 +active-filter 'not udp port ntp' + __EOF__
この設定は,以下の意味を持つ.
なお,無通信状態で正常に通信が終了することを確認しておくこと.
念のため,/etc/cron.weekly/ppplog
というスクリプトで,1週間単位で接続記録を集計するようにした.
詳しくは,スクリプトの付属文書を参照.
以下のような設定で,フィルタリングと内部ネットワークの masquerading を行うようにした.
# private network から出て行くものをマスカレードする iptables -t nat -A POSTROUTING -s 192.168.89.0/255.255.255.0 -j MASQUERADE # ppp から入って来るパケットで新規と無効のものを入力とフォワードで禁止する iptables -t nat -A INPUT -i ppp+ -m state --state NEW,INVALID -j DROP iptables -t nat -A FORWARD -i ppp+ -m state --state NEW,INVALID -j DROP # 内部ネットワークから外部に接続する udp / icmp パケットを禁止 iptables -t filter -A FORWARD -o ppp+ -p ! tcp -j DROP # ppp から出ていくもので,新しい接続を開始するパケットの記録を残す.不用 # 意な自動発呼の原因を追求するため. iptables -A FORWARD -o ppp+ -m state --state NEW -j LOG iptables -A OUTPUT -o ppp+ -m state --state NEW -j LOG # IP フォワーディングを ON にする echo 1 > /proc/sys/net/ipv4/ip_forward
/etc/default/iptables
を編集し,設定が保存できるようにして,以下のコマンドを実行.
/etc/init.d/iptables save_active
dnsmasq
を使って,内部ネットワークのマシンが参照できる DNS cache server を用意した.
また,このサーバーの /etc/hosts
に内部ネットワークのホスト名を列挙しておくと,
内部ネットワークのホスト名解決にも使うことができる.
今回の場合,dnsmasq が参照するネットワークデバイス(eth0)は, PCMCIA で管理されているネットワークカードであるため, デフォルトの起動順序(PCMCIA の初期化以前に dnsmasq が起動される)では適切に動作しない. そのため,以下のように dnsmasq の起動順序を変更した.
# update-rc.d -f dnsmasq remove # update-rc.d -f dnsmasq defaults 21
また,/etc/ppp/ip-up.d/0dns-up
と
/etc/ppp/ip-down.d/0dns-down
に細工して,/etc/resolv.conf
の代わりに
/etc/resolv.conf-dnsmasq
を作成するように変更した.
特に問題なし./etc/dhcp3/dhcpd.conf
をコメントにしたがって編集していけば良い.
現時点では特に関係はないが,将来,常時接続に移行したときのために, homeip.net で適当なドメインを入手して,ddclient をインストールしておいた.
exim などの queue の処理を network の構成が変化したとき(= dhcpd がアドレスを割り当てたとき)に実行したい, という考えが起きたので,少し設定を工夫した.
/etc/syslog.conf
を編集して,
DHCP の状態が変わったら,/var/log/dhcpd.info
が更新されるようにする.
--- syslog.conf 2002/11/18 13:08:07 1.1 +++ syslog.conf 2002/11/18 13:17:42 @@ -32,6 +32,11 @@ news.notice -/var/log/news/news.notice # +# For dhcpd (Check log-facility option in /etc/dhcp3/dhcpd.conf) +# +local7.info -/var/log/dhcpd.info + +# # Some `catch-all' logfiles. # *.=debug;\
/var/log/dhcpd.info
が変更されたら,
queue が処理されるように,以下のコマンドを実行.
perl /usr/local/sbin/polling.perl -f /var/log/dhcpd.info /usr/sbin/runq
/etc/cron.d/exim
を編集して,
cront で exim の queue を処理しないようにする.
% diff -u exim.orig /etc/cron.d/exim --- exim.orig Tue Mar 5 08:05:40 2002 +++ /etc/cron.d/exim Tue Nov 19 00:55:57 2002 @@ -1,4 +1,4 @@ # /etc/cron.d/exim: crontab fragment for exim # Run queue every 15 minutes -08,23,38,53 * * * * mail if [ -x /usr/sbin/exim -a -f /etc/exim/exim.conf ]; then /usr/sbin/exim -q ; fi +#08,23,38,53 * * * * mail if [ -x /usr/sbin/exim -a -f /etc/exim/exim.conf ]; then /usr/sbin/exim -q ; fi
詳しくは,スクリプトの付属文書を参照.
[Top] / [Debian Tips] / [ThinkPad X31,X20,s30,560 / Portage SS3330]