iij-pppにNAT機能を追加する

ローカルなIPアドレス空間を使用したLAN上から、ダイヤルアップルータをゲートウェイとしてインターネットの世界に飛び出して行くには、NAT機能を使い「ローカルIPアドレス←→グローバルIPアドレス」の変換をしてやる必要があります。(そのパソコンがLANに接続されていない時(つまり、通常はIPアドレスが割り振られていない時)は、そのような必要はありません。単純に「IPアドレスを自動的に取得」する設定でダイヤルアップしてやれば良いだけです。)
iij-pppには標準でPacket AliasingというNAT機能が実装されていますが、特定のサービスのデータが通らない等、機能的には少々物足りないもの(らしい)です。
ということで、今回は佐藤 淳一@アステックさんが作られたNATパッチ(NOROPさんのOnDemand patch機能も含まれている)を元にiij-pppにNAT機能を組み込むことにします。(今回使用したFreeBSD 2.2.1-R用NATパッチでは、CU-SeeMeのデータが通らないらしいのですが、取りあえずCU-SeeMeで遊ぶことは無いので気にしないことにします。)



・NATパッチを入手します。
佐藤さんのホームページから、FreeBSD 2.2.1-R用のNATパッチを入手します。

この時、保存の仕方に注意して下さい。
NetscapeNavigatorなら、そのまま「ファイルメニュー」の中の「名前を付けて保存」を選び、「nat-970607.patch」という名前で保存すれば良いでしょう。
Windows95で、IE等のブラウザで受信し、コピー&ペーストで秀丸エディタ等のテキストエディタ上に持ってきて保存する際は、行末コードをLFコードのみにして保存しましょう。

秀丸の設定

また、勝手に「TABコード」を「スペース」に変換してしまわないように注意しましょう。秀丸エディタは、「設定メニュー」の「その他」のところに、その設定があります。

秀丸の設定

私は、Windows95でこのようにして受信したファイルをFreeBSDに持ち込んで作業を行いましたが、最初、TABコードを(色々パッチファイルをいぢくっているうちに)スペースに変換してしまっていたため、正常にパッチを充てることが出来ませんでした。本当は54Kbyteくらいしかないパッチファイルが、60Kbyteの大きさになっていました。↓(^^;

本物 -rw-r--r-- 1 root wheel 54193 Dec 7 00:44 nat-970607.patch
偽物 -rw-r--r-- 1 root wheel 60093 Dec 6 22:24 nat-970607.patch


・iij-pppのオリジナルソースに、NATパッチを充てます。
iij-pppのソースファイルのあるディレクトリ(/usr/src/usr.sbin/ppp)の親ディレクトリ(/usr/src/usr.sbin)上にNATパッチをコピーし、patchを充てます。

# cp ./nat-970607.patch /usr/src/usr.sbin
# cd /usr/src/usr.sbin
# patch -p < nat-970607.patch

[注意]
パッチを充てる前に、iij-pppのソースがインストールされていなければいけません。FreeBSDの初期インストール時にusr.sbinのソースをインストールしていなかった人は、/stand/sysinstall「c 設定」→「D 配布ファイル」等で、usbin(/usr/src/usr.sbin(補助的システムバイナリ))のソースをインストールしておいて下さい。
また、iij-pppのコンパイルでは、/usr/src/sbin/startslip/uucplock.cも使われますので、sbin(/usr/src/sbin(システムバイナリ))のソースもインストールしておいて下さい。


・iij-pppのコンパイル
patchが正常に充たったら(rejectファイルが吐かれてないのを確認したら)、iij-pppのソースがあるディレクトリに移動し、iij-pppのコンパイルを行います。

# cd /usr/src/usr.sbin/ppp
# make;make install

これで、NAT機能を持ったiij-pppが作られます。


・コンフィギュレーションファイルの修正を行います。
(1) /etc/ppp/ppp.confを修正します。

  以下のコマンドを追加します。(参考:私のppp.conf
  set taddr 10.80.1.0/24
  set ifaddr 0.0.0.0/0 XXX.XXX.XXX.XXX/0
  add default 255.255.255.0 XXX.XXX.XXX.XXX

  * XXX.XXX.XXX.XXXは、あなたが接続するインターネットサービスプロバイダー(ISP)のゲートウェイアドレスです。(私はISPのゲートウェイアドレスを知らないので、単純にネームサーバのアドレスを入れてます。良いのかな?(^^;)

(2) /etc/sysconfigを修正します。

  network_interfacesにトンネルデバイスtun0を追加し、tun0のifconfigを追加します。
  network_interfaces="ed4 lo0 tun0"
  ifconfig_ed4="inet 10.80.1.1 netmask 255.255.255.0"
  ifconfig_lo0="inet 127.0.0.1"
  ifconfig_tun0="inet 0.0.0.0 XXX.XXX.XXX.XXX netmask 255.255.255.0"

  * XXX.XXX.XXX.XXXは、あなたが接続するインターネットサービスプロバイダー(ISP)のゲートウェイアドレスです。

  IP forwardingするマシンということで、gatewayは"YES"に設定します。
  # If you want this host to be a gateway, set to YES.
  gateway="YES"


・/etc/start_if.tun0 を作成します。
(すみません。実は私、このシェルスクリプトがどのタイミングで起動されるものなのか、全然知りません。(^^;NOROPさんのホームページに、「/etc/start_if.tun0 を作成して下さい」と書いてあったので作りました。(^^;)
/etc/start_if.tun0 の中身

  #!/bin/sh
  ifconfig tun0 inet 1.1.1.1 XXX.XXX.XXX.XXX

  * XXX.XXX.XXX.XXXは、あなたが接続するインターネットサービスプロバイダー(ISP)のゲートウェイアドレスです。


・以上の設定が終了したら、マシンをリブートします。

・マシンが起動されたら、iij-pppをAUTOモードで起動しておきます。
# ppp -auto c-dasauto

私は、c-dasautoラベルの下に、AUTOモードの設定を書いているので、このように起動します。(参考:私のppp.conf

以下のように表示され、iij-pppがAUTOモードで起動されます。
User Process PPP. Written by Toshiharu OHNO.
Log level is 281
Warning: No password entry for this host in ppp.secret
Warning: All manipulation is allowed by anyone in the world
Using interface: tun0
Automatic Dialer mode
#




以上で、PC-9801BXをダイヤルアップルータ(リモートアクセスルータ)として利用するための設定は終了です。
後は(クライアント側の設定を行えば)、外向けの(インターネットに出ていく)パケットが流れてくれば、PC-9801BXが自動でダイヤルアップをしてインターネットに接続してくれます。

尚、私の知識不足のために、このページでは各設定の『意味』については全然説明していませんので、是非、佐藤さんNOROPさんのホームページを確認されることをお勧めします。


前のページへ FreeBSDで遊ぶ Powered by FreeBSD by SHINODA Masanori