Comfortable Life with NetBSD

IPNAT って何?

IP Network Address Transformation ( IP ネットワークアドレス変換 )の 略です。読んで字のとおり、ネットワークアドレスを変換します。 例えば private address から global network に通信する際に 外部に private address を見せないようなところに使います。 (というか私にはそれしか思いつきません。(^^;) Linux 地方の「方言」では IP masquerade とも呼ばれているようです。

IPNAT を使うと何が嬉しいの?

割り当てられた global IP address よりもたくさんの計算機を ネットワークにつなげます。例えばGlobal address は一つしかないのに 計算機を3台つなぎ、各々の計算機から外部につなぎたい場合、 下図の様に接続し、[machine A] に IPNAT の設定を行なえば すべての計算機から外部にアクセスすることができます。 Global address は固定でもその都度変わっても構いません。 また、他の計算機上では特別な設定は必要ありません。

 
      Global Network             Private Network
            (xx.xxx.xx.x)   (192.168.1.1)
     ----------------[machine A]--------------+---[machine B](192.168.1.1)
                                              |
                                              +---[machine C](192.168.1.2)

どうやって設定するの?

IPNAT を使用するためには kernel の再構築と設定ファイルを 書く必要があります。

Kernel の再構築

Kernel configuration file に必要なオプションをつけて kernel の再構築をします。必要なオプションは
options 	GATEWAY		# packet forwarding
# IP packet Filtering
options 	PFIL_HOOKS	# pfil(9) packet filter hooks
options 	IPFILTER_LOG	# logging of IP packets using ip-filter
#options 	IPFILTER_DEFAULT_BLOCK # make ipf default policy block
pseudo-device	ipfilter		# IP filter (firewall) and NAT
位があればいいでしょう。ちなみに NetBSD/i386 の GENERIC には GATEWAY以外の必要なオプションは入っています。 GATEWAY に関しては boot した後に sysctl -w net.inet.ip.forwarding=1とすれば 変わるので「取りあえず試す」分には十分でしょう。

設定ファイル

NAT を有効にするためには ipf(8), ipnat(8)を使います。 いろいろな設定の例が /usr/share/examples/ipf にあるので参考にしてください。 ここでは、私が使っているものを例題として書いておきます。

まずは/etc/ipf.confです。素通しです。FireWall として 使うつもりはありません。

# pass all output packets
pass  out quick from any to any

# pass all from loopback (not logged)
pass  in quick on lo0 from localhost to localhost

# pass all input packets
pass in log body from any to any

次に/etc/ipnat.confです。ここでは「外側」のネットワーク インターフェースが ep0、それに与えられた IP address が 192.168.84.21、 内側のネットワークが 10.1.129.0/24 となっています。ダイアルアップで つなぐような「外側の IP address」が決まっていないような場合には 192.168.84.21の代わりに0/32を使えば うまく動きます。

map ep0 10.1.129.0/24 -> 192.168.84.21/32 proxy port ftp ftp/tcp
map ep0 10.1.129.0/24 -> 192.168.84.21/32 portmap tcp/udp 10000:20000
map ep0 10.1.129.0/24 -> 192.168.84.21/32
一行目がない場合、内側から外側への「passive でない」ftp(1)が通りません。 これらが起動時に自動的に設定されるようにするためには/etc/rc.confipfilter=YESipnat=YESが必要です。
Return to Comfortable Life With NetBSD
Driven By NetBSD Accesses to this page:
This page's author
tacha@tack.fukui-med.ac.jp
$Tera: ipnat.html,v 1.1 2001/08/23 08:46:28 tacha Exp $