Up
Down
Return

Debian GNU/Linux とノートパソコンによるIPマスカレードの設定

1.ノートパソコンをインターネットゲートウェイにすると良いこと
1999年11月22日、自衛隊機が送電線を切断してくれたため、我が家も停電してしまいました。
会社から帰ったときは、24時間稼動しているOCNエコノミーにつないであるPCとCATV網へつないであるPCが2台とも止まっていました。両方の電源を入れるとCATV網へつないであるPCは何事もなかったように立ち上がりましたが、OCNエコノミーにつないであるPCは何か変でした。まず、NICを2枚とも認識せず、リブートすると今度はEISAのセカンダリのマスタに付いているCD-ROMを認識したりしなかったり、テープドライブと思ったり、BIOS設定をやり直しても異常が直らないまま2日が過ぎました。
停電が原因ならばノートパソコンにすれば停電だって平気だと思い起こしてくれたのは、「Linux Japan」のアストロビスタ様のページでした。
それにノートパソコンは音も静かですしね。
2.使ったノートパソコン
手持ちのノートパソコンでTYPE llのカードを2枚挿せるのは、Gateway2000のLibertyだけです。
これのスペックは、
  • MPU      486DX4-100MHz
  • Memory  24MB
  • HDD      540MB
という哀しさですが、最低IPmasqueradeとDNSサーバとメールサーバが使えればよいのだという事で割り切ることにしました。でも、ノートパソコンにイーサネットカードの2枚挿しってのはやったことがないんですよね。
3.イーサネットカードの2枚挿し
  • まず、stabというファイルを見ます。これは、/var/runにあるとか/etcにあるという話もあり、locateででも探すのがいいみたいです。
  • 2枚挿してあると
       Socket 0: Accton EN2212 EtherCard
        0 network pcnet_cs 0 eth0
       Socket 1: 3Com 3c589D LAN Adapter
        1 network 3c589_cs 0 eth1
    などと記録されています。
    ここでは、上段にAccton EN2212、下段に 3Comのカードを使っています。
  • /etc/pcmcia/network.optsを以下のように直します。
    case "$ADDRESS" in
    *,0,*,*)      <= Socket 0:
    IF_PORT="auto"
    # Use BOOTP [y/n]
    BOOTP="n"
    IPADDR="nnn.nnn.nnn.nnn"  
    NETMASK="255.255.255.0"
    NETWORK="nnn.nnn.nnn.nnn"
    BROADCAST="nnn.nnn.nnn.255"
    GATEWAY="nnn.nnn.nnn.nnn"
    DOMAIN="ドメイン名"
    DNS_1="127.0.0.1"    <=このコンピュータ
    ;;
    esac
    case "$ADDRESS" in
    *,1,*,*)      <= Socket 1:
    IF_PORT="auto"
    BOOTP="n"
    IPADDR="nnn.nnn.nnn.nnn"  
    NETMASK="nnn.nnn.nnn.nnn"
    NETWORK="nnn.nnn.nnn.nnn"
    BROADCAST="nnn.nnn.nnn.nnn"
    GATEWAY="nnn.nnn.nnn.nnn"
    DOMAIN="ドメイン名"
    DNS_1="127.0.0.1"
    ;;
    esac
  • ここでの例はeth1がOCNへつながっておりグローバルアドレスが割り付けられており、eth0は家庭内LANにつながっておりプライベートアドレスです。*,1,*,*)は、スキーマ、ソケット、インスタンス、MACアドレスを表しています。ソケットに値を設定しているので、ノートPCのPCカードスロットに上記の定義を固定的に割り付けたことになります。
    DHCPサーバからIPアドレスを取得する場合は、BOOTP="y"にして、それ以下の行の設定は不要なのでしょう。
    ノートPCですから、使う場所によってネットワーク関係の設定を変えたい場合があるでしょうが、こらは、netenvというスクリプトを使います。詳細は、/usr/doc/pcmcia-cs/examplesにこのスクリプトと個々の状況毎の設定事例があります。gunzip -d で解凍して読みましょう。
4.カーネルの再構築
  1. IPマスカレードを使うにはカーネルの再構築が必要です。しかし、ただ再構築するとpcmciaモジュールはまだカーネルモジュールに取り込まれてはいないので再起動するとPCカードを認識してもらえません。
    そのため、Debian GNU/Linuxでは、、
  2. カーネルのdebパッケージは/usr/src/linuxで
       make-kpkg --revision XXXXXX kernel-image
    で/usr/srcにkernel-image-2.n.n_x.n_i386.debを作成します。これは普通のカーネル再構築の手順です。
    ここでそのまま再起動するとpcmciaモジュールが無視されてしまいます。
  3. pcmciaのパッケージはdpkg -i pcmcia-source_XXXXXとかdselectでソースを/usr/src/modules/pcmcia-csに入れておきます。
  4. /usr/src/modules/pcmcia-csで   make-kpkg --revision XXXXXX modules
    により、/usr/src/modulesにpcmcia-cs_n.n.n-n_i386.debを作成します。
  5. このディレクトリで、
       debian/rules KSRC=/usr/src/linux binary-cs
       debian/rules KSRC=/usr/src/linux binary-modules
    とやります。そうすると、/usr/srcにカーネルとpcmciaのパッケージを合体したようなpcmcia-modules-n.n.n_n.n.n-n+X.n_i386.debができあがります。
  6. これを、dpkg -i pcmcia-modules-n.n.n_n.n.n-n+X.n_i386.debとやってインストールします。
