Next Previous Contents

6. Netfilter Hookok a Tunnel-fejlesztõknek

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):

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:

  1. FORWARD hook: hagyományos csomag (eth0 -> tunl0)
  2. LOCAL_OUT hook: becsomagolt csomag (->eth1).

És a válasz csomag számára:

  1. LOCAL_IN hook: becsomagolt válasz csomag (eth1->)
  2. FORWARD hook: becsomagolt csomag (eth1 -> eth0).


Next Previous Contents