natd(8) FreeBSD 一般コマンドマニュアル

natd

前のページ 上に戻る 次のページ

natd


          [-deny_incoming | -d] [-use_sockets | -s] [-same_ports | -m]
          [-verbose | -v] [-dynamic] [-in_port | -i port]
          [-out_port | -o port] [-port | -p port]
          [-alias_address | -a address] [-target_address | -t address]
          [-interface | -n interface] [-proxy_rule proxyspec]
          [-redirect_port linkspec] [-redirect_proto linkspec]
          [-redirect_address linkspec] [-config | -f configfile] [-log_denied]
          [-log_facility facility_name] [-punch_fw firewall_range]


解説

     このプログラムは、 FreeBSD における divert(4) ソケットと共に用いることに
     よって、ネットワークアドレスの変換を行います。このプログラムは、複数の
     NIC とともに使用することを意図しています - PPP リンク上で NAT を行いたい
     場合、 ppp(8)-nat スイッチを使用してください。

     natd は通常、デーモンとしてバックグラウンドで実行します。 natd はマシンに
     入ってくるパケット、またはマシンから出て行くパケットを生 (raw) のまま扱
     い、場合により IP パケットストリームに再び送り出す前に手を加えます。

     natd は他のホストへ向かうすべてのパケットについて、発信元 IP アドレスを現
     在のマシンのものにする、という変換を行います。このように変換された各パ
     ケットについて、変換内容を記録するために内部テーブルエントリが作成されま
     す。発信元ポート番号も、パケットに適用したテーブルエントリを示すように変
     更されます。現在のホストの、対象となる IP アドレスを使ったパケットが受信
     されると、この内部テーブルがチェックされます。エントリが見つかると、パ
     ケットに正しい対象 IP アドレスとポート番号を入れるのに利用されます。

     以下のコマンドラインオプションが利用できます。

     -log | -l   様々なエイリアスの統計や情報をファイル /var/log/alias.log に
                 記録します。このファイルは natd が起動されるたびに切りつめら
                 れます。

     -deny_incoming | -d
                 入力パケットのうち、内部変換テーブルにエントリの無いものを渡
                 しません。

                 本オプションを使用しないと、このようなパケットは下記の
                 -target_address ルールを使用して変更され、内部変換テーブルに
                 エントリが作成されます。

     -log_denied
                 拒否した入力パケットを syslog(3) を介してログします
                 (-log_facility を参照してください) 。

     -log_facility facility_name
                 syslog(3) を介して情報をログするときに、指定したログファシリ
                 ティを使用します。引数 facility_namesyslog.conf(5) に記述
                 されているキーワードのうちのひとつです。

     -use_sockets | -s
                 FTP data コネクションや IRC DCC send コネクションを確立するの

     -unregistered_only | -u
                 登録されていない発信元アドレスを伴う出て行くパケットのみを変
                 換します。 RFC 1918 によれば、登録されていない発信元アドレス
                 は 10.0.0.0/8 と 172.16.0.0/12 と 192.168.0.0/16 となっていま
                 す。

     -redirect_port proto targetIP:targetPORT[-targetPORT]
                 [aliasIP:]aliasPORT[-aliasPORT]
                 [remoteIP[:remotePORT[-remotePORT]]]
                 指定されたポートに入ってくるコネクションを別のホストとポート
                 にリダイレクトします。引数 proto には tcp または udp を指定し
                 ます。 targetIP は転送先の IP 番号、 targetPORT 同じく転送先
                 ポート番号 (範囲指定可能)、 aliasPORT は接続を受け付けるポー
                 ト番号 (範囲指定可能)、 aliasIP は同じく接続を受け付けるアド
                 レスです。必要に応じて remoteIPremotePORT を指定し、接続
                 元を限定することができます。 targetPORTaliasPORT は、それ
                 らの占める番号は異なっていても構いませんが、範囲の大きさは同
                 じである必要があります。 remotePORT の指定を省略した場合、全
                 ポート番号が指定されたものとされます。 remotePORT を指定する
                 ときは、その範囲の大きさを targetPORT と同じにするか、あるい
                 は 0 (全ポート番号) を指定する必要があります。例えば、

                       tcp inside1:telnet 6666

                 という引数は、このマシンのポート 6666 に向けられた tcp パケッ
                 トがマシン inside1 の telnet ポートに送られることを示していま
                 す。

                       tcp inside2:2300-2399 3300-3399

                 は、ポート 3300-3399 に向けられた入力コネクションをホスト
                 inside2 のポート 2300-2399 へリダイレクトします。マッピング
                 は、ポート 3300 は 2300 に 3301 は 2301 にというように 1対1で
                 行われます。

     -redirect_proto proto localIP [publicIP [remoteIP]]
                 publicIP に向けられたプロトコル proto (protocols(5) を参照)
                 の入力 IP パケットを、 localIP アドレスへリダイレクトし、その
                 逆も行います。

                 publicIP が指定されないと、デフォルトのエイリアスアドレスが使
                 用されます。 remoteIP が指定されると、 remoteIP から/へ向けて
                 到着したパケットのみがルールにマッチします。

     -redirect_address localIP publicIP
                 公式な IP アドレスへのパケットの流れを、ローカルネットワーク
                 内のマシンにリダイレクトします。この機能は 静的 NAT (static
                 NAT) と呼ばれています。静的 NAT はあなたの ISP が IP アドレス
                 の小さなブロックをあなたに割り当てた時に、単一のアドレスとし
                 て用いるのにも利用できます:

                 パケットの流れは、指定された public_addr からのエイリアスのま
                 まになります。

     -redirect_port proto targetIP:targetPORT[,targetIP:targetPORT[,...]]
                 [aliasIP:]aliasPORT [remoteIP[:remotePORT]]

     -redirect_address localIP[,localIP[,...]] publicIP
                 書式 -redirect_port および -redirect_address は、単一サーバの
                 ネットワーク負荷をオフロードし、負荷をサーバプールへ分散しま
                 す。この機能は LSNAT (RFC 2391) として知られています。例え
                 ば、引数

                       tcp www1:http,www2:http,www3:http www:http

                 は、ホスト www への入力 HTTP 要求を、 www1, www2, www3 のいず
                 れかへ、透過的にリダイレクトします。ここで、ホストの選択は、
                 ネットの負荷にかかわらず、単純にラウンドロビンで行われます。

     -dynamic    -n オプションや -interface オプションが用いられると、 natd は
                 指定された interface へルーティングする変換ソケットを監視しま
                 す。インタフェースの IP アドレスが変化すると、 natd はエイリ
                 アスアドレスを動的に変更します。

     -in_port | -i port
                 すべてのパケットを ``入力'' として扱い、 divert(4) ポート
                 port から読み込み port へ書き出します。

     -out_port | -o port
                 すべてのパケットを ``出力'' として扱い、 divert(4) ポート
                 port から読み込み、 port へ書き出します。

     -port | -p port
                 divert(4) によって指定されたルールを用いてパケットを識別し、
                 ``入力'' パケットを divert(4) ポート port から読み、 ``出力''
                 パケットを port へ書き出します。 port が数字でない場合、デー
                 タベースが検索されます。このフラグが指定されない時には、デ
                 フォルトとして natd という名前の divert ポートが用いられま
                 す。

     -alias_address | -a address
                 エイリアスアドレスとして address を用います。このオプションが
                 指定されない場合は、 -n オプションか -interface オプションが
                 指定されなければなりません。指定されたアドレスは、 ``公開され
                 た'' ネットワークインタフェースに割当てられたアドレスである必
                 要があります。

                 出力される全データのソースアドレスは address に書換えられま
                 す。 到着する全データは、既にエイリアスされた外向け接続にマッ
                 チするかどうかチェックされます。マッチする場合、パケットはそ
                 れぞれ変換されます。マッチしない場合、 -redirect_port,
                 -redirect_proto, -redirect_address の割り当てをチェックしそれ
                 ぞれの動作を行います。他の動作が行えない場合かつ
                 場合、すべての新規入力パケットはパケット中で指定されるアドレ
                 スへ行きます。これにより、パケットの経路が可能な場合には、外
                 部のマシンが内部のマシンと直接通信可能になります。

     -interface | -n interface
                 エイリアスアドレスを決めるのに、 interface を用います。
                 interface に関連づけられた IP アドレスが変化する可能性がある
                 場合には、 -dynamic オプションも指定されるべきです。このオプ
                 ションが指定されない場合、 -alias_address オプションを使用す
                 る必要があります。

                 指定された interface は、通常、 ``公開された'' (または ``外
                 部'' の) ネットワークインタフェースです。

     -config | -f file
                 file から設定を読み込みます。 file はオプションのリストを含
                 み、上記のコマンドラインフラグの長い表記と同じ物が 1 行ずつ入
                 ります。例えば、

                       alias_address 158.152.17.1

                 という行はエイリアスアドレスに 158.152.17.1 を指定します。設
                 定ファイル内では、引数を持たないオプションは yesno を伴っ
                 て指定されます。例えば、

                       log yes

                 は -log と同じ意味になります。

                 後続する空白と空行は無視されます。 `#' 記号は、行の残りがコメ
                 ントである印です。

     -reverse    このオプションを指定すると natd は ``入力'' パケットと ``出
                 力'' パケットを逆に扱い、 ``外部'' インタフェースの代りに ``
                 内部'' インタフェース上で動作します。

                 出力トラフィックがローカルマシンにリダイレクトされ、 natd が
                 入力インタフェースで走行している (通常は出力インタフェースで
                 走行します) といった、透過プロキシを実行している状況で有用な
                 場合があります。

     -proxy_only
                 natd が透過プロキシのみを実行するよう強制します。通常のアドレ
                 ス変換は実行されません。

     -proxy_rule [type encode_ip_hdr | encode_tcp_stream] port xxxx server
                 a.b.c.d:yyyy
                 透過プロキシを有効にします。指定したポートのパケットでこのホ
                 ストから他のホストへ向かう出力 TCP パケットは、指定したサーバ
                 のポートへリダイレクトされます。オプションとして、元の宛先ア
                 ドレスがパケットにエンコードされます。 encode_ip_hdr は、この
                 情報を IP オプションフィールドに置きます。 encode_tcp_stream


NATD の実行

     natd を走らせようとする前には以下の手順が必要となります:

     1.   自分のカーネルを以下のオプションを付けて構築します:

                options IPFIREWALL
                options IPDIVERT

          自分のカーネルを構築する方法については、ハンドブックに詳しい説明があ
          るのでそちらを参照してください。

     2.   あなたのマシンがゲートウェイとして働くようにします。これは
          /etc/rc.conf に

                gateway_enable=YES

          と指定するか、

                sysctl -w net.inet.ip.forwarding=1

          というコマンドを用いることで機能するようになります。

     3.   -interface オプションを使いたい場合は、そのインタフェースがすでに設
          定済みとなるようにします。例えば、 interface として `tun0' を指定し
          ようとし、そのインタフェースで ppp(8) を使っている場合には、 natd を
          起動する前に ppp を起動するようにしなければなりません。

     natd の実行は至って簡単です。

           natd -interface ed0

     という行でほとんどの場合充分です (正しいインタフェース名に置き換えてくだ
     さい)。ブート時に自動的に開始するように設定する方法については rc.conf(5)
     を参照してください。 natd が起動されたら、パケットの流れの方向が natd の
     方に変わる (divert される) ようにしなければなりません:

     1.   /etc/rc.firewall スクリプトをうまく調整する必要があります。ファイア
          ウォールに興味が無ければ、以下のようにすれば良いでしょう:

                /sbin/ipfw -f flush
                /sbin/ipfw add divert natd all from any to any via ed0
                /sbin/ipfw add pass all from any to any

          2 番目の行はあなたのインタフェースに依ります ( `ed0' を適切に変更し
          てください)。

          このファイアウォールの設定では、ローカルネットワーク上の誰もがソース
          アドレスをあなたのホストに偽装可能であることを認識してください。ロー
          カルネットワーク上に他にホストがある場合、信頼するホストへ/からのト
          ラフィックのみを許可するファイアウォールルールを作成することを強く勧
          めます。
          と設定し、ファイアウォールを作動させます。これはシステムの起動時のス
          クリプトに /etc/rc.firewall スクリプトを実行するように伝えます。今す
          ぐ再起動したくない場合には、コンソールから手で実行してください。バッ
          クグラウンドで実行させるのでない限り、これは決して仮想セッションから
          行ってはいけません。もし実行させてしまうと、flush が行われた後にあな
          たは締め出されてしまい、すべてのアクセスを永久に遮断するためにこの地
          点で /etc/rc.firewall の実行は止まってしまいます。スクリプトをバック
          グラウンドで実行すれば、この災害を避けることができます。


関連項目

     divert(4), protocols(5), rc.conf(5), services(5), syslog.conf(5),
     ipfw(8), ppp(8)


作者

     このプログラムは、多くの人々の細切れの努力の結果です:

     Archie Cobbs <archie@whistle.com> (divert ソケット)
     Charles Mott <cmott@scientech.com> (パケットエイリアス)
     Eivind Eklund <perhaps@yes.no> (IRC サポートとその他の追加)
     Ari Suutari <suutari@iki.fi> (natd)
     Dru Nelson <dnelson@redwoodsoft.com> (初期の PPTP サポート)
     Brian Somers <brian@awfulhak.org> (まとめ役)
     Ruslan Ermilov <ru@FreeBSD.org> (natd とパケットエイリアシングと糊)

FreeBSD                          June 27, 2000                         FreeBSD

ABELNET VPSサービス