NATD(8) FreeBSD システム管理者マニュアル NATD(8)
名称
natd − ネットワークアドレス変換デーモン |
書式
natd [−unregistered_only | −u] [−log | −l] [−proxy_only] [−reverse] [−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] [−skinny_port port] [−log_ipfw_denied] [−pid_file | −P pidfile] |
解説 |
natd ユーティリティは、 FreeBSD における divert(4) ソケットと共に用いるこ とによって、ネットワークアドレスの変換を行います。 (PPP リンク上で NAT が必要な場合、ほとんどの natd 機能を提供し、同じ libalias(3) ライブラリを使用する、 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 −log_facility facility_name −use_sockets | −s −same_ports | −m −verbose | −v −unregistered_only | −u −redirect_port proto 引数 targetIP, aliasIP, remoteIP は、IP アドレスまたはホスト 名で与えられます。 targetPORT, aliasPORT, remotePORT の範囲 は、番号は異なっていても構いませんが、大きさは同じである必要 があります。 targetPORT, aliasPORT, remotePORT が単一の値 (範 囲ではない) を指定する場合、 services(5) データベース中で検索 されるサービス名で指定可能です。 例えば、 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 が指定されると、 remoteIP から/へ向けて 到着したパケットのみがルールにマッチします。 −redirect_address localIP
publicIP redirect_address 10.0.0.8 0.0.0.0 上記のコマンドは入ってくすべてのパケットをマシン 10.0.0.8 に リダイレクトします。 下記のように、いくつかのアドレスエイリアスが同一の公式アドレ スを示すように指定すると、 redirect_address 192.168.0.2 public_addr 入ってくるパケットの流れは最後に変換されたローカルアドレス (192.168.0.4) に向けられますが、最初の二つのアドレスへの出力 パケットの流れは、指定された public_addr からのエイリアスのま まになります。 |
−redirect_port proto targetIP: targetPORT[ ,targetIP: targetPORT[ ,...]] [aliasIP:] aliasPORT [ remoteIP[:remotePORT]]
−redirect_address tcp www1:http,www2:http,www3:http www:http は、ホスト www への入力 HTTP 要求を、 www1, www2, www3 のいず れかへ、透過的にリダイレクトします。ここで、ホストの選択は、 ネットの負荷にかかわらず、単純にラウンドロビンで行われます。 −dynamic −in_port | −i port −out_port | −o port −port | −p port −alias_address | −a
address 出力される全データのソースアドレスは address に書換えられま す。 到着する全データは、既にエイリアスされた外向け接続にマッ チするかどうかチェックされます。マッチする場合、パケットはそ れぞれ変換されます。マッチしない場合、 −redirect_port, −redirect_proto, −redirect_address の割り当てをチェックしそれ ぞれの動作を行います。他の動作が行えない場合かつ −deny_incoming が指定されていない場合、後述の −target_address オプションに指定された通りに、このパケットはローカルのマシン に配送されます。 −t | −target_address
address 対象アドレスは 255.255.255.255 に設定可能です。この場合、すべ ての新規入力パケットは、 −alias_address または −interface で 設定されるエイリアスアドレスへ行きます。 このオプションを使用しない場合、または引数 0.0.0.0 で呼ばれた 場合、すべての新規入力パケットはパケット中で指定されるアドレ スへ行きます。これにより、パケットの経路が可能な場合には、外 部のマシンが内部のマシンと直接通信可能になります。 −interface | −n
interface 指定された interface は、通常、 ‘‘公開された’’ (または ‘‘外 部’’ の) ネットワークインタフェースです。 −config | −f file alias_address 158.152.17.1 という行はエイリアスアドレスに 158.152.17.1 を指定します。設 定ファイル内では、引数を持たないオプションは yes か no を伴っ て指定されます。例えば、 log yes は −log と同じ意味になります。 後続する空白と空行は無視されます。 ‘#’ 記号は、行の残りがコメ ントである印です。 −reverse 出力トラフィックがローカルマシンにリダイレクトされ、 natd が 入力インタフェースで走行している (通常は出力インタフェースで 走行します) といった、透過プロキシを実行している状況で有用な 場合があります。 −proxy_only −proxy_rule −punch_fw basenumber から開始する最大 count 個のルールが使用され、ファ イアウォールに穴を開けます。すべてのルールに対する範囲は、起 動時にクリアされます。 −skinny_port port −log_ipfw_denied −pid_file | −P file NATD の実行 |
natd を走らせようとする前には以下の手順が必要となります: |
1. 自分のカーネルを以下のオプションを付けて構築します:
options IPFIREWALL 自分のカーネルを構築する方法については、ハンドブックに詳しい説明があ るのでそちらを参照してください。 |
2. あなたのマシンがゲートウェイとして働くようにします。これは/etc/rc.conf に gateway_enable=YES と指定するか、 sysctl 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 2 番目の行はあなたのインタフェースに依ります ( ‘ed0’ を適切に変更し てください)。 このファイアウォールの設定では、ローカルネットワーク上の誰もがソース アドレスをあなたのホストに偽装可能であることを認識してください。ロー カルネットワーク上に他にホストがある場合、信頼するホストへ/からのト ラフィックのみを許可するファイアウォールルールを作成することを強く勧 めます。 本物のファイアウォールルールを指定する場合、スクリプトの先頭で上記の 2 行目を指定すると良いでしょう。そうすることによって、ファイアウォー ルにより排除されてしまう前に、 natd がすべてのパケットを見ることがで きるようになります。 natd の変換後、転換を生じさせたルール番号の次のルール番号から、パ ケットはファイアウォールに再入します (同じ番号に複数のルールがある場 合には、次のルールからにはなりません)。 |
2. /etc/rc.conf で firewall_enable=YES と設定し、ファイアウォールを作動させます。これはシステムの起動時のスクリプトに /etc/rc.firewall スクリプトを実行するように伝えます。今すぐ再起動したくない場合には、コンソールから手で実行してください。バックグラウンドで実行させるのでない限り、これは決して仮想セッションから行ってはいけません。もし実行させてしまうと、flush が行われた後にあなたは締め出されてしまい、すべてのアクセスを永久に遮断するためにこの地点で /etc/rc.firewall の実行は止まってしまいます。スクリプトをバックグラウンドで実行すれば、この災害を避けることができます。
関連項目 |
libalias(3), divert(4), protocols(5), rc.conf(5), services(5), syslog.conf(5), ipfw(8), ppp(8) |
作者
このプログラムは、多くの人々の細切れの努力の結果です: Archie Cobbs 〈archie@FreeBSD.org〉 (divert
ソケット) FreeBSD 10.0 February 28, 2003 FreeBSD 10.0 |