3,524 瀏覽數

IPV6 NFS

在還沒有開始 IPv6 NFS Server 前,先來看看 IPv6 的 IP Address 是怎麼運作的.

IPv6 的位址自動指派 (address auto-configuration) 主要可以區分為下列幾種

  • Stateless auto-configuration
  • Stateful auto-configuration using Router Advertisement(RA) Daemon (radvd)
  • Dynamic Host Configuration Protocol v6 (DHCPv6)

不過沒有 IPv6 的位址自動指派 (address auto-configuration) 環境,一般網卡在啟動時就會指派一組 IPV6 link-local address,而這 link-local address 是唯一的而且是依據網卡的 MAC Address 而有所變動

比如 :
MAC Address – 00:1A:64:22:04:83
link-local address – fe80::21a:64ff:fe22:483
IPV6 長度為 128bits 而 MAC 長度為 48bits 要怎麼轉換呢!!

首先 MAC Address 的第五位元組與第四位元組插入 FF:FE
原 MAC Address 第6位元組的第二個 bit 從原來的 “0″轉成 “1″,所以 00 -> 02
前面再填入 fe80:0000:0000:0000
fe80:0000:0000:0000:021a:64ff:fe22:0483
寫這麼多 0 一定會寫錯,所以有簡寫的規則,規則如下:

每 32Bit 如開頭之4bit表示為0,即可省略,若32Bit全為0,則可簡寫為0
若連續完整之32Bit段落皆為 0000,則可全省略,簡寫為::,但以一次為限

最後簡寫成為 : fe80::21a:64ff:fe22:483

這邊我有點偷懶直接使用 Link-local 當作 IPv6 的位置(不過有網友不推薦這樣的方式),主要實驗環境在 Ubuntu 14.04 Desktop ,預設是沒有安裝 NFS Server 與 showmount 等工具

# sudo apt-get install nfs-kernel-server
# sudo apt-get install nfs-common

NFS Server IPv6 addr: fe80::a00:27ff:fee1:66c1/64
Client IPv6 addr: fe80::a00:27ff:fe64:cc37/64
NFS_IPv601
先確定一下 ping (ping Link Local address 時需要在 ping6 IPv6 後面的參數加上 network_device_name) , iptables , ip route 這幾件事情都沒有問題.

# ping6 fe80::a00:27ff:fee1:66c1%eth0
# ping6 fe80::a00:27ff:fe64:cc37%eth0
# ip6tables -L
# ip -6 route show
  • NFS Server IPv6: inet6 addr: fe80::a00:27ff:fee1:66c1/64
    設定的方式也跟 IPv4 一樣,不過要改成 IPv6 的 IP 位址.

    # vi /etc/exports
    # /etc/exports: the access control list for filesystems which may be exported
    #               to NFS clients.  See exports(5).
    #
    # Example for NFSv2 and NFSv3:
    # /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
    #
    # Example for NFSv4:
    # /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
    # /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
    #
    /var/ftp/ fe80::a00:27ff:fee1:66c1/64(rw,async,no_root_squash,no_subtree_check)
    
    
    # /etc/init.d/nfs-kernel-server restart
     * Stopping NFS kernel daemon                                            [ OK ]
     * Unexporting directories for NFS kernel daemon...                      [ OK ]
     * Exporting directories for NFS kernel daemon...                        [ OK ]
     * Starting NFS kernel daemon    
    

    fe80::a00:27ff:fee1:66c1/64 Network ID為64bits ,只要是 fe80:0000:0000:0000 開頭的 Clients 都可以使用.

  • Client IPv6: inet6 addr: fe80::a00:27ff:fe64:cc37/64
    要掛載的方式也一樣,不過要改成 IPv6 的 IP 位址

    # showmount -e fe80::a00:27ff:fee1:66c1
    Export list for fe80::a00:27ff:fee1:66c1:
    /var/ftp fe80::a00:27ff:fee1:66c1/64
    # mount -t nfs [fe80::a00:27ff:fee1:66c1]:/var/ftp /mnt
    mount.nfs: mount system call failed
    # mount -t nfs4 [fe80::a00:27ff:fee1:66c1]:/var/ftp /mnt
    mount.nfs4: mount system call failed
    # mount -t nfs4 '[fe80::a00:27ff:fee1:66c1]':/var/ftp /mnt
    mount.nfs4: mount system call failed
    

    無解,不知道為什麼不行.

    網友 Ray 說建議不要用 link-local address,如果要用的話後面要帶 interface name ,就可以了.

    #mount -t nfs [fe80::a00:27ff:fee1:66c1%eth0]:/var/ftp /mnt
    

3 個網友的想法 “IPV6 NFS

  1. 建議不要用 link-local address
    如果要用的話後面要帶 interface name
    e.g. #mount -t nfs [fe80::a00:27ff:fee1:66c1%eth0]:/var/ftp /mnt

  2. 自動參照通知: NFS – Benjr.tw

發表迴響