PPPサーバを作る

1999.7.7

1. PPPサーバとは

PPPサーバとは電話回線を通して、インターネット接続をできるようにするサーバのことです(正確には違うかも知れませんが、ここではそういう意味で使います)。 手短に書くと大学にあるLinux BOXにプロバイダの役割をさせるということです。

だいぶ前に行った設定を思い出しながら書いているので間違いもあるかと思いますが、例によって笑って許して下さい(ご指摘頂けると幸いです)。

2. Linux BOXのスペック

ここで説明に用いるLinux BOXは以下のようなものです。 電話回線で接続するためにシリアルボードを4枚差しています。
CPUPentium 75MHz
Memory32MB
HDD2GB (ST32122A)
CD-ROMFX240S
Video BoardTrio64 2MB
NIC3C900-J-COMBO
Seirial BoardLFM-DV560ISA x4
LinuxのディストリビューションはDebian GNU/Linux 1.3r2、kernelバージョン2.0.32です。

シリアルボードの設定は以下のようになっています。 ジャンパでマニュアル設定しました。
No.IRQI/O address
130x3F8
240x2F8
350x3E8
470x2E8

3. PPP接続の設計

PPPサーバはIPアドレス、133.41.129.10でインターネット接続されています。 4本の電話回線に対して以下のようなIPアドレスとして振舞うようにします。
電話番号IPアドレス
0824(24)AAAA133.41.129.11
0824(24)BBBB133.41.129.12
0824(24)CCCC133.41.129.13
0824(24)DDDD133.41.129.14

4. 手順

4.1 カーネルの再構築

通常の設定に加えて
  CONFIG_SERIAL=y
  CONFIG_IP_FORWARD=y
  CONFIG_DUMMY=y
  CONFIG_PPP=y
にします。
  make menuconfig
を使う場合は

Networking options ---> で

  [*] IP: forwading/gatewaying
Network device support ---> で
  <*> Dummy net driver support
  <*> PPP (point-to-point) support
Character devices ---> で
  <*> Standard/generic serial support
を選択します。

後はいつものように

  make dep; make clean; make zlilo
を実行します。

4.2 シリアルボードの設定

Linuxはシリアルボードの設定を自分で認識してくれません。 setserialコマンドによりIRQ、I/Oアドレスを教えてあげる必要があります。

/etc/rc.boot/0serial に

  ${SETSERIAL} -b /dev/ttyS0 uart 16450 port 0x3F8 irq 3 ${STD_FLAGS}
  ${SETSERIAL} -b /dev/ttyS1 uart 16450 port 0x2F8 irq 4 ${STD_FLAGS}
  ${SETSERIAL} -b /dev/ttyS2 uart 16450 port 0x3E8 irq 5 ${STD_FLAGS}
  ${SETSERIAL} -b /dev/ttyS3 uart 16450 port 0x2E8 irq 7 ${STD_FLAGS}
を書き加えます。

4.3 mgetty、pppd のインストール

Debian GNU/Linux では mgetty も pppd もバイナリパッケージが用意されているので それをインストールします。 mgetty のバージョンは 1.1.8-1 で、pppd のバージョンは 2.2.0f-23 です。

/etc/inittab に

  s0:23:respawn:/sbin/mgetty ttyS0
  s1:23:respawn:/sbin/mgetty ttyS1
  s2:23:respawn:/sbin/mgetty ttyS2
  s3:23:respawn:/sbin/mgetty ttyS3
を追加し、
  init q
を実行します。

4.4 設定ファイル

/etc/mgetty/login.config を
  /AutoPPP/ - a_pop /usr/sbin/pppd
と変更し、/etc/mgetty/mgetty.config を
  speed 57600
と変更します。

/etc/ppp/options.ttyS0 というファイルを作り、

  133.41.129.10:133.41.129.11
と記述します。 同様に、 /etc/ppp/options.ttyS1 を作り、
  133.41.129.10:133.41.129.12
と、 /etc/ppp/options.ttyS2 を作り、
  133.41.129.10:133.41.129.13
と、 /etc/ppp/options.ttyS3 を作り、
  133.41.129.10:133.41.129.14
と記述します。

さらに、 /etc/ppp/pap-secrets に

  * ppp ""
  root ppp "*" -
と書きます。

/etc/hosts に IPアドレスを登録しておく必要もあるかも知れません。

    133.41.129.10 ppp.sci.hiroshima-u.ac.jp ppp
    133.41.129.11 ppp1.sci.hiroshima-u.ac.jp ppp1
    133.41.129.12 ppp2.sci.hiroshima-u.ac.jp ppp2
    133.41.129.13 ppp3.sci.hiroshima-u.ac.jp ppp3
    133.41.129.14 ppp4.sci.hiroshima-u.ac.jp ppp4

以上で登録されているユーザ(/etc/passwdにエントリがある)は電話回線を通じて PPP接続することができるようになります。

5. ログファイル

/var/log/mgetty/mg_ttyS?.log
/var/log/ppp.log
に接続状況が記録されます。 以下のものはうまく接続できた場合の /var/log/ppp.log の例です。 7月7日22時35分に接続開始し、42分に正常終了しています。
Jul  7 22:35:08 ppp pppd[10508]: pppd 2.2.0 started by a_pop, uid 0
Jul  7 22:35:08 ppp pppd[10508]: Using interface ppp0
Jul  7 22:35:08 ppp pppd[10508]: Connect: ppp0 <--> /dev/ttyS0
Jul  7 22:35:10 ppp pppd[10508]: user iwase logged in
Jul  7 22:35:11 ppp pppd[10508]: local  IP address 133.41.129.10
Jul  7 22:35:11 ppp pppd[10508]: remote IP address 133.41.129.11
Jul  7 22:35:11 ppp pppd[10508]: found interface eth0 for proxy arp
Jul  7 22:42:29 ppp pppd[10508]: IPCP terminated at peer's request
Jul  7 22:42:29 ppp pppd[10508]: LCP terminated at peer's request
Jul  7 22:42:32 ppp pppd[10508]: Hangup (SIGHUP)
Jul  7 22:42:32 ppp pppd[10508]: Modem hangup
Jul  7 22:42:32 ppp pppd[10508]: Connection terminated.
Jul  7 22:42:32 ppp pppd[10508]: Exit.
同じものが /var/log/syslog にも残りますが、こちらはその他の情報も沢山記録されているので PPP接続に関することだけを見るのでしたら /var/log/ppp.log の方が便利です。
岩瀬康行(iwase@sci.hiroshima-u.ac.jp)