Basic IP(v6) for System Administrator

ผมยังไม่แน่ใจว่าแต่ละ IDC จะ assign IP ให้ในรูปแบบไหน เอาพื้นๆ ทั่วๆ ไปก่อนแล้วกันครับ

IPv4 คิดว่าทุกคนคงรู้จักกันดี มันคือเลข 0-255 ประกอบกัน 4 ชุด คั่นด้วย ‘.’ ซึ่งถ้าแปลงกลับเป็นเลขฐาน 2 มันจะได้ความยาว 32bit พอดี
โดยกาารเขียน IP สำหรับใช้งาน จะมีการระบุขนาดของ subnet ด้วย เช่นตัวเลข /24 หรือ subnet 255.255.255.0 ด้านหลังหมายเลข IP
ตัวอย่างก็เช่น 192.0.2.1/24 หรือ 192.0.2.1 subnet 255.255.255.0

วิธีแปลงกลับจาก /24 เป็น subnet ที่เขียนแบบเดียวกับ IPv4 (255.255.255.0) ก็ให้เขียนเลข 1 เรียงกันจำนวน n ครั้ง แบ่งเว้นวรรคทุกๆ 8 ตัว แล้วเติม 0 ต่อท้ายให้ครบ 32 ตัว
เช่น /24 เขียนได้เป็น 11111111 11111111 11111111 00000000 แล้วแปลงกลับเป็นเลขฐาน 10 ครับ ก็ได้เป็น 255.255.255.0 ถ้าจะวุ่นกว่านี้ก็อาจเป็น /27 /28 มันจะออกมาเป็น .224 .240 ไป

=============================================

มาที่ IPv6 กันบ้าง พื้นฐานมันคือการขยาย ipv4 ออกเป็น 128 bit (เพิ่มจำนวน bit ขึ้น 4 เท่า) ทีนี้ถ้าจะให้เขียนแบบเดียวกับ ipv4 (0-255 คั่นด้วยจุด) มันก็คงไม่ค่อยสนุกเท่าไหร่ ก็เลยเปลี่ยนวิธีเขียนครับ
รูปแบบที่เขียน IPv6 กันจะเป็นเลขฐาน 16 ความยาว 32 หลัก คั่นทุกๆ 4 หลักด้วยเครื่องหมาย ‘:’ (colon) หน้าตาประมาณนี้ 0000:0000:0000:0000:0000:0000:0000:0000
หรือถ้าจะยกตัวอย่าง IP จริงๆ ก็เช่น 2a03:2880:0010:1f02:face:b00c:0000:0025 (ของ facebook) หรือ 2404:6800:800b:0000:0000:0000:0000:0093 (ของ google)
ทีนี้บางทีมันจะดูยาวไป (ให้มานั่งเขียนเต็มๆ ก็ตายพอดี) ทำให้เราสามารถเอาเลข 0 ตัวหน้าของแต่ละชุดออกได้ครับ ก็จะได้เป็น 2a03:2880:10:1f02:face:b00c:0:25 หรือ 2404:6800:800b:0:0:0:0:93
และกรณีที่มี :0:0: ติดๆ กันแบบนี้ สามารถรวบย่อได้อีกนิดนึงครับ เหลือแค่ :: (ไม่ว่าจะมี :0:0: ติดกันกี่ชุด ย่อเหลือแค่ :: ได้เลย) โดยมีกติกาประมาณนี้ครับ

  • ใน address สามารถใส่ :: ได้แค่ที่เดียวเท่านั้น
  • ต้องย่อในกลุ่มที่ :0:0: อยู่ติดกันยาวที่สุด
  • กรณีที่สองกลุ่มยาวเท่ากัน ให้ย่อด้านซ้าย ด้านขวาให้เขียน :0:0: ตามเดิม

