Bフレッツ導入記改め自宅サーバ設定

去年、書いたBフレッツ導入記でいろいろと Linuxをつかったルータについて書いたが
、結局そのマシンはハード障害を頻繁に起こすようになってしまったため、新しくサーバ用マシンを購入し
OSも新規にインストールすることにした。

新しいサーバは、NECのExpress5800/Rc-1に、HDDを120*2台構成にしたもの。メモリは640Mbyte。
そこそこ・・・・というか、結構アホなスペックのマシンである。

一番の用途は当然ルータマシンだが、他にも当サイトのWebサーバ等さまざまな用途があるため、設定もいろいろある。

その際、いろいろとメモを残したので、忘備録をかねて、ここに記録を残すことにした。


マシン準備
上にも書いたが、今回使用したマシンは、NECのExpressである。公式にはRedHat9は公式には動作保証 OSとして書かれてはいないはずである。 このマシンの詳細をかくと以下のとおり。ただし、構成は標準構成ではない(中古のため)。
CPU PentiumIII(1.0BG/133/256) × 1
メモリ 640Mbyte
Chipset VIA Apollo
HDD IDE 120GB × 2
NIC Intel PRO/100 × 2
とまぁ、構成的には、かなり普通のパソコンと同じ。HDDは、もともと小さい容量のものが2台入っていたが ストレージとして使うとちょっとたらないので、120GB二台と交換した。もっと大きなドライブが使えれば それと交換したのだが、Rc-1のBTOの構成のなかには120GBより大きなHDDの構成がなかったので 大事を取って、120GBとした。
それ以外の構成は、基本的にそのまま特に変更しないこととした。本当はファンノイズなど、弄りたい ところだが、今回は設置場所を変更することで、音については触れないことにした。


OS準備
OSは、RedHat9。RPMというものは、個人的には好きではないのだが、ここんところRedHatばかり 触って居たので、いきなり違うのにすると、慣れるまで時間がかかるので(システム的な問題で)、 今回もRedHatにした。カーネル等は、いずれにしてもあとでバージョンアップすることとする。


OSインストール
OSのインストールは、カスタム設定で、インストールする。特に気にすることはないとおもうが Apacheなども取り敢えずインストールしてしまう。Apacheあたりは、あとで一度新しいものを 入れ直す羽目になるが、ひとまずここでは気にしないことにする。

パーティションの設定はそれぞれ想うところがあるだろうが、私は個人的な趣味で、 以下のような構成にした。/homeについては、LinuxのソフトウェアRaid0を利用した。
FilesystemsizeMounted on
/dev/hda11100GB/
/dev/md0225000MB/home
/dev/hda38400MB/usr
/dev/hdb25300MB/usr/local/work
/dev/hdb33200MB/opt
swap1000MB----

ここでの数字は、現在のdfを参考にした数値であり、fdiskで設定する数字とは 若干のズレがある。また、/dev/md0は、/dev/hda2と/dev/hdv1から構成されるRAID0デバイス。 ここでの数値等については、使用する環境に応じてさまざまだろうし、それぞれの思いも あるだろう。私は、古き0.xx時代のLinuxの記憶が根強くあるためこんな感じになっている。
(まだFDインストールだった(笑))

・/は、/varが入るので、少々大きめにした(/varにはメールスプールがはいる)
・/homeは、アカウントユーザ領域であり、ファイルストレージ的な使い方を今回はするので、少々多めの領域を確保している
・/usrは、システムプログラム領域
・/usr/local/workは、ローカルのワーク領域。今回はバックアップ処理等で使用する予定
・/optは、option領域。DBまわりはココにいれる(今回は予定がないが一応)
・swapは、言わずとしれたスワップ領域でメインメモリが640MBなので適当に1GB程度

その他、Boot Loaderは、今回はGRUBを使用した。



カーネルコンパイル
RedHat9をインストールした状態でのKernelは、2.4.20-8である。このままではいろいろと不都合もあるし、 なにより、ルータ機として使用するために、カーネルモードPPPoEを実装させなければならない。ということで http://www.kernel.org/から新しいカーネルをダウンロードしてくる。 今回使用したカーネルは、設定時点最新の2.4.23(2.4.22には致命的なバグがあった)。

ファイルをダウンロードしたら、/usr/src/ 配下に展開する。既に、/usr/src/linux-2.4というシンボリックリンクが ある場合は削除しておく。
cd /usr/src
tar zxvf /tmp/linux-2.4.24.tar.gz
ln -s /usr/src/linux-2.4.23 ./linux-2.4

続いて、PPPoEであるということを明示するために、Makefileに一行追加する。
cd /usr/src/linux-2.4
vi Makefile

4行めのEXTRAVERSION=を、EXTRAVERSION=-kpppoeに修正する。

さらに、その他の設定を行うため。
make menuconfig