これでIPマスカレード対応のカーネルになりました。
lilo.confにappend="ether=0,0,eth1"を入れるとかいったことを忘れないように。
リブートして、すべてOKかを確認しましょう。

以下はちょっと古いDebian 2.0に入っている説明です。上と同じ事が書いてあるかな?違っていたら、下の英文が正しいんですよ!
/usr/doc/pcmcia-source# vi README

Debian PCMCIA Card Services
README File
Brian Mays

This is the Debian GNU/Linux prepackaged version of the PCMCIA card
services package.
By default, debian/rules will set the kernel-specific options from the
kernel source tree in /usr/src/linux. If this is not desirable, execute
`make config' in the pcmcia-cs root directory to interactively configure
the package.
You need to have a complete linux source tree for your kernel, not just an
up-to-date kernel image, to compile the PCMCIA package. The PCMCIA modules
contain some references to kernel source files. While you may want to
build a new kernel to remove unnecessary drivers, installing PCMCIA does
not require you to do so.
To recompile the PCMCIA kernel modules:
The process of recompiling a kernel and the PCMCIA modules has been
greatly simplified by Debian's kernel-package package (available in
Debian's main distribution). This package contains the make-kpkg
utility, which is used to create the kernel related Debian packages.
It is highly recommended that you use this utility.
If you are using make-kpkg:
1) Ensure that the pcmcia-cs source tree is in a subdirectory of the
/usr/src/modules directory. Use a symbolic link to the actual
source tree if you must. Note that the pcmcia-source package
already places the pcmcia-cs sources in /usr/src/modules/pcmcia-
cs.
2) As root, go to the the base of the kernel source tree (usually
the /usr/src/linux directory). If you are building a kernel that
is custom configured to your specifications, go ahead and
configure the kernel with `make config,' `make menuconfig,' or
`make xconfig.'
3) To build a new kernel-image package, execute:
make-kpkg --revision number kernel_image
This will generate a kernel-image- deb file in
the parent directory. Here number (the argument supplied after
the --revision flag) is a version number for your custom built
kernel. You may also do this on the fly by setting the
DEBIAN_REVISION environmental variable. It is important that you
image package will not override the custom package while using
dselect (or `dpkg -BOGiE'). I recommend a two-level scheme where
the major level starts with a letter. One such scheme is your
(short) host name followed by a dot (.) and a number. For
example, if your machine is named myhost, you would use
--revision myhost.1 in the command line. If you had to rebuild
your custom kernel, you would use --revision myhost.2 and so on.
See /usr/doc/kernel-package/README.gz for more information on
revision numbers.
3) To build the PCMCIA modules, execute:
make-kpkg --revision number modules_image
where number is the same revision number used to build the
kernel-image package in the previous step. This will generate a
pcmcia-modules- deb file in the parent directory.
4) Install the two newly created deb files (you can use `dpkg -i
file').

If you are not using make-kpkg:
If your kernel is compiled with CONFIG_MODVERSIONS enabled, for kernel
symbol version checking, the configure script will check for the
existence of /usr/include/linux/modversions.h, the symbol version
database. This is created by running `make dep' (in addition to `make
config) in the kernel source tree.
1) Ensure that the kernel source tree is in the /usr/src/linux
directory and ensure that it is configured (execute `make config
dep' in the /usr/src/linux directory).
2) Go to the pcmcia-cs root directory (/usr/src/modules/pcmcia-cs in
the pcmcia-source package).
3) Execute as root `debian/rules binary-modules.' This will
generate a pcmcia-modules- deb file in the parent
directory.
Note: The location of the kernel source tree may be specified by
supplying the KSRC variable as a command line option. For example, if
the kernel source is located in /usr/local/src/kernel-2.0.0, the
proper command would be
debian/rules KSRC=/usr/local/src/kernel-2.0.0 binary-modules
To recompile the PCMCIA utility programs:
This should not be necessary, since the generic pcmcia-cs package
supplied by Debian should be compatible with all pcmcia-
modules- packages (including custom built packages)
with the same version number. However, if you need to build a
complete set of PCMCIA modules and utilities--to use a newer upstream
version, for example--you can use the following procedure:
1) Ensure that the kernel source tree is in the /usr/src/linux
directory and ensure that it is configured (execute `make config
dep' in the /usr/src/linux directory).
2) Go to the pcmcia-cs root directory (/usr/src/modules/pcmcia-cs in
the pcmcia-source package).
3) Execute as root `debian/rules binary-cs.' This will generate the
pcmcia-cs deb file.
Note: The location of the kernel source tree may be specified by
supplying the KSRC variable as a command line option. For example, if
the kernel source is located in /usr/local/src/kernel-2.0.0, the
proper command would be
debian/rules KSRC=/usr/local/src/kernel-2.0.0 binary-cs