Linux için Gezici IPv6

Helsinki Teknoloji Üniversitesinin MIPL projesi Linux için güncel tek Gezici IPv6 uygulamasıdır. Desteklediği son çekirdek 2.6.15'dir ve RFC3775 ile uyumludur Makaleler, yazılımlar ya da e-posta arşivleri için http://www.mobile-ipv6.org/ adresini ziyaret edebilirsiniz.

Uygulama çekirdeğin yamanmasını ve kullanıcı tarafı programlarını içermektedir.

Çekirdeğin Yamanması

Uyarı

Çekirdeğe yama yapılması ve yeniden derlenmesi kolayca sisteminizi açılamaz hale getirebilir. Eğer daha önce bunu yapmmışsanız Linux Çekirdek NASIL belgesini okumanızı öneririm.

MIPL MIPv6 gerçekleştirimi çekirdeğin yamanmasını gerektirir. Bu gerçenim çekirdeğin IPv6 yığıtını (stack) değiştirdiğinden çekirdeğin yeniden derlenmesi gerekir. Kurulum süreci iyi belgelendirilmiş olmasına rağmen burada özet olarak adım adım anlatacağım.

Gezici Düğüm'ün (MN) ve Ev Yetkilisi'nin (HA) çekirdeklerinin yamalanması gerekir ama aynı çekirdek parametlerelerini kullanmaları gerekmez. Ayrıntılar aşağıda verilmektedir.

  1. Son Linux MIPv6 kaynak kodunu http://www.mobile-ipv6.org/ adresinden indirin. Bu belge yazılırken son sürüm: mipv6-2.0-v2.6.15 idi. Son dört rakam yamanın uygulanacağı çekirdeğin sürümünü göstermektedir:

    # cd /usr/local/src
    # http://mobile-ipv6.org/download/mipv6-2.0-v2.6.15.tar.gz
    # tar zxfv mipv6-1.0-v2.4.22.tar.gz
    

  2. Linux çekirdeğinin uygun sürümünü from ftp://ftp.kernel.org adresinden indirin ve açın:

    # cd /usr/src
    # wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.15.tar.bz2
    # tar jxvf linux-2.6.15.tar.bz2
    # ln -s linux-2.6.15 linux
    # cd linux
    

  3. MIPv6 yamasını uygulayın:

    # zcat /usr/local/src/mipv6-2.0.1-linux-2.6.15.patch.gz | patch -p1 --dry-run
    

    Uyarı

    Eğer hatalar ile karşılaşırsanız devam etmeden önce yukarıdaki adımı dikkatle tekrarlayın.

    --dry-run seçeneği yamayı uygulamaz, yamanın düzgün yapılıp yapılamayacağını anlamanızı sağlar. Herşey yolunda giderse yamayı uygulayın:

    # zcat /usr/local/src/mipv6-2.0.1-linux-2.6.15.patch.gz | patch -p1
    

  4. Artık çekirdeğiniz yapılandırma için hazır. Tercih ettiğiniz make *config komutunu çalıştırın. MIPv6 seçenekleri "Networking Options" bölümünde yer alacaktır. Düğümün Gezici Düğüm veya Ev Yetkilisi olmasına ve IPSec kullanmak isteyip istemediğinize göre .config dosyasındaki seçenekler farklılık gösterecektir.

    Aşağıdaki seçenekler iki durumda da bulunmalıdır:

    CONFIG_EXPERIMENTAL=y
    CONFIG_SYSVIPC=y
    CONFIG_PROC_FS=y
    CONFIG_NET=y
    CONFIG_INET=y 
    CONFIG_IPV6=y
    CONFIG_IPV6_MIP6=y
    CONFIG_XFRM=y
    CONFIG_XFRM_USER=y
    CONFIG_XFRM_ENHANCEMENT=y
    CONFIG_IPV6_TUNNEL=y
    CONFIG_IPV6_ADVANCED_ROUTER=y
    CONFIG_IPV6_MULTIPLE_TABLES=y

    Gezici Düğüm için aşağıdakiler de bulunmalıdır:

    CONFIG_IPV6_SUBTREES=y
    CONFIG_ARPD=y

    IPSec'i de aktif etmek istediğimizden aşağıdakileri de ekliyoruz:

    CONFIG_INET6_ESP=y
    CONFIG_NET_KEY=y
    CONFIG_NET_KEY_MIGRATE=y

    Uygun tüm seçenekleri etkinleştirdiğinizden emin olmak için MIPL ile birlikte gelen chkconf_kernel.sh kabuk betiğini çalıştırabilirsiniz. Eğer betik eksik seçenekler raporlarsa devam etmeden önce onları düzeltin.

    # ./chkconf_kernel.sh  /usr/src/linux
    
    Checking kernel configuration...
    Using /usr/src/linux/.config
        
    All kernel options are as they should.

  5. Son adımda çekirdeği derleyin ve kurun.

    İpucu

    Bu çekirdeği diğerlerinden kolayca ayırmak için /usr/src/linux/Makefile dosyasındaki EXTRAVERSION değişkenine -MIPv6-1 değerini atayabilirsiniz.

