このページは過去に掲載していたものをそのまま使用しています。

[ Parent Dir | Index ]

ip_fil (ip_fil3.4.14) を使ってNATをしよう

NATをするだけなのに、いろいろ設定をする羽目に なってしまいました。Free Solaris7日本語版が手に入ったので、この ページも書換えることにします。(2000/Nov/13:Solaris8も考慮する) BugTraqを見ていたら Sunscreen Lite というソフトウェアの存在を知りました。制限もあるようですがGUIなどで 設定ができる"ようです"。

はじめに

Solarisを始めとして、NetBSDやIRIXなどの各種UNIX上でパケットの 操作をするためのプログラムとして、ip_filterが有ります。今回は 古いss20にSolaris8を入れてgatewayにした時に利用した ip_fil3.4.14.tar.gzに従って、NATを行なった様子を紹介します。

NATをするマシンの状況

研究に必要なマシンは外部に置いてありますが、いまや骨董品的な価値がある SunOS4やふるーいlinux kernelで動いているMkLinux DR3などの、そのままでは DoS攻撃や古いネットワークサーバーのセキュリティホールを突かれそうな コンピュータはインターネットと間接的に接続された状態で置いておきたかったので NATをする事にしました。

[2000 Nov 14]その後、研究室を移動してss20とPentiumIII 500MHzが二台づつに PentiumII 300MHzとUltra 10が一台づつという環境になったので、実験のために 96MBのss20をgatewayに、432MBのFujitsu互換機ss20は各種内部サーバーとして セットアップすることにしました。ついでにこのドキュメントも更新しています。(^^

Solaris用のNATドキュメントは、PPPなどと組合せて使う事を想定されて いるようですが、基本的には同じなのでppp0などをle0などに変換して読みましょう。

条件

  1. 間違いなく二枚のNICが存在すること
  2. それが認識されていること
    私の所では/devices/pci\@0,0/の中にelxl{0,1}という 二つのファイルができていて、これがそれぞれのNICを指しています
  3. "/etc/hostname."で始まる名前のファイルが存在すること
    たとえば"/etc/hostname.le0"と"/etc/hostname.le1"というファイルにはそれぞれのNICに割当てられているホスト名が書かれています

準備

まず必要なsoftwareをinstallしましょう。

上記の場所などからip_fil3.4.14.tar.gzをgetしましょう。 解凍・展開の後に"INSTALL.Sol2"を見ながらinstallまで終らせます。 ここに方法を書くと"INSTALL.Sol2"を読まないのではないかなと思いましたが あまり情報を隠すのは良くないようなので、簡単に書いておくことにします。

% gzip -d ip_fil3.4.14.tar.gz
% tar xvf ip_fil3.4.14.tar.gz
% cd ip_fil3.4.14
% more COMPILE.Solaris2
% more INSTALL.Sol2
% su
% /bin/sh
% PATH=/usr/ccs/bin:/usr/sbin:$PATH
% export PATH
% make solaris
% cd SunOS5
% make package

今回はip_fil3.4.14.tar.gzで試しました。

rootで作業をする際に、最初に/usr/ccs/bin/usr/sbinにPATHを通していないとエラーがでるかもしれません。 注意しましょう。

NATに必要なファイルの設定

NATに必要なファイルを作成しましょう。/etc/opt/ipf/ipnat.conf がまず必要です。その中身なのですが次のような構成の場合を仮定します。 163.143.xxx.yyyは私が大学で使っているマシンのIPです。 これは適当に読み換えてください

そうして192.168.100で始まるIPを持つマシンが複数つながっているとします。 この場合/etc/opt/ipf/ipnat.confは…、

map elxl0 192.168.100.0/24 -> 163.143.xxx.yyy/32 portmap tcp/udp 40000:60000
map elxl0 192.168.100.0/24 -> 163.143.xxx.yyy/32

インターネット側のelxl0において、192.168.100.側から来たパケットを 163.143.1の側に転送しなさい、ということです。

NATに必要のないファイルの設定

存在するけれど、NATには直接関係のないファイルについての説明です。

ip_fil3.4.14をインストールすると何も書かれていない /etc/opt/ipf/ipf.confが準備されます。 これはNATとは関係のない設定をするためのものなので、ここでは触れません。 もちろん重要な使い道があって本来の目的である IPレベルでのパケットの出入りの制限をするためのものです。 くれぐれもipnetの設定を書かないように注意してください。

この"ipf.conf"の書き方は次のURLを参照してください。NetBSDなど他の アーキテクチャ用なのでコピーするとトラブルになるかもしれないので、 あくまでも参考程度にしてください。けれどもNetBSD,OpenBSDなどの他のOS向けの ドキュメントは、これ以外の場面でもきっと役に立つはずです。

まだ内と外が繋っていない…

ここまで設定すると、内側(192.168.100.0/24)のマシンにはログインできる のですが、その内側のマシンから外側(163.143.xxx.zzzなど)のマシンには telnet, rloginなどができないのでした。

よくよく考えてみれば、IP fowardingの設定がされていないのが原因では ないかと考えて/etc/init.d/のスクリプトを適当に眺めてみます。 すると、/etc/init.d/inetinitの中に

/usr/sbin/ndd -set /dev/ip ip_forwarding $forwarding
という記述をみつけました。

これを自動で有効にさせるためにはいくらか条件が必要になるようで、 DHCP関係の設定をしていたり、/etc/defaultrouterがなくて、/etc/gatewaysが あれば良いなどの条件があるようですが、/etc/init.d/inetinitの 一番最後に

/usr/sbin/ndd -set /dev/ip ip_forwarding 1
を書いてしまいました。昔のドキュメントでは"2"を設定することで 二枚のNICが存在する場合のみ、これ(NAT)を行なうということだったのですが、 Solaris7ではうまくいかないようです。

またIP Forwardingの状態は次のようなコマンドで見る事ができました。

/usr/sbin/ndd -get /dev/ip ip_forwarding

Yasuhiro Abe <m5031201@u-aizu.ac.jp>
Last modified: Mon Nov 13 18:31:49 2000