A Tunnel (vagy encapsulation) meghajtók íróinak két egyszerû szabályt kell követniük a 2.4-es kernelnél (a kernelben megtalálható meghajtók írásaokr, mit pl. a net/ipv4/ipip.c):
Másképpen: a NAT kód a régi kapcsolatkövetési információt fogja használni a csomag megváltoztatásához, aminek nem a várt mûködés lesz a következménye!
Másképpen: a felhaszáló elvárásával ellentétben nem fogja tudni szûrni a tunneleket!
Az általános eljárás az elsõ problémára a következõhöz hasonló kód beillesztése mielõtt be- vagy kicsomagolnád a csomagot:
/* Tell the netfilter framework that this packet is not the
same as the one before! */
#ifdef CONFIG_NETFILTER
nf_conntrack_put(skb->nfct);
skb->nfct = NULL;
#ifdef CONFIG_NETFILTER_DEBUG
skb->nf_debug = 0;
#endif
#endif
Általában a második pont teljesülése érdekében meg kell találnod azt a pontot, ahol az újonnan elõállított csomag belép az "ip_send()"-be, és a következõvel lecserélni:
/* Send "new" packet from local host */
NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, rt->u.dst.dev, ip_send);
ezeket a szabályokat betartva az lesz az eredmény, hogy az a szamély, aki csomagszûrési szabályokat szeretne felvenni a tunnel-állomáson, a következõhöz hasonló csomag-útvonalat fog látni a tunnelezett csomag számára:
És a válasz csomag számára: