Linux, 工作, 生活, 家人

Gentoo, Linux, Network

[IPv6] 使用 Gentoo Linux 建置 IPv6 Network.

5/30 是個值得記念的日子, 我住的地方終於可以大聲說 IPv6 Network Ready.
今年是 2007 年, 離 APNIC 正式發放 IPv6 Address 也快十年了.
終於可以連上 IPv6 網路了.

軟體和文件其實很多, 不過除了 IPv6 和 IPv4 的習慣不一樣, 架構也不一樣
在使用上也會有很大的差異.
而目前除了實驗性計劃外, 在家能連上 IPv6 的機會其實不多,
看來台灣要走 IPv6 的路還很長, 畢竟, 你身邊有多少人在用 IPv6 呢?

剛好剛剛整完 IPv6 ,籍這樣的機會, 這邊就順便介紹一下, 怎麼樣讓你家 ADSL 升級 IPv6 Ready. 不過目前請注意, 架設完 IPv6 只有爽度增加, 實用性近乎 0.

1. 準備
(1) 必需是 Hinet 的客戶, 包含 ADSL 和 ISP 都是.
(2) 必需是 ADSL 固定制或是網路制, 簡言之, 用 PPPoE 撥接上網的統統不行. (專線不在討論範圍之內). 如果還是不知道, 那一個月網路費帳單沒有超過 1300 元的應該都沒有 :p

確定好自己的網路之後, 請到http://www.ipv6.hinet.net/ 上, 中華電信股份有限公司網際資訊網路業務 ( IPv6 試用 ) 租用及異動申請書 >HiNet IPv6 網際資訊網路業務試用同意書
這兩份文件下載, 填寫完以後, 寄回到

地址:台北市信義路一段二十一號數據通信大樓行銷處 ) 提出申請,並請於信封上註明為IPv6試用服務申請。

接下來就是等到 Hinet 與你連繫, 並將 IPv6 的資訊給你.
(如果有很多人看到這篇文章去申請, 承辦人應該會很討厭我吧 XD)

2. Linux 環境設定.
關於 Linux Kernel 如何 compile IPv6 的方法, 這邊我就偷懶, 不想寫了.

我配發到的是(因為不太喜歡將公開資訊放在網路上, 所有的 IP 都有修改過, 和原來的不一樣, 不過因為美觀因素, 還是不要改成 “X” 之類的字樣)

您的介接介面位址是 2001:b02a:0:7::2/64
HiNet局端的介面位址是2001:b02a:0:7::1/64
您的內部網段(LAN)的IPv6位址是2001:b021:1B::/48
您的tunnel ip: 59.125.78.157
局端tunnel ip: 210.65.11.26

/48 , IPv6 有  128Bit 耶, 這樣我家每樣物品都給一個 IP 也用不完呀,
是不是太浪費了一點.
電視一個 IP, 電視搖控器一個, 冷氣二個, 冷氣搖控器 4 個. 棉被一個  ……
希望 Hinet 不要收回去才好 🙂

在設定 Tunnel 之前, 先確定是不是有 iproute2 套件, 如果沒有, 請安裝

# emerge sys-apps/iproute2

其實重點還是, 其他的套件也需要有 IPv6 支援, 可以在 make.conf 內早點加上 ipv6 字樣, 這樣才不用統統重編 .. :p

接下來就是要設定 Tunnel, 而設定 Tunnel 也很簡單, 寫個 Shell Script 如下, 將 IPv4 和 IPv6 位置代換成 Hinet 發給你的位置就可以了.

#!/bin/sh
LOCALIP=59.125.78.157
REMOTEIP=210.65.11.26
LOCALV6IP=2001:b02a:0:7::2/64