を実行する。今回設定した項目は以下のとおり。
・Code maturity level options -> Prompt for development and/or incomplete code/drivers = y
・Multi-device support (RAID and LVM) -> Multiple devices driver support (RAID and LVM) = y
  -> RAID support = m
  -> Linear (append) mode = m
  -> RAID-0 (striping) mode = m
  -> RAID-1 (mirroring) mode = m
  -> RAID-4/RAID-5 mode = m
  -> Multipath I/O support = m
・General setup -> ACPI Support -> ACPI Support = y
・File systems -> Ext3 journalling file system support = y
・Block devices
  -> Loopback device support = y
・Networking options -> Network packet filtering = y
  ->IP: Netfilter Configuration
     -> IP tables support = m
     -> Connection tracking = m
     -> FTP protocol support = m
     -> IRC protocol support = m
     -> Amanda protocol support = m
     -> TFTP protocol support = m
     -> IP tables support (required for filtering/masq/NAT) = m
     -> Packet filtering = m
       -> REJECT target support (NEW) = m
     -> Full NAT (NEW) = m
       -> MASQUERADE target support (NEW) = m
       -> REDIRECT target support (NEW) = m
     -> TCPMSS target support (NEW) = m
     -> Connection state match support = m
     -> Connection tracking match support (NEW) = m
・Network device support -> PPP (point-to-point protocol) support = y
   -> PPP multilink support (EXPERIMENTAL) = y
   -> PPP support for async serial ports (NEW) = y
   -> PPP support for sync tty ports (NEW) = y
   -> PPP Deflate compression (NEW) = y
   -> PPP BSD-Compress compression (NEW) = y
   -> PPP over Ethernet (EXPERIMENTAL) (NEW) = y
・USB support
   -> Preliminary USB device filesystem = y
   USB Human Interface Device (full HID) support = m
・ATA/IDE/MFM/RLL support
   -> IDE, ATA and ATAPI Block devices
      -> VIA82CXXX chipset support = y

RAIDの設定は、md0のソフトウェアRAIDのため。カーネルモードPPPoEを使用するための設定は Network device supportに記述してある。また、今回使用したサーバがExpress5800/Rc-1のため、 ATA/IDE/MFM/RLLの設定でVIA82Cxxxをサポートするように設定している。これをやらないと、 ディスクアクセスのパフォーマンスが極端に劣化する。

設定が完了したら、保存をして、以下のコマンドでコンパイル、及びインストールを実行する。
make dep
make bzImage
make modules
make modules_install
make install

これで基本的にはOKのはず・・・なのだが、なぜか今回の設定ではboot時に停止してしまった。 これを回避するために、GRUBの設定を修正する。/boot/grub/grub.confを開き、
kernel /boot/vmlinuz-2.4.23-kpppoe ro root=LABEL=/
kernel /boot/vmlinuz-2.4.23-kpppoe ro root=/dev/hda1

へ修正する(/dev/hda1はboot partition)。これで一度再起動を実行してみる。起動時の GRUBのセレクト画面では、古いカーネルが選択されているはずなので、新しくコンパイルした カーネルを選択して無事起動するか確認をしてみる。
インストールした環境によっては、起動時にいくつかNGになるかもしれない。


カーネルモードPPPoEの設定
カーネルはPPPoEに対応できた状態になったが、このままではまだPPPoEが使えないので PPPoEが使えるように追加で設定を行う。まず、OSインストール時に一緒にインストールされた rp-pppoe関係のファイルを全て削除する。

まず、rp-pppoeの削除。
rpm -e rp-pppoe-3.5-2
wvdialの削除。
rpm -e wvdial-1.53-9
pppdの削除。
rpm -e ppp-2.4.1-10

古いpppdを削除してしまったので、新しいカーネルモードPPPoEが使えるpppdを ftp://ftp.samba.org/pub/ppp/からダウンロードする。 今回使用したものは、ftp://ftp.samba.org/pub/ppp/ppp-2.4.2b3.tar.gz である。ダウンロードしたら、/usr/local/src 配下に展開したのちコンパイルする。
cd /usr/local/src
tar zxvf /tmp/ppp-2.4.2b3.tar.gz
cd ppp-2.4.2b3
./configure
make
make install

つぎに、rp-pppoeも新しいものをインストールする。 今回使用したものはhttp://www.roaringpenguin.com/products/rp-pppoe/rp-pppoe-3.5.tar.gz である。ダウンロードしたら、/usr/local/src 配下に展開した後、コンパイルする。
cd /usr/local/src
tar zxvf /tmp/rp-pppoe-3.5.tar.gz
cd rp-pppoe-3.5
--enable-plugin=/usr/local/src/rp-pppoe-3.5
make
make install

ここで作られた、rp-pppoe.soモジュールを使用可能にするためにコピーする。
cp /usr/lib/pppd/2.4.2b3/rp-pppoe.so /etc/ppp/plugins/