Çekirdeğin yamanması, derlenmesi ve kurulması ile ilgili detaylı bilgiyi Linux Çekirdek NASIL belgesinde bulabilirsiniz.

Kullanıcı araçları

Modülün düzgün çalışması için mipdiag aracı, yapılandırma dosyaları ve başlatma betikleri yüklenmelidir:

# cd /usr/local/src
# wget http://mobile-ipv6.org/software/download/mipv6-2.0.1.tar.gz
# tar zxfv mipv6-2.0.1.tar.gz
# cd mipv6-2.0.1

Kaynak kodu yapılandırıp, derleyip yüklemelisiniz. Yapılandırma sırasında --enable-vt seçeneğini eklediğimize dikkat edin. Bu seçenek gerekli olmamakla birlikte 7777 nolu portu dinleyen bir sanal terminale izin vererek yararlı bilgiler almamıza yardımcı olacaktır.

# CPPFLAGS=-I/usr/src/linux/include ./configure --enable-vt
# make
# make install

Başlatma Betikleri

Belgelerde extra/ dizini altında init (başlangıç) betikleri olduğu belirtiliyor olsa da ben sadece bir kaç örnek yapılandırma dosyası bulabildim. Aşağıda Debian ve Ubuntu için bir init betiği bulunuyor ama küçük değişikliklerle diğer dağıtımlarda da çalışabilecek hale getirilebilir.

Bütün init betikleri /etc/init.d dizininde bulunur ve uygun runlevel'a (/etc/rcX.d) sembolik linkle bağlanmışlardır.

    #!/bin/sh
    #
    # mip6d:       Starts the Mobile IPv6 Daemon
    #   
    # description: This is a daemon which provide IPv6 Mobility
    #              support (RFC3775). Init script for Debian and Ubuntu.
    #   
    # (C) GNU GPL Lars Strand <lars strand at linpro no>
    #
    
    PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin
    DAEMON=/usr/local/sbin/mip6d
    DESC=mip6d
    CONFIG=/etc/mip6d.conf
    OPTIONS="-d 0 -c $CONFIG"
    
    set -e 
    
    # Check for IPv6 support in kernel
    if [ ! -e /proc/sys/net/ipv6 ]; then
      echo "IPv6 support must be enabled in the kernel for $DESC to work."
      exit 1
    fi
    
    # Can we fint the mip6d?
    if [ ! -x $DAEMON ]; then
        echo "Unable to find $DAEMON."
        exit 1
    fi
    
    chkconfig() {
        if [ ! -e $CONFIG -o ! -s $CONFIG ]; then
            echo ""
            echo "ERROR: $CONFIG does not exist or is empty." 
            echo "       See mip6d.conf(5) for configuration file syntax and example"
            echo "       configuration. $DESC will *not* be started."
            echo ""
            exit 1
        fi
    }

    # See how we were called.
    case "$1" in
        start)
            echo -n "Starting $DESC..."
            chkconfig
            if ! start-stop-daemon --oknodo --start --exec $DAEMON -- $OPTIONS; then
                echo "failed." && exit 1 
            fi
            echo " done."
            ;;
         stop)
            echo -n "Stopping $DESC..."
            start-stop-daemon --oknodo --stop --exec $DAEMON
            echo " done."
            ;;
         restart)
            chkconfig
            echo -n "Restarting $DESC..."
            start-stop-daemon --oknodo --stop --exec $DAEMON
            sleep 1
            start-stop-daemon --oknodo --start --exec $DAEMON -- $OPTIONS
            echo " done."
            ;;
         *)
            echo "Usage: $0 {start|stop|restart}" >&2
            exit 1
            ;;
    esac
    
    exit 0