อย่างของ ip google ตามตัวอย่างเมื่อกี้ ก็จะสามารถรวบ :0:0:0:0: เหลือแค่ :: ได้เลย ก็จะได้เป็น 2404:6800:800b::93 แค่นี้เองครับ สั้นลงเยอะ วิธีขยายก็คือใส่ 0 กับ : แทรกลงไปให้ครบหลักตาม IPv6 แค่นั้นเอง

IPv6 ก็มี subnet เหมือนกันครับ เรียกว่า prefix length แต่เขียนรูปแบบเดียวเท่านั้นคือ /n แบบเดียวกับ ipv4 เลย ซึ่งอาจจะคำนวณยากกว่า ipv4 หน่อย เพราะมันยาวมาก
แล้วก็จะมีค่าได้ตั้งแต่ 0 ถึง 128 แต่ค่าหลักๆ ที่ใช้กันก็คือ /4 /8 /16 /32 /40 /48 /56 /64 /112 /128 โดยเฉพาะ /64 น่าจะเจอบ่อยที่สุดแล้ว
วิธีจำง่ายๆ ก็คือทุกๆ /16 คือทุกๆ 1 ชุดของ IP ล่ะครับ /64 ก็คือ 4 ชุดแรก

=============================================

วิธีการตั้งค่า IPv6 บน Linux สาย Redhat (CentOS, Fedora, RHEL)

  1. สำคัญมาก!!! ไฟล์ /etc/sysconfig/network ตรวจสอบว่า NETWORKING_IPV6=yes แล้วยัง ถ้ายังก็แก้ด้วยครับ
  2. ไฟล์ config อยู่ที่เดิมไฟล์เดิมได้เลยครับ แต่เพิ่มข้อมูลไป ไฟล์จะเก็บอยู่ใน folder /etc/sysconfig/network-scripts/ ชื่อไฟล์ ifcfg-XXXX (แทน XXXX ด้วยชื่อ interface เช่น eth0)

กรณีได้รับ assign static ip มาจาก IDC แล้ว ให้เอา IP+prefix length ไปใส่ใน IPV6ADDR และเอา IP ของ default gw ไปใส่"เพิ่ม"ในไฟล์เมื่อกี้ (/etc/sysconfig/network-scripts/ifcfg-eth0)

IPV6INIT=yes
IPV6ADDR=2401:5700:100:503::1813/64
IPV6_DEFAULTGW=2401:5700:100:503::1

*** สำหรับ IPV6_DEFAULTGW บางครั้ง อาจไม่ต้องใส่ก็ได้นะครับ ถ้า router ในเครือข่ายประกาศตัวเองไว้อยู่แล้ว

กรณีที่เป็น IPv6 auto configuration ผ่าน DHCPv6 เซตแบบนี้ครับ

IPV6INIT=yes
IPV6_AUTOCONF=yes
DHCPV6C=yes

กรณีที่เป็น IPv6 auto configuration ผ่าน SLAAC เซตแบบนี้ครับ

IPV6INIT=yes
IPV6_AUTOCONF=yes

กรณี IDC ไม่แจก ipv6 มาให้ แต่อยากใช้ (ผ่าน 6to4 tunnel) ก็ใช้แบบนี้ครับ

IPV6INIT=yes
IPV6TO4INIT=yes
IPV6_DEFAULTDEV=tun6to4

คิดว่าคงครบแล้ว ส่วนการตั้งค่า DNS ก็ใช้แบบเดิมครับ /etc/resolv.conf ใส่ nameserver เว้นวรรคแล้วตามด้วย IPv6 ของ DNS server (ถ้ามี) ครับ

วิธีทดสอบการใช้งานก็สามารถใช้คำสั่ง ping6/traceroute6 ลักษณะเดียวกับ ping/traceroute ตามปกติได้เลยครับ (แค่เติมเลข 6 ต่อท้ายคำสั่ง)

