PPxPによるIPマスカレード


 PPxPは、PC-UNIX上で動作するダイヤルアップ接続ツールですが、IPマスカレードなどの高度な機能を備えています。複数のマシンがある場合、それぞれにモデム/TA等を用意しなくても、1台のPC-UNIXマシン(デフォルトゲートウェイ)を中継してインターネットに接続する事ができます。
 ここでは、Plamo Linux 1.41
(2.0.36カーネル)上で実際に行ったインターネット・ゲートウェイサーバの設定を簡単に紹介してみたいと思います。ハードウェアは、マシン12を使用しています。詳しくはこちらを参照してください。2つのインターフェイスであるモデム/TA等(インターネット側)とEther(LAN側)のうちEther側のインターフェイス構築は、また別の機会に扱いたいと思います。ここではEthernetアダプタがあらかじめ認識されていて、すぐに設定できるものとして話を進めていきます。
 インターネット側のデバイスは、外付けのアナログモデムを使っています。PCIの内臓モデムは、添付されている(Windows専用)ソフトウェアにより制御する設計になっており、ほとんどがPC-UNIXでは使えないものとなっています。
 COM1にモデム/TAを接続し、電源を入れ、rootユーザで次のコマンドを実行してみます。
# echo at > /dev/ttyS0
モデム/TAのインジケーターが点滅すればttyS0 = COM1に接続されている事になります。COM2であればttyS1になります。インジケーターが点滅しないようなら物理的な接続に問題がある事が考えられるので、もう一度よく確認します。



ライブラリのインストール

 PPxPを使用するに当たって、まずSlackware系ではncursesreadline ライブラリが必要です。Slackware 3.xではreadlineはオプションとなっていますが、Plamo Linux 1.41ではreadln22というライブラリが「お勧めパッケージ」によりインストールされていました。
 また、userlink というモジュールも必要で、やはり「お勧めパッケージ」によりuserlink-0.98aがインストールされていました。ただし、カーネルのバージョンによってuserlinkのバージョンもそれ相応のものを使う必要があり、2.2.19カーネル以降では、userlink-0.99cが必要です。その他の注意事項などはPPxPのサイトを参照して下さい。http://www.linet.gr.jp/~manabe/PPxP/



モジュールの登録

 userlink.oというドライバをOS起動の際に読み込まなければならないので/etc/rc.d/rc.modulesに次の1行を追加します。
/sbin/modprobe userlink

 [/lib/modules/`uname -r`/ipv4]以下にはip_masq_ftp.o、ip_masq_irc.oなどのモジュールがあり、やはり次のように/etc/rc.d/rc.modulesに登録する事で読み込む事ができます。
/sbin/modprobe ip_alias
/sbin/modprobe ip_masq_cuseeme
/sbin/modprobe ip_masq_ftp
/sbin/modprobe ip_masq_irc
/sbin/modprobe ip_masq_quake
/sbin/modprobe ip_masq_raudio
/sbin/modprobe ip_masq_vdolive
/sbin/modprobe ipip



IPフォワーディング(転送)の設定

 プロンプトで次のコマンドを実行したとき、値が0であるとIPフォワーディングを行う事は出来ません。
$ cat /proc/sys/net/ipv4/ip_forward
 カーネルのバージョンが2.0.34以降では、デフォルトでIPフォワーディングが利用できなくなっています。0から1に変更して、IPフォワーディングを有効にするためには、次のようにする必要があります。
RedHat系のディストリビューションでは/etc/sysconfig/networkというファイルの FORWARD_IPV4=false を FORWARD_IPV4=true に変えます。他のディストリビューションでは、起動スクリプトに echo "1" > /proc/sys/net/ipv4/ip_forward と記述するようにとあります。しかし、ここで使用しているPPxP version 0.98082821では、/usr/local/etc/ppxp/rc/ip-forward.rcと言うファイルに次のような記述がすでにありました。

/usr/local/etc/ppxp/rc/ip-forward.rc
#!/bin/sh

export PATH="/usr/bin:/bin:/sbin:/usr/sbin"

case "$1" in
    up)
        /bin/echo 1 > /proc/sys/net/ipv4/ip_forward
        ;;
    down)
        /bin/echo 0 > /proc/sys/net/ipv4/ip_forward
        ;;
esac

exit 0

OS再起動後には値が0になってしまいますが、一度インターネットに接続すればその後は1になるので、このまま使用しています。
 次にIPマスカレードによるIPフォワーディングの設定が必要で、2.0系カーネルではipfwadmコマンドを、2.2系カーネルではipchainsコマンドを使用します。ここでは2.0.36カーネルを使っているので、/etc/rc.d/rc.localというファイルに次のように記述しました。
ipfwadm -F -a m -S 192.168.2.0/24 -D 0.0.0.0/0
ipfwadm -F -p deny

-Sの後ろに来る192.168.2.0/24は使用しているプライベートアドレスに応じて各自で読み替えてください。



