194 lines
7.1 KiB
Groff
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)
|