お知らせ
今後は、NAT patch にしか存在しなかった機能を、natd など他のプログラムでも汎用的に利用できるように、libalias に入れていくことを考えています。
なお、これにともない NAT patch というかたちでの開発は 3.3-RELEASE 用をもちまして終了したいと思います。
ご了承ください。
端末型でネットワーク型ダイヤルアップIPのように使う
(iij-pppへの The IP Network Address Translator (rfc1631) の実装編)
Error: ipcpLayerDown: が発生する不具合を修正しました。
最新パッチ作成日:1999/11/3
!! 注意 !!
- QuickTime4に対応しているのは、FreeBSD 3.2-RELEASE, 3.3-RELEASE用のみです。
- FreeBSD 3.0-RELEASE, FreeBSD 2.2.8-RELEASE 用のパッチから、-auto モード時の自分のIPアドレス設定の方法を変更しました。以前のバージョンからバージョンアップする方は設定にご注意ください。
- 1997/3/30のパッチから、元になるiij-pppのソースをFreeBSD2.2.x-RELEASE付属のものに変更しました。
また、NOROP氏による On-demand patch を統合しましたので、直接オリジナルソースにパッチを当てることができます。
端末型ダイヤルアップIP接続で自宅LAN上のどのマシンからもインターネットを利用しようとした場合、一番楽な方法としては、プライベートアドレスとグローバルアドレスの付け替えを行なってくれるISDNルータを購入するという方法が考えられます。
最近は、ダイヤルアップルータも安くなってきましたが、ここではTAやアナログモデムを使って、端末型ダイヤルアップIP接続で、LANごとインターネット接続を可能にする機能をiij-pppに持たせることを考えました。
これで、お金をかけずに手軽に快適なLAN環境が構築できます。
なお,ここで提供するNATの特徴はこちらです.
例えば,私の家のネットワークは以下のようになっていますが,
自宅内LANでのIPアドレスは以下のように設定しています.
- 左側のマシン: 192.168.31.1
- 右側のマシン: 192.168.31.2
左側のマシンではここで紹介するパッチのあたったiij-pppが動作していますので、
LAN上のIPアドレスと,プロバイダから割り当てられた正式なIPアドレスとの間での変換が行なわれます。
左側のマシンでNAT対応のiij-pppが動作していることで、
右側のマシンの defaultroute は左側のマシンになっているだけで良いことになります。非常に簡単ですね。
例えば、右側のマシンから XXX.XXX.XXX.XXX というアドレスのインターネット上のマシンへアクセスしたとします。この場合、
始点アドレス:192.168.31.2 -> 終点アドレス:XXX.XXX.XXX.XXX
というパケットが送り出されます.
しかし、ここで192.168.31.2は,プライベートアドレスなので、
左側のマシンで正式なアドレス(仮にYYY.YYY.YYY.YYYとします)に変換されます。
すると、実際に左側のマシンから外に出るときは、
始点アドレス:YYY.YYY.YYY.YYY -> 終点アドレス:XXX.XXX.XXX.XXX
というパケットに作りかえられます。
逆に、外部のマシンからLAN上の右側のマシンへパケットが戻ってくるときには、
始点アドレス:XXX.XXX.XXX.XXX -> 終点アドレス:YYY.YYY.YYY.YYY
として左側のマシンに届いたパケットが、
始点アドレス:XXX.XXX.XXX.XXX -> 終点アドレス:192.168.31.2
に変換され、最終的に右側のマシンへ届くことになります。
これで右側のマシンは、あたかも外部のマシンと直接通信しているかのようになるわけです。このような変換を行なうのが,NATの基本的な機能です。
実際には内部でさらに様々なパラメータの変更をおこなっているのですが...
ちなみに左側のマシンでは、今まで通りのiij-pppを使った場合と全く同じように利用できます。
右側のマシンでは、どんなプロトコルでもOKというわけではありませんが、
普段使うプロトコルで通らないという物はまず無いと思います。
なお、本パッチに関して詳しくはiij-pppをNAT対応にする技術情報と詳細を御覧下さい。
iij-pppへのパッチとインストール
まずは以下のソースを用意して下さい。
- FreeBSD 3.0R、3.1R、3.2R、3.3R に付属のiij-pppのソースツリー
用意ができたら,
を当てます。
(FreeBSD 2.1.x 付属のiij-pppに対するパッチはこちらです.また、FreeBSD 2.2.xR 付属のiij-pppに対するパッチはこちらです。)
これらのパッチは、pppディレクトリのあるディレクトリにおいて、つぎのように実行すればあてることができます。
% patch -p < nat300-981212.patch
3.1Rの場合
% patch -p < nat310-990311.patch
3.2Rの場合
% patch -p < nat320-990819.patch
3.3Rの場合
% patch -p < nat330-991023.patch
と実行すればあてることができます。
(Windowsのブラウザを用いてパッチをダウンロードする場合は、
改行コードに御注意ください。^Mが入っているとパッチが正常にあたりません。)
本パッチをあてたiij-pppのソースツリーが出来上がったら、pppディレクトリに入り、makeを実行すればコンパイルは終り、NAT機能を持ったiij-pppが完成しているはずです。
最初にも書きましたように、NOROP氏より許可をいただき、OnDemand patch を統合してあります。
このパッチ1つで、NATだけでなく、OnDemand patch の機能も組み込まれます。
ただし、FreeBSD 2.2.8-RELEASE および、FreeBSD 3.0-RELEASE からは、ppp に大幅な変更が加えられて、一部 OnDemand patch にあるような機能も加えられています。
そういった機能は、オリジナルのpppの方のソースコードを利用しています。
OnDemand patch 特有の機能に関してはここでは説明しませんので、
On Demand Dialup IP への道を参照して下さい。なお、OnDemand patch のコードの著作権は、NOROP氏にあります。
以前のNATパッチから何が変ったかは、iij-pppをNAT対応にする技術情報と詳細を御覧下さい。
iij-pppを動作させるマシンの設定
- /etc/ppp/ppp.conf の設定
まずは、通常のpppと同様の基本的な設定をします。
ただし、-autoモードでオンデマンドダイヤルアップをする場合は、set ifaddr コマンドだけは注意が必要です。
FreeBSD 2.2.7-RELEASEまでと、FreeBSD 2.2.8-RELEASEやFreeBSD 3.0-RELEASE以降では、設定方法が異なります。
基本的なpppの設定が終わったら、つぎはNAT特有の設定をします。
NATを実現するパッチを当てたiij-pppでは、つぎの2つの新たなコマンドが追加されます。
set taddr [ADDRESS/WIDTH]
set xaddr [ADDRESS]
set taddr は、NAT でアドレス変換をする自宅のローカルネットワークのアドレスを設定するコマンドです。
例えば、私の自宅LANでは、192.168.31.0/24のアドレスを使っていますので、
set taddr 192.168.31.0/24
という設定を行ないます.taddrの設定を行なわないとNATの機能は働きませんので注意して下さい.
/etc/ppp/ppp.confに書き加えておきましょう.
set xaddr は、Xサーバーのアドレスを指定するためのコマンドです。
外部のマシンで起動したXアプリケーションを,自宅LAN上のXサーバーへ接続させるというような使い方が出来るようになります.
例えば、私の自宅の場合、iij-pppの動作しているマシンのコンソールはVT100です。
そこで、Xのコネクションは、普段使っている右側のマシンの方へ向けるように以下のように設定しています。
set xaddr 192.168.31.2
なお、この設定を行なわない場合、Xクライアントの接続は一般の外部からのコネクションと同様に、iij-pppの動作するマシンに対して行なわれます。
XクライアントのローカルLAN上のXサーバへの接続の必要がない場合は、特に設定する必要はありません。また、複数のXサーバを指定することはできません。
- /etc/ppp/ppp.linkup, /etc/ppp/ppp.linkdown の設定
NAT パッチをあてた iij-ppp では、接続後と切断後の両方でルーティングテーブルを設定しなおすように設定しておく必要があります。
これをやらないと、次回のダイヤルアップのトリガとなるパケットの始点アドレスが前回接続していた時のアドレスになってしまい、最初のパケットのアドレスのつけかえが正しくできなくなってしまうためです。
接続後のルーティングテーブルの設定は、/etc/ppp/ppp.linkupで行ない、切断後のルーティングテーブルの設定は、/etc/ppp/ppp.linkdown で行ないます。
ppp.linkupとppp.linkdown の内容は同じにします。
ダイヤルアップのエントリが hogehoge の場合の設定例をつぎに示します。
hogehoge:
delete ALL
add 0 0 HISADDR
エントリ名は /etc/ppp/ppp.conf のエントリ名と同じにしてください。
- /etc/rc.conf の設定
NAT パッチをあてた ppp を動かすマシンでは、IP forwardingすることが必要になります。
したがって,/etc/rc.conf において、
gateway_enable="YES"
と設定します。
クライアントマシンの設定
defaultrouteをiij-pppの動作するマシンに向けるだけです.
私のLANの例をあげると,
FreeBSDの場合,/etc/rc.conf内で,
defaultrouter="192.168.31.1"
と設定します.
ルーティングに関しては特殊な設定は全く必要ないということがわかるかと思います.
普通のLANとルータの設定そのものです.
利用
上記の設定が終れば,あとはiij-pppを起動するだけです.
autoモードで実行しておくと便利でしょう.
ただし,1つだけ起動時の注意事項があります.
2.2.1-RELEASEのiij-pppでは,Packet Aliasing が実装されています.
これもNAT機能です.
最初から実装されているNAT機能と,ここで紹介しているパッチのNAT機能は共存
できません.具体的には,つぎの点に注意してください.
- -alias オプションをつけて起動した時は,set taddr を設定してはいけません.
- set taddr を設定する時は,-aliasオプションをつけて起動してはいけません.
まあ,このパッチを使う人は,Packet Aliasingは使わないでしょうが...
iij-pppが起動できたら,クライアント側はからは,普通に,
% telnet hogehoge
とか,
% ftp hogehoge
とやれば,接続できるはずです.Netscapeなども問題なく利用できます.
もちろん,proxyなんて不用です.
非常に快適な環境が実現できます.
socksで中継する場合と違い,クライアント側の設定がdefaultrouteだけで済んでしまい,アプリケーションを対応させるという作業が不用な点がNATの良いところでしょう.
例えば,
- クライアントのマシンが,WindowsやMacの場合.
- 使いたいソフトがsocks対応にできない場合.
といった場合には非常に便利です.
[トップページに戻る]
[注意書き]
佐藤 淳一
junichi@configure.sh