aboutsummaryrefslogtreecommitdiff
path: root/ja_JP.eucJP/man/man8/natd.8
blob: 14a907cd66fb90455181809ea0b7278b98b733e7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
.\" manual page [] for natd 1.4
.\" %Id: natd.8,v 1.15 1998/07/15 03:32:45 jkoshy Exp $%
.\" jpman %Id%
.Dd 15 April 1997
.Os FreeBSD
.Dt NATD 8
.Sh 名称
.Nm natd
.Nd
ネットワークアドレス変換デーモン
.Sh 書式
.Nm
.Op Fl ldsmvu
.Op Fl permanent_link
.Op Fl dynamic
.Op Fl i Ar inport
.Op Fl o Ar outport
.Op Fl p Ar port
.Op Fl a Ar address
.Op Fl n Ar interface
.Op Fl f Ar configfile

.Nm
.Op Fl log
.Op Fl deny_incoming
.Op Fl use_sockets
.Op Fl same_ports
.Op Fl verbose
.Op Fl unregistered_only
.Op Fl permanent_link
.Op Fl dynamic
.Op Fl inport Ar inport
.Op Fl outport Ar outport
.Op Fl port Ar port
.Op Fl alias_address Ar address
.Op Fl interface Ar interface
.Op Fl config Ar configfile
.Op Fl redirect_port Ar linkspec
.Op Fl redirect_address Ar localIP publicIP

.Sh 解説
このプログラムは、FreeBSD における 
.Xr divert 4
ソケットと共に用いることによって、ネットワークアドレスの変換を
行います。
コマンドラインオプションのほとんどは、1 文字の短縮形か、長い表記が
利用できます。
見る人がはっきりと理解しやすいように、長い表記を使うことが
推奨されています。

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

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

.Pp
以下のコマンドラインオプションが利用できます。
.Bl -tag -width Fl

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

.It Fl deny_incoming | d
現在の IP アドレスへ向かうパケットのうち、内部変換テーブルに
エントリの無いものを拒否します。

.It Fl use_sockets | s
FTP data コネクションや IRC DCC send コネクションを確立するのに
.Xr socket 2
を割り当てます。このオプションはよりシステムリソースを消費しますが、
ポート番号が衝突する場合でもコネクションが成功することを保証します。

.It Fl same_ports | m
出て行くパケットを変換する時に、できるだけポート番号を同じまま
保つようにします。このオプションにより、RPC のようなプロトコルが
うまく働く可能性があがります。ポート番号を維持することができない時には、
暗黙のうちに通常と同じ方法で変換されます。

.It Fl verbose | v
起動時に
.Xr fork 2
や
.Xr daemon 3
を呼び出しません。よって、制御端末から切り離されずに、標準出力に
すべてのパケット変換を表示します。このオプションはデバッグの目的に
のみ用いるべきです。

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

.It Fl redirect_port Ar linkspec
指定されたポートに入ってくるコネクションを別のホストとポートに
リダイレクトします。linkspec の書式は

  proto targetIP:targetPORT [aliasIP:]aliasPORT [remoteIP[:remotePORT]]

のようになります。proto は tcp もしくは udp 、 targetIP は希望する
( リダイレクト先 ) 対象 IP アドレス、targetPORT は希望する対象ポート番号、
aliasPORT は ( クライアントが ) 要求するポート番号、aliasIP は alias を
行うアドレスです。
remoteIP と remotePORT は、必要な場合により正確なコネクションを
指定するのに利用できます。
例えば、

.Ar tcp inside1:telnet 6666

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

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

  redirect_address 10.0.0.8 0.0.0.0

上記のコマンドは入ってくすべてのパケットをマシン 10.0.0.8 に
リダイレクトします。

下記のように、いくつかのアドレス alias が同一の公式アドレスを
示すように指定すると、

  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) に向けられますが、最初の二つのアドレスの出て行く
パケットの流れは指定された公式アドレスへの alias のままになります。

.It Fl permanent_link Ar linkspec
内部 alias テーブルに恒久的なエントリを作成します。linkspec の書式は

  proto targetIP:targetPORT sourceIP:sourcePORT aliasPORT

のようになります。proto は tcp もしくは udp 、 targetIP は希望する
( リダイレクト先 ) 対象 IP アドレス、 targetPORT は希望する対象
ポート番号、 sourceIP と sourcePORT は入ってくるパケットにマッチする
もの、aliasPORT は ( クライアントが ) 要求するポート番号、となります。
値 0 はワイルドカードとして扱われます。例えば、

.Ar tcp inside1:telnet outside1:0 6666

はマシン outside1 ( の任意のポート ) からこのマシンのポート 6666 に
向けられた tcp パケットが、マシン inside1 の telnet ポートに送られる
ことを示します。

新規に導入する場合は、代わりに redirect_port を使うようにしてください。

.It Fl dynamic
.Fl n
オプションや
.Fl interface
オプションが用いられると、
.Nm
は
指定された
.Ar interface
へルーティングする変換ソケットを監視します。
.\" (訳注) kuriyama@opt.phys.waseda.ac.jp (Nov 29 1997)
.\" 上の訳はどうも意味が通らない。原文は以下の通り。誰か直して。
.\" .Nm
.\" will monitor the routing socket for alterations to the
.\" .Ar interface
.\" passed.
.\" (訳注2) kuriyama@opt.phys.waseda.ac.jp (Jan 4 1998)
.\" ちょっと直してみたけどまだ不満。
インタフェースの IP アドレスが変化すると、
.Nm
は alias アドレスを動的に変更します。