ネットワークの設定
今回使用したハードウェアには、もともとeth0とeth1がある。このうち、eth0をLAN側、 eth1をWAN側として利用することにする。また、PPPを使用するためのppp0デバイスも 用意する。まず、eth0の設定を行うため、/etc/sysconfig/network-scripts/ifcfg-eth0を 以下のように修正する。
DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.0.255
IPADDR=192.168.0.125
NETMASK=255.255.255.0
NETWORK=192.168.0.0
ONBOOT=yes

なんで、192.168.0.125なんだ、という声が聞こえてきそうだが、今回の私の環境下では、 192.168.0.254には旧サーバが接続されており、使用不可ということと、 ちょっと思うところが あってこのようなアドレスになっている。使用環境に応じて、適宜読み替えて頂きたい。

/etc/sysconfig/network-scripts/ifcfg-eth1はWAN側なので以下のように設定する。
DEVICE=eth1
ONBOOT=no


PPP接続を行うため、ppp0の設定も必要となる。 /etc/sysconfig/network-scripts/ifcfg-ppp0を修正、または無ければ新規に 作成する。このファイルはプロバイダ等の接続情報も若干含まれるため、
*****
の 部分はそれぞれ読み替えて頂きたい。
/etc/sysconfig/network-scripts/ifcfg-ppp0はWAN側なので以下のように設定する。
USERCTL=no
BOOTPROTO=none
NAME=ISP
DEVICE=ppp0
TYPE=xDSL
ONBOOT=no
PIDFILE=/var/run/pppoe-adsl.pid
FIREWALL=NONE
PING="."
PPPOE_TIMEOUT=20
LCP_FAILURE=3
LCP_INTERVAL=80
CLAMPMSS=1412
CONNECT_POLL=6
CONNECT_TIMEOUT=20
DEFAULTROUTE=yes
DNSTYPE=SPECIFY
SYNCHRONOUS=yes
ETH=eth1
PROVIDER=ISP
PEERDNS=yes
DNS1=***.***.***.***
DNS2=***.***.***.***
LINUX_PLUGIN=/etc/ppp/plugins/rp-pppoe.so
PERSIST=yes
USER='***************'
DEMAND=no
PPPD_EXTRA="proxyarp debug"
DEFROUTE=yes



moduleの設定
モジュールを使用するために、/etc/modules.confに、以下の行を追加する。
alias char-major-108 ppp_generic
alias tty-ldisc-3 ppp_async
alias tty-ldisc-13 n_hdlc
alias tty-ldisc-14 ppp_synctty
alias net-pf-24 pppoe


プロバイダ接続情報の設定
ここまでで、PPPoEを使うための基本的に設定は完了した。プロバイダへの接続情報は /etc/ppp/pap-secretsと、/etc/ppp/chap-secrets に記述する。 このファイルには、接続に使用するパスワードがかかれるため、取り扱いには注意を 要する。
/etc/ppp/pap-secretsと、/etc/ppp/chap-secretsには同じ内容を追加する。
hoehoe@hoehoenet.or.jp * hogehoge


前の部分がフレッツ網に接続するためのユーザ名、3項目めがパスワードである。 ファイルのモードは、必ず600にしておくこと。

ここまでで、
/etc/sysconfig/network-scripts/ifup ppp0


を実行して、Connected!! と表示されれば、無事接続が完了している。


ルータとしての設定
以上の設定で、単体のマシンとして、ネットワークに接続することは可能になって居るので あとはルータとしての設定を追加する。
また、デフォルトのルートをppp0にするようにも設定する必要がある。
適当に一つシェルスクリプトを作成し、先ほどのifup を含めて纏めて実行するものを 作成しておく
ここでは、ifup.sh としておく。
#!/bin/sh

# connect to  Flets
/etc/sysconfig/network-scripts/ifup ppp0

# setup ip_tables
/sbin/insmod ip_tables
/sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
/sbin/insmod ip_conntrack_ftp
/sbin/insmod ip_nat_ftp
/sbin/iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# setup ipv4 forwarding
echo 1 >/proc/sys/net/ipv4/ip_forward
echo 'nameserver 192.168.0.125' > /etc/resolv.conf

# setup default route
/sbin/route del default
/sbin/route add default dev ppp0



事細かに詳細は記述しないが、tablesの1行め、IPマスカレードを実現するために必要な設定。 5行めを記述しないと、Blackholeのために接続できないサイトがでてくるだろう。
resolv.confへ出力している記述があるが、サーバ内でnamedの動作をさせないのであれば 不要である(本来はppp0の設定で書くべきだが....)

以上でルータとしての設定はほぼ完了である。起動後作成したifup.shを実行すれば、 ルータとして動作を開始し、LAN側のデフォルトルートをこのマシンにすれば、ルータとして 使用することが可能になって居るはずだ。

続いて、apache等の設定を行う(つづくー)。