ไม่ได้เขียนซะนาน เริ่มจากการรวบรวมเรื่องเก่าๆ ที่เคยเขียนมา รวมไว้ก่อน เรื่องใหม่รอคิวไปก่อนครับ
ความจริงผมต่อ IPv6 ไว้นานมากแล้ว แต่ไม่ได้เขียนวิธีการไว้ จนจะลืมซะแล้ว เลยเอามาเขียนไว้ซะหน่อย
การเชื่อมต่อ IPv6 มีได้หลากหลายวิธีมากครับ วิธีนึงที่นิยม คือ 6to4 relay เป็นการสร้าง tunnel หรือท่อ โดยการ map IPv4 เดิมที่มี
เข้าเป็น IPv6 prefix สำหรับใช้งานได้ ซึ่ง แค่ Prefix เดียว ก็เหลือแหล่ ใช้ได้ทั้งองค์กรเลยทีเดียวครับ
ซึ่ง ADSL สมัยนี้ ก็แจก IPv4 เป็น public IP ให้เราอยู่แล้ว เราก็สามารถนำมาใช้งานได้ครับ
การสร้างท่อนี้ ที่จริง ก็เป็นการส่งโดยการ encapsulate หรือให้ IPv4 ส่งข้อมูล IPv6 นั่นเอง
- การเชื่อมต่อในที่นี้ เราจะทำการ relay ไปยังที่เนคเทค ครับ เพราะเป็น backbone นึงที่ใหญ่ IP ที่จะ relay ของเนคเทคคือ 203.185.129.129 ซึ่ง default ของการทำ tunnel จะวิ่งไป 192.88.99.1 ซึ่งจะ route ไปที่ backbone ที่รับการ relay อัตโนมัติ
-
[sekz@Sekz-Laptop ~]$ traceroute 192.88.99.1
-
1 router (192.168.1.77) 1.917 ms 2.009 ms 2.156 ms
-
2 10.26.0.1 (10.26.0.1) 15.320 ms 16.081 ms 16.516 ms
-
3 10.92.228.89 (10.92.228.89) 26.021 ms 32.026 ms 27.372 ms
-
4 203-144-128-22.static.asianet.co.th (203.144.128.22) 28.609 ms 119-46-185-214.static.asianet.co.th (119.46.185.214) 28.710 ms 203-144-128-10.static.asianet.co.th (203.144.128.10) 29.388 ms
-
5 119-46-170-13.static.asianet.co.th (119.46.170.13) 27.234 ms 27.389 ms 27.507 ms
-
6 61-91-210-225.static.asianet.co.th (61.91.210.225) 29.212 ms 27.722 ms 27.704 ms
-
7 61-91-213-35.static.asianet.co.th (61.91.213.35) 25.850 ms 16.848 ms 21.126 ms
-
8 61-91-213-81.static.asianet.co.th (61.91.213.81) 19.388 ms 19.689 ms 21.669 ms
-
9 TIG-Net242-49.trueintergateway.com (113.21.242.49) 25.711 ms TIG-Net242-37.trueintergateway.com (113.21.242.37) 29.847 ms TIG-Net242-49.trueintergateway.com (113.21.242.49) 26.145 ms
-
10 SG-ICR-GS1-26-206.trueintergateway.com (122.144.26.206) 64.416 ms 64.440 ms 65.419 ms
-
11 TIG-Net241-190.trueintergateway.com (113.21.241.190) 62.328 ms 62.471 ms 63.207 ms
-
12 10gigabitethernet1-1.core1.sin1.he.net (202.79.197.81) 65.022 ms 65.108 ms 65.094 ms
-
13 192.88.99.1 (192.88.99.1) 54.604 ms 54.364 ms 55.548 ms
- จากการติดตั้ง http://www.falsyana.com/2011/linux/ipv6-at-home-3/ ก่อนอื่น เราต้องทราบก่อนว่า IPv6 Prefix ของเราเป็นอะไร ใน debian มี tool ช่วยคำนวณครับ ชื่อ ipv6calc
- จะได้ค่า prefix ออกมา เช่น 8.8.8.8 จะได้ 2002:808:808:: เป็นต้น อันนี้ขอเรียกว่า 6to4_PREFIX นะครับ
จากนั้นสร้าง tunnel -
# /sbin/ip tunnel add tun6to4 mode sit ttl 64 remote any local <YOUR_PUBLIC_IP>
-
# /sbin/ip link set dev tun6to4 up
-
# /sbin/ip -6 addr add <6to4_PREFIX>/16 dev tun6to4
-
# /sbin/ip -6 route add 2002::/3 via ::203.185.129.129 dev tun6to4 metric 1
-
# /sbin/ifconfig
-
tun6to4 Link encap:IPv6-in-IPv4
-
inet6 addr: <YOUR IPv6 PREFIX>::1/64 Scope:Global
-
UP RUNNING NOARP MTU:1480 Metric:1
-
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
-
TX packets:0 errors:168 dropped:0 overruns:0 carrier:168
-
collisions:0 txqueuelen:0
-
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
-
#!/bin/bash
-
-
SLA_INTF=${3:-4660} # 1234 in HEX
-
INTF_PFX=${5:-64}
-
# remove exist
-
CUR_ETH0_ADDR=`/bin/ip addr show eth0 | grep inet6 | grep global | awk '{print $2}'`
-
-
# IPv6 ready?
-
[ -f /proc/net/if_inet6 ] || exit 0
-
-
# Grab the device of the default route (may be
-
# multiple -> CUR_DV is an array)
-
CUR_DV=(`ip -4 route list | awk '/^default / { print $0 }' | \
-
sed 's/.* dev \([^ ]\+\).*$/\1/'`)
-
-
# Is there any device? Or no default route at all??
-
if [ -z ${CUR_DV} ]; then
-
echo "No default route. Cannot determine IPv4 address to use"
-
exit 0
-
fi
-
-
# We simply take the device from the first default route
-
CUR_IP=(`ip -4 addr show ${CUR_DV} | awk '/inet / { print $2 }' | \
-
sed -e 's/^\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\).*$/\1/'`)
-
-
IPV6_ADDR=$(printf "2002:%02x%02x:%02x%02x:%04x::" \
-
$(echo "${CUR_IP} ${SLA_INTF}" | tr '.' ' '))
-
-
#calculation for eth0
-
ETH0_HWADDR=`ifconfig | grep eth0 | awk '{print $5}'`
-
-
NEW_ETH0_ADDR=`/usr/bin/ipv6calc --action prefixmac2ipv6 --in prefix+mac --out ipv6 $IPV6_ADDR/64 $ETH0_HWADDR`
-
-
# remove exist
-
CUR_ETH0_ADDR=`/bin/ip addr show eth0 | grep inet6 | grep global | awk '{print $2}'`
-
if [ "$CUR_ETH0_ADDR" != "" ]; then
-
/bin/ip -6 addr del $CUR_ETH0_ADDR dev eth0
-
fi
-
if [ "$NEW_ETH0_ADDR" != "$CUR_ETH0_ADDR" ]; then
-
/bin/ip -6 addr add $NEW_ETH0_ADDR dev eth0
-
fi
- เพิ่มการ forward ระหว่าง interface แก้ไขไฟล์ /etc/rc.local เพิ่มบรรทัด
-
# echo "1" > /proc/sys/net/ipv4/ip_forward
-
# echo "1"> /proc/sys/net/ipv6/conf/all/forwarding
- ติดตั้ง Router Advertisement Daemon สำหรับทำตัวเป็น router ประกาศ prefix ของเครือข่าย
-
interface eth0
-
{
-
AdvSendAdvert on;
-
MinRtrAdvInterval 3;
-
MaxRtrAdvInterval 10;
-
AdvDefaultPreference low;
-
AdvHomeAgentFlag off;
-
prefix 0:0:0:1234::/64
-
{
-
AdvOnLink on;
-
AdvAutonomous on;
-
AdvRouterAddr on;
-
Base6to4Interface eth1;
-
AdvPreferredLifetime 120;
-
AdvValidLifetime 300;
-
};
-
};
รายละเอียด 6to4 Tunnel โดยเนคเทค อยู่ที่ http://www.ipv6.nectec.or.th/6to4relayservice.php
จากนั้น ตั้งค่า interface eth1 ซึ่งสามารถคำนวณได้จาก ipv6calc โดยถ้าหากอ้างอิงสคริป จะง่ายกว่าครับ
http://www.anyweb.co.nz/tutorial/Linux6to4Host
# apt-get install radvd
แก้ไขไฟล์ /etc/radvd.conf
จากนั้น เครื่องคุณ ถ้าสนับสนุน ipv6 อยู่แล้ว ก็จะได้รับ router advertisement ตั้งค่า IPv6 ของแต่ละเครื่องอัตโนมัติ และเป็น unique IP (Global Address) ที่สามารถเชื่อมต่อกันได้แบบ end to end เลยทีเดียว