.It Fl i | inport Ar inport
すべてのパケットをマシンに入ってくるものとして扱い、
.Ar inport
から読み込み、
.Ar inport
へ書き出します。

.It Fl o | outport Ar outport
すべてのパケットをマシンから出て行くものとして扱い、
.Ar outport
から読み込み、
.Ar outport
へ書き出します。

.It Fl p | port Ar port
.Xr divert 4
によって指定されたルールを用いてパケットを識別し、入ってくるパケットを
.Ar port
から読み、出て行くパケットを
.Ar port
へ書き出します。
.Ar port
が数字でない場合、関数
.Xr getservbyname 3
を用いて
.Pa /etc/services
データベースが検索されます。
このフラグが指定されない時には、デフォルトとして natd という名前の
divert ポートが用いられます。
.Pa /etc/services
データベースのエントリの例としては以下のようになります:

  natd   8668/divert  # Network Address Translation socket

より詳しい説明は、
.Xr services 5
を参照してください。

.It Fl a | alias_address Ar address
alias アドレスとして
.Ar address
を用います。このオプションが指定されない場合は、
.Fl n
オプションか
.Fl interface
オプションが指定されなければなりません。
指定されたアドレスは、
公開されたネットワークインタフェースに割当てられたアドレスである
必要があります。
.Pp
このアドレスのインタフェースを通って出る全データのソースアドレスは
.Ar address
に書換えられます。
外部からこのインタフェースに到着する全データは、
既に alias された外向け接続にマッチするかどうかチェックされます。
マッチする場合、パケットはそれぞれ変換されます。
マッチしない場合、
.Fl redirect_port
と
.Fl redirect_address
の割り当てをチェックしそれぞれの動作を行います。
他の動作が行えない場合かつ
.Fl deny_incoming
が指定されていない場合、
パケットに指定された通りに
パケットはローカルのマシンのポートに配送されます。
.It Fl n | interface Ar interface
alias アドレスを決めるのに、
.Ar interface
を用います。
.Ar interface
に関連づけられた IP アドレスが変化する可能性がある場合には、
.Fl dynamic
フラグも指定されるべきです。
.Pp
指定された
.Ar interface
は公開されたネットワークインタフェースである必要があります。

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

  alias_address 158.152.17.1

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

  log yes

は
.Fl log
と同じ意味になります。空行と '#' で始まる行は無視されます。

.El

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

.Bl -enum
.It
バージョン 2.2 かそれ以上の FreeBSD を手に入れる。これより前の
バージョンは
.Xr divert 4
ソケットをサポートしていません。

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

  options IPFIREWALL
  options IPDIVERT

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

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

  gateway_enable=YES

と指定するか、

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

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

.It
.Fl n
フラグや
.Fl interface
フラグを使いたい場合は、そのインタフェースがすでに設定済みとなるように
します。例えば、
.Ar interface
として tun0 を指定しようとし、そのインタフェースで
.Xr ppp 8
を使っている場合には、
.Nm natd
を起動する前に
.Nm ppp
を起動するようにしなければなりません。

.It
.Pa /etc/services
にエントリ:

  natd		 8668/divert  # Network Address Translation socket

を作成します。これは
.Fl p
フラグや
.Fl port
フラグのデフォルトの値となります。

.El
.Pp
.Nm
の実行は至って簡単です。

  natd -interface ed0

という行でほとんどの場合充分です(正しいインタフェース名に置き換えて
ください)。
.Nm
が起動されたら、パケットの流れの方向が natd の方に変わる 
(divert される) ようにしなければなりません:

.Bl -enum
.It
.Pa /etc/rc.firewall
スクリプトをうまく調整する必要があります。防火壁 (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 を適切に
変更してください)。
また、前項のように
.Pa /etc/services
に natd のエントリが入るように更新されていると仮定します。
本物の防火壁ルールを指定する場合、スクリプトの先頭で上記の 2 行目を
指定すると良いでしょう。
そうすることによって、防火壁により排除されてしまう前に、
.Nm
がすべてのパケットを見ることができるようになります。
すべての divert ルールを除き、
.Nm
により変換された各パケットには再び防火壁のルールが適用されます。

.It
.Pa /etc/rc.conf
で

  firewall_enable=YES

と設定し、防火壁を作動させます。これはシステムの起動時のスクリプトに
.Pa /etc/rc.firewall
スクリプトを実行するように伝えます。
今すぐ再起動したくない場合には、コンソールから手で実行してください。
バックグラウンドで実行させるのでない限り、これは決して仮想セッションから
行ってはいけません。もし実行させてしまうと、flush が行われた後に
あなたは締め出されてしまい、すべてのアクセスを永久に遮断するために
この地点で
.Pa /etc/rc.firewall
の実行は止まってしまいます。スクリプトをバックグラウンドで実行すれば、
この災害を避けることができます。

.El

.Sh 関連項目
.Xr getservbyname 2 ,
.Xr socket 2 ,
.Xr divert 4 ,
.Xr services 5 ,
.Xr ipfw 8

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

.An Archie Cobbs Aq archie@whistle.com
(divert ソケット)
.An Charles Mott Aq cmott@srv.net
(パケットエイリアス)
.An Eivind Eklund Aq perhaps@yes.no
(IRC サポートとその他の追加)
.An Ari Suutari Aq suutari@iki.fi
(natd)
.An Brian Somers Aq brian@awfulhak.org
(まとめ役)