Last Update: "2007/11/12 00:02:30 makoto"
ipnat
【IP NAT Network Address Translation の設定】
接続業者から 固定の IP address を一つだけもらっている時や、ダイアルアップで ppp を
使ってインターネットに接続している時には、見かけ上は一台の機械しかつなげません。しか
し、そういう時でも、IP NAT (Network Address Translation) という方法を使えば、自分の
ネットワークの複数の機械をインターネットに同時につなぐことが出来ます。関連して ipf
(IP Filter) という機能があります。これは ipnat とは一応別の機能ですが、ipnat を使う
時には ipf を必要としますので、「全てを通す」設定で利用します。
【準備】ipnat と ipf を使えるようにします。
【/etc/ipnat.conf】ipnat の設定
-rw-r--r-- 1 root wheel 193 Oct 17 13:42 /etc/ipnat.conf
を用意します。これの書き方については様々な可能性があり、/usr/share/examples/ipf/
にも例があるのですが、簡単な例だけを二つ紹介します。
【CATV, ADSL などのルーター接続で固定の IP address が利用出来る時】
|WAN (外側) 210.aaa.bbb.ccc/32
+----+-----+
| ne0 |
| | NetBSD
| gm0 |
+----+-----+
|LAN (内側) 192.168.1.1/24
NetBSD 箱をルータにします。Ethernet の口を二つ用意します。もし既に内蔵されている機
種なら NIC (Network Interface Card) を一つ追加するだけです。上記例では ne0 がこれに
当ります。割当られている IP address が 210.aaa.bbb.ccc だとして、それを 外側につながっ
ている ifconfig.xx? に設定します。NIC の種類にと枚数に応じて xx? の部分が gm0 mc0
ep0 ne0 などと名前が変りますが、外側につなぐ口が ne0 だったら ifconfig.ne0 に
+------------- /etc/ifconfig.ne0 ----------------------
| 210.aaa.bbb.ccc netmask 0xffffffff media autoselect
+------------------------------------------------------
のように記述します。一方内部のネットワークの中の方の IP address を 192.168.1.1
としますと、例えば ifconfig.gm0 に
+------------- /etc/ifconfig.gm0 ----------------------
| 192.168.1.1 netmask 0xffffff00 media autoselect
+------------------------------------------------------
のように書いておきます。このような場合、/etc/ipnat.conf に次のように書きます。
(これはあくまで一例です) ne0 の文字の部分も NIC の種類によって変ります。
+--------------------- /etc/ipnat.conf ------------------------
| map ne0 192.168.1.1/24 -> 210.aaa.bbb.ccc/32
| map ne0 192.168.1.1/24 -> 210.aaa.bbb.ccc/32 proxy port ftp ftp/tcp
| map ne0 192.168.1.1/24 -> 210.aaa.bbb.ccc/32 portmap tcp/udp 10000:40000
+--------------------------------------------------------------
ここでは ne0 は(外側の)インターフェイスの名前。/24 は 24 bit のネットワークアドレ
スを意味します。つまり「この機械についている 192.168.1.0 の上位 24 bit を固定として、
残りの 8 bit は何が来ても」という意味になります。
ne0 が 192.168.1.1 側についているのではないことに注意して下さい。筆者はしばらくこ
こに (内側の名前の) de0 と書いて悩んでいました。
210.aaa.bbb.ccc は外側に使えるものとして割当られたものを記述して下さい。この例では
192.168.1.1...254 までの 254 個を全て一つの 210.aaa.bbb.ccc として対応付けるという意
味になります。man ipnat.conf とすると、英語の説明が読めます。
【/etc/ipnat.conf を変更した時】
# ipnat -f /etc/ipnat.conf
とすれば上記で用意した /etc/ipnat.conf を読んでくれるのですが、これではそれまでに
読んだものの上に追加するだけです。いままでカーネルで覚えている設定を消して、最初から
/etc/ipnat.conf に記述したものだけを設定するには clear の -C を使って、
# ipnat -C; ipnat -f /etc/ipnat.conf
とします。
【ダイアルアップ ppp 接続の場合】
自分の機械から、下の図のように外部にダイアルアップで接続している場合には、
+--------------------- /etc/ipnat.conf ------------------------
| map ppp0 192.168.1.1/24 -> 0.0.0.0/32
| map ppp0 192.168.1.1/24 -> 0.0.0.0/32 proxy port ftp ftp/tcp
| map ppp0 192.168.1.1/24 -> 0.0.0.0/32 portmap tcp/udp 10000:40000
+--------------------------------------------------------------
のように書きます。
| モデム経由でダイアルアップ
+----+-----+
| ppp0 |
| | NetBSD
| gm0 |
+----+-----+
|LAN (内側) 192.168.1.1/24
【その他】
ipnat
-l (list) いまの対応表を表示します
-C (Clear) (kernel に持っている) NAT 規則を消します
-F (flush) いま使っている対応を消します
-f (file) 指定した譜から読んで規則を加えます
-r (remove) 指定した規則を消します ( -f の反対)
-s (stat) 統計を表示します
-v (verbose) いろいろ表示
その他は man ipnat して見て下さい
ipfstat ipf も含めた統計を表示します
(以上は管理者 = root 権限が必要です)
【複数の IP address が使える時】
以上では割当てられている IP address を一つと仮定して説明して来ましたが、
実際には複数の場合でも同じように設定出来ます。/32 と書いてあった部分を
/28, にすれば 16 (実際には 14) で利用出来ます。
+--------------------- /etc/ipnat.conf ------------------------
| map ne0 192.168.1.1/24 -> 210.aaa.bbb.ccc/28
| map ne0 192.168.1.1/24 -> 210.aaa.bbb.ccc/28 proxy port ftp ftp/tcp
| map ne0 192.168.1.1/24 -> 210.aaa.bbb.ccc/28 portmap tcp/udp 10000:40000
+--------------------------------------------------------------
このようにすれば、254 個の 内部 IP address で 14 個の外部 address を共用出来ます。
|