ip link set sixbone down
ip tunnel add sixbone mode sit remote $REMOTEIP local $LOCALIP ttl 64 dev eth0
#(Extract the tunneling overhead from the MTU)
ip link set sixbone mtu 1480
#(Bring the tunnel up)
ip link set sixbone up
#(Assign the IPv6 address to it)
ip addr add $LOCALV6IP dev sixbone
#(Route all global unicast IPv6 addresses through our ‘sixbone’ tunnel device)
ip route add 2000::/3 dev sixbone

這邊有二件事要注意
1. sixbone 是可以代換成其他的名字, 我是直接延用,
2. 原來的 MTU 是設 1200, 我試過 1400 也 OK. 所以就用到現在.

*2011/3/22 註: 我的環境最大可以設到 1480. 所以我就設定大一點了.

執行完這個 Script 以後, 應該就可以正常的連到 IPv6 的網路了. 找個站台來測試一下,

# ping6 www.kame.net
PING www.kame.net(orange.kame.net) 56 data bytes
64 bytes from orange.kame.net: icmp_seq=1 ttl=57 time=108 ms
64 bytes from 2001:200:0:8002:203:47ff:fea5:3085: icmp_seq=2 ttl=57 time=103 ms
64 bytes from 2001:200:0:8002:203:47ff:fea5:3085: icmp_seq=3 ttl=57 time=102 ms

— www.kame.net ping statistics —
3 packets transmitted, 3 received, 0% packet loss, time 15816ms
rtt min/avg/max/mdev = 102.793/105.090/108.683/2.586 ms

如果你現在 Linux 上有  GUI 介面, 可以連到 http://www.kame.net , 上面那隻海龜就會動 了.

2. 讓家中的電腦也可以輕易的用 IPv6 互連.

如果要讓家中的電腦也可以偷偷的 IPv6 化, 因為 Linux 幾乎都內建 IPv6, 這邊要講的是 Windows XP, 以這篇文章發表的時間來看, 大家應該都是裝 Windows XP SP2, 這一版要支援 IPv6 非常簡單. 在 command 模式下, 執行以下指令

# ipv6 install

這樣 Windows XP 就可以支援 IPv6 了.

接下來總是要配發一下 IP 吧.

IPv6 自動配發 IP 的方式有三種
1. Stateless auto-configuration

這個就是預設 IPv6 啟動就有, fe80:: 開頭的 IPv6 位置, 會自動分配好. 屬於 Local Link IP Address, 這個不在本文討論範圍內.

2. Stateful auto-configuration using Router Advertisement Daemon (radvd)

使用 radvd 發送 Router Advertisement Packet, 當 IPv6 Client 端收到這個 Packet, 會自動設定 IP Address, 並且以 radvd 的機器做為 Server.
首先, 先安裝 radvd 吧

# emerge radvd

我是有 Assign 一個 IP 給要發 RADVD 的 Interface

# ifconfig eth1 inet6 add 2001:b021:1B::1/48

接下來就是開一個新檔 /etc/radvd.conf

interface eth1
{
AdvSendAdvert on;
MinRtrAdvInterval 3;
MaxRtrAdvInterval 10;
prefix 2001:b021:1B::/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;

};
};

再啟動 radvd , 並將 radvd 設為預設啟動

# /etc/init.d/radvd start
# rc-update add radvd default

正常的狀況下, 你的 Windows XP 現在的 IPv6 的 IP 也會加上 2001:b021:1B:xxxxxxx
Route 也會自動設定好, 就直接可以上網了 XD.
請注意: 我這邊如果 prefix 設 /48 會有問題, 要改用 /64

3. Dynamic Host Configuration Protocol v6 (DHCPv6)

因為 radvd 會依照 Client 端的網路卡 Auto Assign 一個 Address 給 Client, 如果不希望使用 radvd 分配 IP 給 Client , 就要使用 DHCPv6 Server 分配.
同樣的, 我們先編輯一個檔案 /etc/dhcp6s.conf

