jpman project specific RCS keyword (jpman %Id) is obsolete, after manual entries are stored in freefall CVS repository. This old Id is useless and more worse it confuses users and bug reporters. So, this old Id is removed. Submitted by:jpman project <man-jp@jp.FreeBSD.org>
		
			
				
	
	
		
			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)
 |