IPNAT(5)

名称
ipnat, ipnat.conf - IP NAT ファイルの形式

解説
ipnat が受け付けるファイルの形式は、以下の文法で記述されるものです。

ipmap :: = mapit ifname ipmask "->" ipmask [ mapport ] .
mapit ::= "map" | "rdr" .
ipmask ::= ip "/" bits | ip "/" mask | ip "netmask" mask .
mapport ::= "portmap" tcpudp portnumber ":" portnumber .
tcpudp ::= "tcp" | "udp" | "tcp/udp" .
portnumber ::= number { numbers } .
ifname ::= 'A' - 'Z' { 'A' - 'Z' } numbers .
numbers ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' .

標準的な NAT 機能では、ひとつのルールは map で始まり、 その後にインタフェースの指定が続きます。そのインタフェースから パケットが出て行く際にソースアドレスが書き換えられます。

書き換えられるパケットの選択は、もとのソースアドレスとの照合のみで 行なわれます。IP アドレスの指定にはネットマスクを指定する必要が あります。

もとのアドレスと置き換えられるアドレスは、IP番号/ネットマスクの組から 選ばれます。すべて 1 のネットマスクは、ホスト名が正しいことを表します。 1 が 31 個からなるネットマスク (255.255.255.254) は、ブロードキャスト アドレスとネットワークアドレスを取ったあとでホスト IP 番号を割り当てる 余裕がないため、正しくないと見なされます。

TCP パケットと UDP パケットの再マップの際には、ソースポート番号の変更 も可能です。TCP, UDP パケットともども、それぞれの規則で選択が可能です。 これらは、規則のうしろに再マップ先のポート番号の範囲を、 port-number:port-number の形式で指定します。

使用例

ppp0 インタフェース経由で、内部で使用する IP 番号がネットワーク 10 の パケットを、ISP (インターネットサービスプロバイダ) が提供してくれた 209.1.2.0 (8 ビットサブネット) に変更する場合、以下の規則を使います。

map ppp0 10.0.0.0/8 -> 209.1.2.0/24

ここで、16,000,000 個以上の IP アドレスを 254 個に絞り込もうとすること が問題なのは明らかでしょう。スコープを広げるために、TCP と UDP については ポート再マップを使うこともできます。

map ppp0 10.0.0.0/8 -> 209.1.2.0/24 portmap tcp/udp 1025:65000

これで、ネットワーク 10 で利用可能な空間のうち、不足分は ``アドレス'' 527,566 個分だけになります。これらの規則を結合させるとすると、以下のよ うな指定が必要となります。

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

これで、TCP/UDP パケットのすべてはポートマップが行なわれ、IP アドレス のみが変更されるのは ICMP など他のプロトコルだけとなります。

関連ファイル
/dev/ipnat
/etc/services
/etc/hosts

関連項目
ipnat(4), hosts(5), ipf(5), services(5), ipf(8), ipnat(8)