IPNAT(4) Fichiers spéciaux de FreeBSD
NOM
ipnat - Interface noyau de la traduction d'adresses réseau (NAT)
SYNOPSIS
#include <netinet/ip_compat.h> #include <netinet/ip_fil.h> #include <netinet/ip_proxy.h> #include <netinet/ip_nat.h>
#include <netinet/ip_compat.h>
#include <netinet/ip_fil.h>
#include <netinet/ip_proxy.h>
#include <netinet/ip_nat.h>
IOCTLS
Pour ajouter et retirer des règles à la liste de NAT, deux ioctls de base sont fournis. Les appels sont : ioctl(fd, SIOCADNAT, struct ipnat *) ioctl(fd, SIOCRMNAT, struct ipnat *) Contrairement à ipf(4), une seule liste est gérée par l'interface NAT du noyau. Il n'existe encore aucun support d'une liste inactive vers laquelle commuter. Ces ioctls sont implémentés dans le routage. Ainsi, les mêmes règles et descripteur de fichiers sont employés pour divers routages ioctls. Principalement, le fd doit être celui des périfériques qui correspond au module (par exemple /dev/ipl). La structure utilisée avec l'interface NAT est la suivante : 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; /* 1 en cas de redirection, 0 pour un "map" char in_ifname[IFNAMSIZ]; } ipnat_t;
Pour ajouter et retirer des règles à la liste de NAT, deux ioctls de base sont fournis. Les appels sont :
ioctl(fd, SIOCADNAT, struct ipnat *) ioctl(fd, SIOCRMNAT, struct ipnat *)
ioctl(fd, SIOCADNAT, struct ipnat *)
ioctl(fd, SIOCRMNAT, struct ipnat *)
Contrairement à ipf(4), une seule liste est gérée par l'interface NAT du noyau. Il n'existe encore aucun support d'une liste inactive vers laquelle commuter.
Ces ioctls sont implémentés dans le routage. Ainsi, les mêmes règles et descripteur de fichiers sont employés pour divers routages ioctls. Principalement, le fd doit être celui des périfériques qui correspond au module (par exemple /dev/ipl).
La structure utilisée avec l'interface NAT est la suivante :
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; /* 1 en cas de redirection, 0 pour un "map" char in_ifname[IFNAMSIZ]; } ipnat_t;
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; /* 1 en cas de redirection, 0 pour un "map" char in_ifname[IFNAMSIZ];
} ipnat_t;
#define in_pmin in_port[0] /* Contient aussi le port de redirection statique #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 Les valeurs reconnues de in_redir sont : #define NAT_MAP 0 #define NAT_REDIRECT 1 NAT statistics : Statistiques sur le nombre de paquets traduits, entrants ou sortants, le nombre de fois où des règles ont été ajoutées ou retirées (jusqu'à expiration) à la table NAT et le taux d'utilisation de ces tables. Pointeurs vers la table NAT interne du noyau aussi bien que vers le haut de la liste NAT interne construite à l'aide de l'ioctls SIOCADNAT. La table elle-même est une table segmentée de taille NAT_SIZE (367 par défaut). Pour effectuer les statistiques, l'ioctls SIOCGNATS doit être utilisé à l'aide de la structure appropriée, comme dans : 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;
#define in_pmin in_port[0] /* Contient aussi le port de redirection statique #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
Les valeurs reconnues de in_redir sont :
#define NAT_MAP 0 #define NAT_REDIRECT 1
NAT statistics : Statistiques sur le nombre de paquets traduits, entrants ou sortants, le nombre de fois où des règles ont été ajoutées ou retirées (jusqu'à expiration) à la table NAT et le taux d'utilisation de ces tables.
Pointeurs vers la table NAT interne du noyau aussi bien que vers le haut de la liste NAT interne construite à l'aide de l'ioctls SIOCADNAT. La table elle-même est une table segmentée de taille NAT_SIZE (367 par défaut).
Pour effectuer les statistiques, l'ioctls SIOCGNATS doit être utilisé à l'aide de la structure appropriée, comme dans :
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;
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;
BUGS
Il serait appréciable d'avoir plus de flexibilité dans l'ajout et le retrait des gègles de filtrage.
FICHIERS
/dev/ipnat
VOIR AUSSI
ipf(4), ipnat(5), ipf(8), ipnat(8), ipfstat(8)
Version française le 31 juillet 2000 par Guillain SEUILLOT <Guillain@lycosmail.com>