(PPP リンク上で NAT が必要な場合、ほとんどの 機能を提供し、同じ libalias(3) ライブラリを使用する、 ppp(8) の -nat オプションが提供されています)。
ユーティリティは通常、デーモンとしてバックグラウンドで実行します。 はマシンに入ってくるパケット、またはマシンから出て行くパケットを 生 (raw) のまま扱い、場合により IP パケットストリームに 再び送り出す前に手を加えます。
natd は他のホストへ向かうすべてのパケットについて、発信元 IP アドレスを 現在のマシンのものにする、という変換を行います。 このように変換された各パケットについて、変換内容を記録するために 内部テーブルエントリが作成されます。 発信元ポート番号も、パケットに適用したテーブルエントリを示すように 変更されます。 現在のホストの、対象となる IP アドレスを使ったパケットが受信されると、 この内部テーブルがチェックされます。 エントリが見つかると、パケットに正しい対象 IP アドレスとポート番号を 入れるのに利用されます。
以下のコマンドラインオプションが利用できます。
本オプションを使用しないと、このようなパケットは下記の -target_address ルールを使用して変更され、内部変換テーブルにエントリが作成されます。
引数 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 にというように
publicIP が指定されないと、デフォルトのエイリアスアドレスが使用されます。 remoteIP が指定されると、 remoteIP から/へ向けて到着したパケットのみがルールにマッチします。
redirect_address 10.0.0.8 0.0.0.0
上記のコマンドは入ってくすべてのパケットをマシン 10.0.0.8 に リダイレクトします。
下記のように、いくつかのアドレスエイリアスが同一の公式アドレスを 示すように指定すると、
redirect_address 192.168.0.2 public_addr redirect_address 192.168.0.3 public_addr redirect_address 192.168.0.4 public_addr
入ってくるパケットの流れは最後に変換されたローカルアドレス (192.168.0.4) に向けられますが、最初の二つのアドレスへの出力 パケットの流れは、指定された public_addr からのエイリアスのままになります。
tcp www1:http,www2:http,www3:http www:http
は、ホスト www への入力 HTTP 要求を、
出力される 全データのソースアドレスは address に書換えられます。 到着する 全データは、 既にエイリアスされた外向け接続にマッチするかどうかチェックされます。 マッチする場合、パケットはそれぞれ変換されます。 マッチしない場合、 -redirect_port -redirect_proto -redirect_address の割り当てをチェックしそれぞれの動作を行います。 他の動作が行えない場合かつ -deny_incoming が指定されていない場合、後述の -target_address オプションに指定された通りに、 このパケットはローカルのマシンに配送されます。
対象アドレスは 255.255.255.255 に設定可能です。 この場合、すべての新規入力パケットは、 -alias_address または -interface で設定されるエイリアスアドレスへ行きます。
このオプションを使用しない場合、または引数 0.0.0.0 で呼ばれた場合、 すべての新規入力パケットはパケット中で指定されるアドレスへ行きます。 これにより、パケットの経路が可能な場合には、 外部のマシンが内部のマシンと直接通信可能になります。
指定された interface は、通常、 ``公開された'' (または ``外部'' の) ネットワークインタフェースです。
alias_address 158.152.17.1
という行はエイリアスアドレスに 158.152.17.1 を指定します。 設定ファイル内では、引数を持たないオプションは yes か no を伴って指定されます。例えば、
log yes
は -log と同じ意味になります。
後続する空白と空行は無視されます。 `#' 記号は、行の残りがコメントである印です。
出力トラフィックがローカルマシンにリダイレクトされ、 が入力インタフェースで走行している (通常は出力インタフェースで走行します) といった、透過プロキシを実行している状況で有用な場合があります。
basenumber から開始する最大 count 個のルールが使用され、ファイアウォールに穴を開けます。 すべてのルールに対する範囲は、起動時にクリアされます。
options IPFIREWALL options IPDIVERT
自分のカーネルを構築する方法については、ハンドブックに詳しい説明が あるのでそちらを参照してください。
gateway_enable=YES
と指定するか、
"sysctl net.inet.ip.forwarding=1"
というコマンドを用いることで機能するようになります。
の実行は至って簡単です。
natd -interface ed0
という行でほとんどの場合充分です (正しいインタフェース名に置き換えて ください)。 ブート時に自動的に開始するように設定する方法については rc.conf5 を参照してください。 が起動されたら、パケットの流れの方向が natd の方に変わる (divert される) ようにしなければなりません:
/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' を適切に変更してください)。
このファイアウォールの設定では、 ローカルネットワーク上の誰もがソースアドレスをあなたのホストに 偽装可能であることを認識してください。 ローカルネットワーク上に他にホストがある場合、 信頼するホストへ/からのトラフィックのみを許可する ファイアウォールルールを作成することを 強く勧めます。
本物のファイアウォールルールを指定する場合、スクリプトの先頭で上記の 2 行目を 指定すると良いでしょう。 そうすることによって、ファイアウォールにより排除されてしまう前に、 がすべてのパケットを見ることができるようになります。
natd の変換後、転換を生じさせたルール番号の次のルール番号から、 パケットはファイアウォールに再入します (同じ番号に複数のルールがある場合には、次のルールからにはなりません)。
firewall_enable=YES
と設定し、ファイアウォールを作動させます。これはシステムの起動時のスクリプトに /etc/rc.firewall スクリプトを実行するように伝えます。 今すぐ再起動したくない場合には、コンソールから手で実行してください。 バックグラウンドで実行させるのでない限り、これは決して仮想セッションから 行ってはいけません。もし実行させてしまうと、flush が行われた後に あなたは締め出されてしまい、すべてのアクセスを永久に遮断するために この地点で /etc/rc.firewall の実行は止まってしまいます。スクリプトをバックグラウンドで実行すれば、 この災害を避けることができます。
An Archie Cobbs Aq archie@FreeBSD.org (divert ソケット) An Charles Mott Aq cm@linktel.net (パケットエイリアス) An Eivind Eklund Aq perhaps@yes.no (IRC サポートとその他の追加) An Ari Suutari Aq suutari@iki.fi (natd) An Dru Nelson Aq dnelson@redwoodsoft.com (初期の PPTP サポート) An Brian Somers Aq brian@awfulhak.org (まとめ役) An Ruslan Ermilov Aq ru@FreeBSD.org (natd とパケットエイリアシングと糊)