doc/ja_JP.eucJP/man/man5/ipnat.5
Kazuo Horikawa f6ffff974d Remove whitespace at eol.
Remove extraneous .Pp before and/or after .Sh.
2001-07-29 05:15:42 +00:00

194 lines
7.1 KiB
Groff

.\" $FreeBSD: doc/ja_JP.eucJP/man/man5/ipnat.5,v 1.5 2001/05/14 01:09:29 horikawa Exp $
.TH IPNAT 5
.SH 名称
ipnat, ipnat.conf \- IP NAT ファイルの形式
.SH 解説
ipnat が受け付けるファイルの形式は、以下の文法で記述されるものです。
.LP
.nf
ipmap :: = mapblock | redir | map .
map ::= mapit ifname ipmask "->" ipmask [ mapport ] .
map ::= mapit ifname fromto "->" ipmask [ mapport ] .
mapblock ::= "map-block" ifname ipmask "->" ipmask [ ports ] .
redir ::= "rdr" ifname ipmask dport "->" ip [ "," ip ] [ ports ] options .
dport ::= "port" portnum [ "-" portnum ] .
ports ::= "ports" numports | "auto" .
mapit ::= "map" | "bimap" .
fromto ::= "from" object "to" object .
ipmask ::= ip "/" bits | ip "/" mask | ip "netmask" mask .
mapport ::= "portmap" tcpudp portnumber ":" portnumber .
options ::= [ tcpudp ] [ rr ] .
object = addr [ port-comp | port-range ] .
addr = "any" | nummask | host-name [ "mask" ipaddr | "mask" hexnumber ] .
port-comp = "port" compare port-num .
port-range = "port" port-num range port-num .
rr ::= "round-robin" .
tcpudp ::= "tcp" | "udp" | "tcp/udp" .
portnumber ::= number { numbers } | "auto" .
ifname ::= 'A' - 'Z' { 'A' - 'Z' } numbers .
numbers ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' .
.fi
.PP
標準的な NAT 機能では、ひとつのルールは \fBmap\fP で始まり、
その後にインタフェースの指定が続きます。そのインタフェースから
パケットが出て行く際にソースアドレスが書き換えられます。
.PP
書き換えられるパケットの選択は、もとのソースアドレスとの照合のみで
行なわれます。IP アドレスの指定にはネットマスクを指定する必要が
あります。
.PP
もとのアドレスと置き換えられるアドレスは、IP番号/ネットマスクの組から
選ばれます。すべて 1 のネットマスクは、ホスト名が正しいことを表します。
1 が 31 個からなるネットマスク (255.255.255.254) は、ブロードキャスト
アドレスとネットワークアドレスを取ったあとでホスト IP 番号を割り当てる
余裕がないため、正しくないと見なされます。
.PP
TCP パケットと UDP パケットの再マップの際には、ソースポート番号の変更
も可能です。TCP, UDP パケットともども、それぞれの規則で選択が可能です。
これらは、規則のうしろに再マップ先のポート番号の範囲を、
\fBport-number:port-number\fP の形式で指定します。
.SH コマンド
.\" There are found commands recognised by IP Filter's NAT code:
.\" この部分、There are four commands ... の間違いではないかと send-pr 済み
.\" (2000-1-19, by kuma)
IP フィルタの NAT コードが認識するコマンドが 4 個あります:
.TP
.B map
アドレスもしくはネットワークひとつを、統制なしのラウンドロビン法で
他のアドレスに写像するときに用います。
.TP
.B rdr
ある IP アドレスとポートの組から別の組に、パケットをリダイレクトする
ときに用います。
.TP
.B bimap
外部 IP アドレスと内部 IP アドレスとの間で双方向 NAT を設定するときに
用います。
.TP
.B map-block
IP アドレスに基づく静的な変換を設定します。アドレスを絞り込み、目的の範囲に
収まるように変換するアルゴリズムに基づくものです。
.SH 照合処理
.PP
基本的な NAT 機能とパケットのリダイレクトにおいては、プロトコルとともに
変更可能性のあるアドレスを用いて、あるパケットを変更せねばならないか
どうかをチェックします。
それぞれの規則の "->" の左辺は、その規則のパケット\fI照合処理\fP
部分です。
.PP
パケットの照合処理は、より複雑な比較が可能なように拡張されました。
変換されるアドレス部分においては、
IP アドレスとポート番号の比較は、\fBipf\fP で使用可能な式を使用可能です。
単純な NAT ルールは次のように記述可能です:
.LP
.nf
map de0 10.1.0.0/16 -> 201.2.3.4/32
.fi
.LP
または
.LP
.nf
map de0 from 10.1.0.0/16 to any -> 201.2.3.4/32
.fi
.LP
IP アドレスとポート番号のみ、比較対象にできます。
これは、すべての NAT ルールで使用可能です。
.SH 変換処理
.PP
"->" の右辺は、それ以前の制約条件との照合が既に成功している場合に、その
パケットに書き込まれるアドレスとポートを指定する部分です。リダイレクトの
場合 (\fBrdr\fP) が最も単純です。新しいデスティネーションアドレスを
その中で指定します。
\fBmap\fP 規則に対しては、デスティネーションアドレスは、新しいアドレス
の組 (ソースとデスティネーション) が一意的であると知られているアドレス
になります。パケットが TCP か UDP パケットの場合、デスティネーション
ポートとソースポートもこの等式に含めます。
アドレスの組が既に存在する場合、IP フィルタは、まず \fBportmap\fP
指定した有効範囲内でポート番号を 1 つ増やします。そうしても一意的な
アドレスの組が得られない場合、指定されたネットマスクの範囲内で
ソースアドレスを 1 つ増やします。一意的なアドレスの組が決して得られない
場合、パケットは変換されません。\fBmap-block\fP では、新規アドレスの組、
フリーなアドレスの組、一意的なアドレスの組を検索するやりかたがより限定
されます。ここでは、ポートの有効範囲に加えて、新しいソースアドレスを
何にするかを決定するアルゴリズムを使用します。IP アドレスは決して
変更されませんし、ポート番号も割り当てられた範囲を越えるものは
変更されません。
.SH カーネルプロキシ
.PP
IP フィルタには、カーネルにロードされるコードの中に組み込まれた単純な
プロキシがいくつか付いてきます。これにより、パケットをユーザプログラムを
通させずに 2 番目のチャネルを開けておくことが可能となります。
.SH 透過型プロキシ
.PP
真の透過型プロキシ処理 (transparent proxying) は、実際の発信元と
コネクションのアドレスを決定するため、\fB/dev/ipnat\fP 経由で検索を
行なうプロキシプログラムを用いて、localhost (127.0.0.1) のポートに
対応付けるリダイレクト (\fBrdr\fP) 規則を用いて行なう必要があります。
.SH 負荷分散
.PP
\fBrdr\fP と組み合わせて 2 個のオプションを使用可能です。
これにより、原始的な\fIラウンドロビン\fPベースの負荷分散をサポートします。
最初のオプションは、\fBrdr\fP 用に 2 番目の終点を、次のように指定します:
.LP
.nf
rdr le0 203.1.2.3/32 port 80 -> 203.1.2.3,203.1.2.4 port 80 tcp
.fi
.LP
これにより、203.1.2.3 と 203.1.2.4 へ交互に接続を送ります。
より多くのサーバに負荷を分散したい場合には、次のようにします:
.LP
.nf
rdr le0 203.1.2.3/32 port 80 -> 203.1.2.3,203.1.2.4 port 80 tcp round-robin
rdr le0 203.1.2.3/32 port 80 -> 203.1.2.5 port 80 tcp round-robin
.fi
.LP
この場合、接続は 203.1.2.3 にまず向けられ、次に 203.1.2.4 に向けられ、
そして 203.1.2.5 に向けられ、最後に 203.1.2.3 に戻ります。
これを実現する際、必要に応じて自動的に、
ルールがリストの先頭から取り除かれて最後に追加されます。
これは、"ipnat -l" を使用したルール表示には影響せず、
内部的な適用順序にのみ影響します。
.SH 使用例
.PP
本セクションでは、\fBmap\fP コマンドとその変形を扱います。
.PP
ppp0 インタフェース経由で、内部で使用する IP 番号がネットワーク 10 の
パケットを、ISP (インターネットサービスプロバイダ) が提供してくれた
209.1.2.0 (8 ビットサブネット) に変更する場合、以下の規則を使います。
.LP
.nf
map ppp0 10.0.0.0/8 -> 209.1.2.0/24
.fi
.PP
ここで、16,000,000 個以上の IP アドレスを 254 個に絞り込もうとすること
が問題なのは明らかでしょう。スコープを広げるために、TCP と UDP については
ポート再マップを使うこともできます。
.LP
.nf
map ppp0 10.0.0.0/8 -> 209.1.2.0/24 portmap tcp/udp 1025:65000
.fi
.PP
これで、ネットワーク 10 で利用可能な空間のうち、不足分は ``アドレス''
527,566 個分だけになります。これらの規則を結合させるとすると、以下のよ
うな指定が必要となります。
.LP
.nf
map ppp0 10.0.0.0/8 -> 209.1.2.0/24 portmap tcp/udp 1025:65000
map ppp0 10.0.0.0/8 -> 209.1.2.0/24
.fi
.PP
これで、TCP/UDP パケットのすべてはポートマップが行なわれ、IP アドレス
のみが変更されるのは ICMP など他のプロトコルだけとなります。
.SH 関連ファイル
/dev/ipnat
.br
/etc/services
.br
/etc/hosts
.SH 関連項目
ipnat(4), hosts(5), ipf(5), services(5), ipf(8), ipnat(8)