prefer-life-time 10000;
valid-life-time 20000;
renew-time 5000;
rebind-time 8000;
interface eth1 {
link AAA {
allow unicast;
send unicast;
allow rapid-commit;
renew-time 1000;
rebind-time 2400;
prefer-life-time 2000;
valid-life-time 3000;
pool{
range 2001:b021:1B::10 to 2001:b021:1B::210/64;
prefix 2001:b021:1B::/48;
};
};
};

然後再啟動 dhcp6s

#/etc/init.d/dhcp6s start

如果 Client 要 IP  時就很簡單了

# dhcp6c eth0

這樣就可以了

20100721 Update:

如果是使用 IPv4 Tunnel 的方式, 因為 MTU 不一樣(我是設 1400), 所以 Linux 下要再加上一行

[BASH]
# ip6tables -A FORWARD -p tcp –tcp-flags SYN,RST SYN -j TCPMSS  –clamp-mss-to-pmtu
[/BASH]

這樣才可以正確的和某些站台連線.

剛學 IPv6 沒有多久, 希望這一篇文章能做一些拋磚引玉的作用, 吸引更多人來用 IPv6

Ref.
Gentoo IPv6 Router Guide
Linux上的IPv6路由

8 留言

  1. Joy

    你好
    我在PTT的IPV6板上
    看到你在”去年”的文章

    因為最近我修了一門IPV6的課程,而老師要我們做IPV6的相關報告,對於這篇文章我有一定的興趣想要拿來當成報告,不知道R大會不會反對Q”Q

    • kent13217

      你好!我是學生,最近在上ipv6的相關課程,目前教授是要求在linux的環近下安裝radvd,並且用Wireshark抓取修改過的ipv6的ra.rs.na.ns.但是因為我本身網路不是ipv6,在xp下我可以用gatway6去取得ipv6的網路環境,但是在linux裡卻相當困難,請問…你說在xp下安裝radvd,但是我試過”#emerge radvd”卻怎們也無法安裝,是我打錯了嗎?能不能請你說詳細一些?我需要更改radvd的prefix 2001:這裡:1234::1/64,取得規定的prefix ,請問能否在xp裡做到?

  2. Hi Richliu 您好
    很高興在搜尋 “ipv6 linux client” in google 看到您的網站連結, 在此處想跟您請教安裝DHCPV6 client in Fedora8 with DHCPV6套件的問題
    我的server套件按照網路howto 文件已經成功啟動了,但是dhcp6c (client)一直無法啟動daemon
    設定檔如下:
    (1)/etc/sysconfig/network-scripts/ifcfg-eth1

    DEVICE=eth1
    BOOTPROTO=dhcp
    HWADDR=00:1b:11:b5:82:1c
    ONBOOT=yes
    TYPE=Ethernet
    USERCTL=yes
    IPV6INIT=yes
    DHCP6C=yes
    PEERDNS=yes
    MTU=1500

    (2)/etc/dhcp6c.conf

    interface eth1 {
    # information-only;
    send rapid-commit;
    # request prefix-delegation;
    request domain-name-servers;
    request temp-address;
    address{ 2001:0E30:1402:1:9656:3:4:56/64;
    };
    };

    (3) /etc/sysconfig/network

    IPV6INIT=yes
    NETWORKING=yes

    我是希望去跟DHCPV6S server 去要一個stateful的IP add, 這樣設定有那裡錯誤或是還有什麼地方沒設嗎? 怎麼都起不來?會因為我網卡不支援IPV6嗎?網卡應該不致於太舊!~有什麼記錄檔讓我可以看到設定錯誤的地方嗎?謝謝囉,我頭快炸掉了….!~~
    Winster_Lin

  3. jiwtc

    你好,可以請問一下嗎
    我們用radvd可以get到ip
    但是radvd無法帶出dns
    所以想要用dhcp6s~~
    但是dhcp6s啟動都正常…client端卻只能拿到radvd發的,如何讓client拿到dhcp6s發的ip呢~~
    謝謝

發佈留言