権限

 PPxPを使用する際には、なるべくrootではなく一般ユーザで使用した方がよいのでuser01というユーザを作りました。ただ、このままではデバイスを使う権限が無いので、/etc/groupのttyグループとuucpグループにuser01を追加します(赤字)。

/etc/group
root::0:root
bin::1:root,bin,daemon
daemon::2:root,bin,daemon
sys::3:root,bin,adm
adm::4:root,adm,daemon
tty::5:root,user01
disk::6:root,adm
lp::7:lp
mem::8:
kmem::9:
wheel::10:root
floppy::11:root
mail::12:mail
news::13:news
uucp::14:uucp,user01
man::15:man
users::100:games
nogroup::-2:



PPxPデーモンの起動

 OS起動時に自動的にPPxPデーモンを起動させるために、/etc/rc.d/rc.localに次のように記述しました。
/usr/local/sbin/ppxpd



その他の基本設定

 サービス拒否とサービス許可の設定です。拒否の/etc/hosts.denyが先に解釈され、許可の/etc/hosts.allowがそのあとで解釈されます。サービス拒否を設定する/etc/hosts.denyでは次のように記述しました。
ALL : ALL

サービス許可を設定する/etc/hosts.allowでは次のように記述しました。
ALL : 192.168.2.0/255.255.255.0
in.ftpd : ALL
popper : ALL

こちらのプライベートアドレスも、各自で読み替えてください。



QUICK DIALUPの設定

 PPxPを起動する準備が出来たら、プロンプトでppxpと打つと次のように表示されます。
PPxP version 0.98082821
interface: ul0
ppxp>

ppxp>のプロンプトで、さらにqdialと打つとQUICK DIALUPの画面が表示されます。


操作の仕方は以下の通りです。

Tabキーか↑、↓キーで移動。
[ ] 文字列を入力。
{ } 選択式。スペースキーか←、→キーで変更。
( ) *でトグル式スイッチ。スペースキーか←、→キーで変更。
< > ボタン。反転させEnterを押す。

 

<More...>DNS Serversまで設定したら<Back>QUICK DIALUPに戻ります。

<Save...>で保存ファイル名を聞いてくるので、任意の名前を入力しEnterを押すと/usr/local/etc/ppxp/conf/以下に設定ファイルが保存されます。ここでは仮にisp0というファイル名にします。PPxPを起動する際に、プロンプトでppxp isp0と打つ事で設定内容を読み込んでPPxPを起動する事が出来ます。

<Dial>を実行すると接続され、プロンプトがppxpからPPXPに変わります。全て大文字にならない場合は接続のどこかで失敗しています。頭文字から順番に、以下が動作の意味です。
p = ダイヤル中
p = 接続中
x = ユーザの認証中
p = ネットワークの設定中

~/.ppxp/log/isp0.logにログが保存されているので、どの段階で失敗しているかを確認する事が出来ます。



PPxPのコマンド

基本的な操作はプロンプトで下記のコマンドを実行します。

切断 -- PPXP> disconnect
切断せずにシェルに移行 -- PPXP> bye
PPXPの終了 -- ppxp> quit
PPXPの起動 -- $ ppxp <保存ファイル名>
設定内容の確認 -- ppxp> set
再接続 -- ppxp> connect



ダミーIPアドレスの取得

 ダミーIPアドレスを使うことでオンデマンド接続が可能になります。オンデマンド接続が可能になると、クライアント側でブラウザやメーラーなどを立ち上げた時に、PPxPが自動でインターネットに接続してくれます。
 外部ネットワーク(この場合インターネット)に出て行こうとするパケットを検出したら、それをきっかけとして自動的に接続を行う仕組みがとられています。しかし、ダイヤルアップの場合、接続のたびにISPからもらうIPアドレスは変わる可能性があります。そこでダミーIPアドレスをきっかけにダイヤルアップを開始するようにします。ここで、実際にISPから割り当てられたIPアドレスとダミーIPアドレスとのギャップによる問題は、パケットを再構築する事により解決しているようです。

 ダミーIPアドレスを取得するためには、接続中のプロンプト[PPXP>]でsetコマンドを実行します。
IP.REMOTE=210.143.x.xのような表示を探し、IPアドレスをメモしておきます。



設定ファイルの編集

 ダミーIPアドレスの他、QUICK DIALUP設定画面では設定されない項目のために、/usr/local/etc/ppxp/conf/isp0をエディタで開き編集します。これでPPxPを使ったインターネット・ゲートウェイサーバの設定は完了ですが、クライアントにもデフォルト・ゲートウェイ(ここで設定したサーバ)やISPのDNSサーバの設定を行わなければインターネットには接続できません。Windowsを使っている場合は比較的設定は簡単です。
 なお、PPxPのバージョンが違うと設定項目も違っている場合があります。ここで紹介した内容は、PPxP version 0.98082821によるものです。

 

Back