IPNAT(4)

명칭
ipnat - 네트워크 어드레스 변환 (NAT)의 커널 인터페이스

서식
#include <netinet/ip_compat.h>
#include <netinet/ip_fil.h>
#include <netinet/ip_proxy.h>
#include <netinet/ip_nat.h>

IOCTL

NAT 리스트에 룰을 추가 및 삭제하기 위해서, 2 개의 `기본적' ioctl 가 제공되고 있습니다. ioctl 는 아래와 같이 불립니다:

	ioctl(fd, SIOCADNAT, struct ipnat *)
	ioctl(fd, SIOCRMNAT, struct ipnat *)

ipf(4) 과는 달리, 커널의 NAT 인터페이스에 의해 서포트되고 있는 리스트는 1 개 뿐입니다. 동작중의 리스트와 교환 가능한 비동작중의 리스트의 기능은, 현재는 서포트되고 있지 않습니다. 상기의 ioctl 는, 루팅 ioctl 로서 행동하도록(듯이) 실장되고 있으므로, 각종의 루팅 ioctl 에 이용하는 것과 같은 룰이나 파일 기술자가 사용됩니다. 대부분의 경우 fd 는, 그 모듈에 관련한다 디바이스 (예를 들면 /dev/ipl)의 파일 기술자인 것이 필요합니다.

NAT 인터페이스로 이용되는 구조체는 이하와 같습니다:

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 MAP 되고 있는, 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

in_redir 로 인식되는 값:

#define NAT_MAP         0
#define NAT_REDIRECT    1

NAT 통계

MAP 된 패킷의 수나 송수신 된 패킷의 수 에 관한 통계가 채취됩니다. 또, NAT 테이블에 신규의 엔트리가 추가되거나 (기한 마감을 위해서(때문에)) 엔트리가 삭제된 회수나 현재의 NAT 테이블의 사용량에 관한 통계가 채취됩니다.

커널 내부에 있는 NAT 테이블에의 포인터와 SIOCADNAT ioctl 로 조립할 수 있었던 내부의 NAT 리스트의 선두에의 포인터를 얻을 수 있습니다.

이 테이블 자신은, NAT_SIZE (디폴트에서는 367)의 크기의 해시 테이블입니다.

통계를 취득하려면 , SIOCGNATS ioctl 를 이용해, 적절한 구조체를 이하와 같이 참조로 건네줄 필요가 있습니다:

	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;

버그
필터 룰의 추가나 삭제가 좀 더 유연하게 할 수 있으면 좋을 것입니다.

관련 파일
/dev/ipnat

관련 항목
ipf(4), ipnat(5), ipf(8), ipnat(8), ipfstat(8)