เช่น
[icez@thz00 ~]$ ping6 www.google.com -c 3
PING www.google.com(2404:6800:800b::68) 56 data bytes
64 bytes from 2404:6800:800b::68: icmp_seq=1 ttl=54 time=100 ms
64 bytes from 2404:6800:800b::68: icmp_seq=2 ttl=54 time=101 ms
64 bytes from 2404:6800:800b::68: icmp_seq=3 ttl=54 time=99.5 ms

www.google.com ping statistics —
3 packets transmitted, 3 received, 0% packet loss, time 2101ms
rtt min/avg/max/mdev = 99.584/100.576/101.155/0.750 ms

อะไรประมาณนี้แหละคัรบ

เพิ่มวิธีของสาย Debian ครับ (Debian/Ubuntu/อะไรอีกหว่า?)

Static IP from IDC

อันนี้ยัดเป็นคำสั่งต่อท้ายไปตรงๆ เลยครับ ตามนี้เลย


iface eth0 inet static
        address 203.150.228.244
        netmask 255.255.255.0
        gateway 203.150.228.254
[B]        up ip -6 addr add 2001:c00:f100::1/64 dev $IFACE || true[/B]

6to4 Tunnel

สำหรับกรณีที่ IDC ไม่มีไรให้เรา แต่ใจรัก อยากใช้ ขี้เกียจทำ Tunnel

แก้ /etc/network/interfaces เพิ่มข้างล่างนี่ลงไป

auto tun6to4
iface tun6to4 inet6 v4tunnel
        address [B]2002:cb96:e4f4::1[/B]
        netmask 16
        gateway ::192.88.99.1
        endpoint any
        local [B]203.150.228.244[/B]

เสร็จแล้วแก้ตรงตัวหนาครับ

  • 2002:cb96:e4f4::1 คือ IPv6 ที่แปลงจาก IPv4 ของเรา
  • 203.150.228.244 คือ IPv4 จริงๆของเรา

วิธีแปลง IPv4 เป็น IPv6 สำหรับ 6to4

printf "2002:%02x%02x:%02x%02x::1
" 203 150 228 244

เสร็จแล้ว ifup tun6to4 เป็นอันเรียบร้อย

ป.ล. จริงๆชื่อ tun6to4 จะตั้งเป็นอะไรก็ได้นะครับ แก้ให้ตรงกันทุกจุดก็พอ

6in4 Tunnel

