I'm very pleased to announce the release of our new website and documentation using the new toolchain with Hugo and AsciiDoctor. To get more information about the new toolchain please read the FreeBSD Documentation Project Primer[1], Hugo docs[2] and AsciiDoctor docs[3]. Acknowledgment: Benedict Reuschling <bcr@> Glen Barber <gjb@> Hiroki Sato <hrs@> Li-Wen Hsu <lwhsu@> Sean Chittenden <seanc@> The FreeBSD Foundation [1] https://docs.FreeBSD.org/en/books/fdp-primer/ [2] https://gohugo.io/documentation/ [3] https://docs.asciidoctor.org/home/ Approved by: doceng, core
106 lines
2.8 KiB
Groff
106 lines
2.8 KiB
Groff
.\" $FreeBSD$
|
|
.TH IPNAT 4
|
|
.SH 名称
|
|
ipnat \- ネットワークアドレス変換 (NAT) のカーネルインタフェース
|
|
.SH 書式
|
|
#include <netinet/ip_compat.h>
|
|
.br
|
|
#include <netinet/ip_fil.h>
|
|
.br
|
|
#include <netinet/ip_proxy.h>
|
|
.br
|
|
#include <netinet/ip_nat.h>
|
|
.SH IOCTL
|
|
.PP
|
|
NAT リストにルールを追加および削除するために、
|
|
2 つの `基本的' な ioctl が提供されています。
|
|
ioctl は下記のように呼ばれます:
|
|
.LP
|
|
.nf
|
|
ioctl(fd, SIOCADNAT, struct ipnat *)
|
|
ioctl(fd, SIOCRMNAT, struct ipnat *)
|
|
.fi
|
|
.PP
|
|
\fBipf(4)\fP とは異なり、カーネルの NAT インタフェースによって
|
|
サポートされているリストは 1 つだけです。
|
|
動作中のリストと交換可能な非動作中のリストの機能は、
|
|
現在はサポートされていません。
|
|
|
|
上記の ioctl は、ルーティング ioctl として振舞うように
|
|
実装されているので、各種のルーティング ioctl に用いるものと
|
|
同じルールやファイル記述子が使用されます。
|
|
たいていの場合 fd は、そのモジュールに関連する
|
|
デバイス (例えば /dev/ipl) のファイル記述子であることが必要です。
|
|
.LP
|
|
.PP
|
|
NAT インタフェースで用いられる構造体は以下の通りです:
|
|
.LP
|
|
.nf
|
|
typedef struct ipnat {
|
|
struct ipnat *in_next;
|
|
void *in_ifp;
|
|
u_short in_flags;
|
|
u_short in_pnext;
|
|
u_short in_port[2];
|
|
struct in_addr in_in[2];
|
|
struct in_addr in_out[2];
|
|
struct in_addr in_nextip;
|
|
int in_space;
|
|
int in_redir; /* 0 マップされている、1 リダイレクトは困難 */
|
|
char in_ifname[IFNAMSIZ];
|
|
} ipnat_t;
|
|
|
|
#define in_pmin in_port[0] /* 静的なリダイレクトポートも保持 */
|
|
#define in_pmax in_port[1]
|
|
#define in_nip in_nextip.s_addr
|
|
#define in_inip in_in[0].s_addr
|
|
#define in_inmsk in_in[1].s_addr
|
|
#define in_outip in_out[0].s_addr
|
|
#define in_outmsk in_out[1].s_addr
|
|
|
|
.fi
|
|
.PP
|
|
in_redir で認識される値:
|
|
.LP
|
|
.nf
|
|
#define NAT_MAP 0
|
|
#define NAT_REDIRECT 1
|
|
.fi
|
|
.PP
|
|
.LP
|
|
\fBNAT 統計\fP
|
|
.PP
|
|
マップされたパケットの数や送受信されたパケットの数
|
|
に関する統計が採取されます。
|
|
また、NAT テーブルに新規のエントリが追加されたり、
|
|
(期限切れのために) エントリが削除された回数や現在の NAT テーブルの
|
|
使用量に関する統計が採取されます。
|
|
.PP
|
|
カーネル内部にある NAT テーブルへのポインタと、
|
|
\fBSIOCADNAT\fP ioctl で組み立てられた内部の NAT リストの
|
|
先頭へのポインタが得られます。
|
|
.PP
|
|
このテーブル自身は、NAT_SIZE (デフォルトでは 367) の大きさの
|
|
ハッシュテーブルです。
|
|
.PP
|
|
統計を取得するには、\fBSIOCGNATS\fP ioctl を用いて、
|
|
適切な構造体を以下のように参照で渡す必要があります:
|
|
.PP
|
|
.nf
|
|
ioctl(fd, SIOCGNATS, struct natstat *)
|
|
|
|
typedef struct natstat {
|
|
u_long ns_mapped[2];
|
|
u_long ns_added;
|
|
u_long ns_expire;
|
|
u_long ns_inuse;
|
|
nat_t ***ns_table;
|
|
ipnat_t *ns_list;
|
|
} natstat_t;
|
|
.fi
|
|
.SH バグ
|
|
フィルタルールの追加や削除がもっと柔軟にできれば良いでしょう。
|
|
.SH 関連ファイル
|
|
/dev/ipnat
|
|
.SH 関連項目
|
|
ipf(4), ipnat(5), ipf(8), ipnat(8), ipfstat(8)
|