อันนี้สำหรับกรณีที่ขอ Tunnel มาจาก NECTEC หรือ [URL=“http://www.tunnelbroker.net”]TunnelBroker

ลองเทียบคอนฟิกกับในรูปดูละกันครับ ไม่รู้จะอธิบายอะไร 555+

auto he-tun
iface he-tun inet6 v4tunnel
       address [B]2001:470:35:6c2::2[/B]
       netmask 64
       endpoint [B]216.218.221.42[/B]
       ttl 255
       gateway [B]2001:470:35:6c2::1[/B]
       up ip -6 addr add [B]2001:470:36:6c2[/B][B]::1/64 [/B]dev eth0 || true
       down ip -6 addr del [B]2001:470:36:6c2[/B][B]::1/64[/B]dev eth0 || true


เสร็จแล้วอย่าลืม ifup he-tun

วิธีเทสการใช้งานก็ใช้ ping6/traceroute6 ตามที่ @icez โพสข้างบนเลยฮะ

โดยเฉพาะ /64 น่าจะเจอบ่อยที่สุดแล้ว
ที่เจอบ่อยเพราะว่า อีก 12 ตัวที่เหลิอจะเป็น MAC ADDRESS ครับ
ซึ่งจะมีผลในการทำ routing advantages
ถ้า MacAddress ไม่ซ้ำ IPv6 ก็ไม่ซ้ำ
คนที่ได้รับ IPv6 มาจาก DHCP ลองดูสิครับ
ว่า Ip ที่ได้รับจะมี 2-3 ตัว แต่จะมีตัวหนึ่งที่เป็น MAC ADDRESS
นอกจากนี้
DHCP สำหรับ IPv6 สำหรับ IPv6 สามมารถใช้โปแกรม RADVD ในการแจกได้ครับ

ถ้าเปลี่ยนเป็น ip v6 แล้วพวกโปรแกรมเก่าๆหละครับจะมีปัญหาปะ

โปรแกรมเก่าๆ ปกติไม่มีการใช้ IP โดยตรง มักจะไม่มีปัญหาครับ
เช่น พวก web app ต่างๆ ที่ไม่มีการอ้างอิง IP จะใช้งานได้ปกติ
ส่วนโปรแกรม WEB SERVER,DB SERBER รองรับอยูาแล้วครับ

ทดสอบคร่าวๆ ฝั่ง hosting ไม่เจอปัญหาอะไรเลยครับ ขึ้นกับ control panel แต่ plesk / da / cpanel รับกันหใดแล้งก็ไม่น่ามีอะไรหรอกครับ

โดยปกติโปรแกรมพวกนี้ไม่ยุ่งกับ ip อยู่แล้วครับเลยมักไม่ค่อยมีปัญหา
ยิ่งเครื่องไหนมี ทั้ง 4 และ 6 ยิ่งไม่มีปัญหา (นอกจาก log จะโต+มั่วเล็กน้อย)

นอกเรื่องนิด ผมพึ่งได้เสื้อจาก he.net มา เล่นจบไปเกือบเดือนละ =_=

โอ้ ลึกซึ้ง. ได้เวลาต้องปรับตัวครั้งใหญ่อีกแล้ว

มาไล่กด Thanks แล้วเอากระทู้ไปแชร์ :875328cc:

น้องไอซเขียนเข้าใจง่ายที่สุด :d5f02ecd:

เอ้อ วันนี้เจออะไรแปลกๆที่ INET IDC ตึก BTT คือมันแจก IPv6 มาให้เครื่อง server เฉยเลย (สำหรับเครื่องที่ไม่ได้แก้อะไร)
เข้าใจว่าเค้าคงทดสอบ ipv6 บน router แล้วลืมปิด router advertise (ประกาศ address แบบ SLAAC ให้เครื่องในเครือข่าย)

มีข้อควรระวังนิดหน่อยนะครับ ipv6 เนี่ย มันใช้ ip6tables นะครับไม่ใช่ iptables เฉยๆ แล้ว rule จะแยกกันหมดเลย
หมายความว่า ที่แก้อะไรใน iptables ปกติเนี่ย จะไม่มีผลกับ ip6 เลย ถ้าไม่ได้ไปแก้ ip6tables เพิ่มด้วย

ลอง check กันดูด้วยนะครับว่า ip6tables ทำงานอยู่รึเปล่า (ไม่ว่าจะใช้หรือไม่ใช้ ipv6 ก็ตาม)

ง่ายๆ ครับ

/sbin/ip6tables -nvL

[COLOR=#d3d3d3]ถ้าไม่คิดจะใช้ตอนนี้ก็ drop ipv6 packet ทิ้งให้หมดเลยก็ได้ครับ
/sbin/ip6tables -I INPUT -j DROP[/COLOR]

อ๊ะลืม ปิดไม่ได้ครับ ถ้า drop แบบนี้ server จะคุยกับพวก facebook อะไรไม่ได้เลย - -’ (facebook/google เปิด ipv6 แล้ว มันจะไปคุยผ่าน ipv6 ก่อนเกือบๆ เสมอ)
ต้องใช้ rule ตามนี้ครับ

/sbin/ip6tables -A INPUT -i lo -j ACCEPT
/sbin/ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/ip6tables -A INPUT -j DROP

อีกวิธีคือให้มันใช้ v4 ก่อ v6 ก็ใส่ /etc/gai.conf ตามนี้


precedence ::ffff:0:0/96  100

และถึงจะใส่ postfix ก็ยังบึ้มอยู่ ให้ใส่บรรทัดนี้ใน main.cf ด้วย


smtp_address_preference=any

Thanks for this great post for more rapidly.