Friday, June 21, 2013

NAT

ปัจจุบันเราใช้ IPv4 (Internet Protocol version 4) เป็นหลักในการสื่อสารบนเครือข่าย ซึ่งเจ้า IPv4 เนี่ยคือตัวเลขไบนารี่ทั้งหมด 32 บิท (อันนี้อยู่ในข้อสอบปีก่อนด้วย) ถ้าพูดถึงปริมาณก็คือ 2^32 หรือพูดง่ายๆคือ IPv4 มีทั้งหมดประมาณเกือบ 4.3 พันล้านเบอร์

  แต่ประชากรโลกปัจจุบันมีทั้งสิ้นประมาณ 7 พันล้านคน ซึ่งเกินกว่าจำนวนที่ IPv4 จะรองรับ หากเรามองตามความเป็นจริงในสมัยนี้ คนเราพกอุปกรณ์กัน 2-3 ชิ้นขึ้นไป ไม่ว่าจะเป็น Notebook, Smart Device ต่างๆ ทั้งโทรศัพท์มือถือ แท็ปเลต คือพูดง่ายๆ ยังไงความต้องการของการใช้เลขหมาย IPv4 มันเกินกว่าจำนวนที่สามารถรองรับได้ ภาษาการตลาดคือ Demand > Supply
ในเมื่อเกิดปัญหาตรงนี้ จึงต้องมีการออกแบบ แบ่ง IPv4 ที่ว่าออกเป็น 2 ส่วนคือ

1. Private IP Address เป็น IP สำหรับการใช้งานส่วนบุคคลซึ่ง IP ส่วนนี้จะไม่มีการทำ Routing ในระบบอินเตอร์เนต (Non-Routable IP Address) พูดกันให้ง่ายๆคือ ในอินเตอร์เนต Router ที่ทำหน้าที่ในส่วนของ Internet Backbone จะไม่รู้จักเส้นทางสำหรับ Private IP ซึ่งการที่จะทำให้ไอ้เจ้า Private IP สามารถออกสู่ Internet ได้เราต้องใช้วิธีการที่เรียกว่า NAT ซึ่งจะสอนในส่วนถัดไป สำหรับ Private IP Address มีค่าดังนี้

IP Address Range
Number of Address
Classful Description
10.0.0.0 – 10.255.255.255
16,777,216
Single class A
172.16.0.0 – 172.31.255.255
1,048,576
16 contiguous class B networks
192.168.0.0 – 192.168.255.255
65,536
256 contigious class C network

ดังนั้นการออกแบบระบบเครือข่ายภายใน ไม่ว่าจะเป็นที่บ้านเรา ร้านอินเตอร์เนตค่าเฟ่ องค์กร มหาวิทยาลัย ฯลฯ ก็ต้องออกแบบ IP Address ภายใน โดยใช้งาน Private IP จากตารางด้านบน อย่างเช่น ที่บ้านเราอาจจะใช้ 192.168.1.x/24, ที่มหาลัยขอนแก่นจะใช้ 10.x.x.x เป็นต้น ซึ่งก็จะมีเรื่องของ จำนวนที่รองรับในแต่ละคลาสว่ารองรับได้เท่าไหร่ อย่างเช่นคลาสเอ เราจะได้ IP จำนวนทั้งสิ้น 16,777,216 หมายเลข ซึ่งหมายถึงซับเนต 255.0.0.0 (/8) เราสามารถเอาซับเนตตรงนี้มาทำการแบ่งย่อยลงไปอีกเพื่อแบ่งเนตเวิร์กออกเป็นหลายๆเนตเวิร์กย่อย เรียกว่าการทำซับเนต (Subnetting) ซึ่งน้องๆจะได้เรียนในหลักสูตร และอยู่ในข้อสอบ 

แต่ทั้งนี้ทั้งนั้น บางองค์กร หรือบางหน่วยงานก็ไม่ได้ใช้เลขที่อยู่ในตารางด้านบนมาทำเป็น Private Network ซะทั้งหมด บางที่อาจจะใช้เลขแปลกๆ (เช่นเอาหมายเลข 20.x.x.x/8 มาทำเป็น Private Network โดยจริงๆแล้ว 20.x.x.x/8 เป็น Public Address แต่เราไม่ได้เอาหมายเลขตรงนี้มาประกาศบนอินเตอร์เนต เพราะถึงจะประกาศ ทาง ISP ก็จะมีการทำ Filter ออกไปไม่ให้ใช้งานได้อยู่ดี) ซึ่งก็แล้วแต่ฮวงจุ้ย หรืออะไรก็ตามแต่ที่ทางองค์กรชอบ โดยการใช้งานก็จะไม่มีปัญหา สุดท้ายแล้วจะออกอินเตอร์เนตก็ต้องทำการ NAT เหมือนกันครับ

2. Public IP Address เป็น IP สำหรับใช้งานบนอินเตอร์เนต (ภาษาชาวบ้านเรียกว่า ‘ไอพีจริง’) ซึ่ง IP เหล่านี้จะถูกจัดสรรการใช้งานโดยองค์กรกลางที่มีชื่อว่า IANA (Internet Assigned Numbers Authority) ซึ่งก็จะมีองค์กรย่อยตามภูมิภาค หรือทวีปต่างๆ ไว้คอยช่วยเหลืออีกทีดังนี้ 

Registry Area Covered
AfriNIC Africa Region
APNIC Asia/Pacific Region
ARIN             North America Region
LACNIC Latin America and some Caribbean Islands
RIPE NCC Europe, the Middle East, and Central Asia

ดังนั้น ISP (Internet Service Provider) หรือผู้ให้บริการ Internet ก็ต้องไปทำเรื่องขอเช่า Public IP เพื่อนำมาให้ลูกค้าทั้งองค์กร หรือลูกค้าบ้านๆ อย่างเราที่ต้องการใช้งานอินเตอร์เนต ได้มี Public IP ใช้งานกันต่ออีกทอดนึง 
(อ่านรายละเอียดเสริม หรืออยากรู้ว่า IP นี้ๆ อยู่ทวีปไหน ไปดูได้ที่ http://www.iana.org/numbers )

เกริ่นมาซะนาน ยังไม่ได้บอกเลยว่า Public IP Address มีค่าอะไรบ้าง ดูตารางด้านล่างเลยครับ
Note : ตรงนี้จะต้องมีพื้นฐานเรื่อง IP Classes มาก่อนนะครับ ซึ่งอยู่ในหลักสูตรวิชาที่น้องๆเรียนอยู่แล้ว พี่จะไม่พูดถึงนะ

Class
IP Address Range
Number of Address
Classful Description
A
0.0.0.0 – 126.255.255.255
16,777,216
Single class A
B
128.0.0.0 – 191.255.255.255
1,048,576
16 contiguous class B networks
C
192.0.0.0 – 223.255.255.255
65,536
256 contigious class C network
Public IP Address คือทุกๆ IP ที่อยู่ในตาราง ยกเว้น IP ที่ทับกับ Private IP และ IP ที่ขึ้นต้นด้วย 0.x.x.x และ 127.x.x.x

หากพูดถึงการใช้งานอินเตอร์เนตตามบ้านที่เราใช้ ไม่ว่าจะเป็นของ TOT, 3BB, TRUE หรืออะไรก็ตามแต่ เมื่อเราทำการเปิดใช้งาน Router/Modem ตัวอุปกรณ์จะทำการเชื่อมต่อไปยังชุมสายของ ISP จากนั้นทาง ISP จะทำการ Assign IP ซึ่งเป็น Public IP แบบสุ่ม (หมายถึงว่า ถ้าเราเปิด/ปิด Router เราก็จะได้ IP ใหม่ๆมา ไม่ซ้ำกัน เรียกว่าเป็น Dynamic IP, หรือถ้าต้องการใช้งาน IP ที่มีค่าคงที่จาก ISP หรือ Static IP ก็จะมีค่าใช้จ่ายสูงกว่า Dynamic IP ครับ) แต่ IP ที่ได้มาจาก ISP เป็น IP ของตัวอุปกรณ์ Router นะครับ ไม่ใช่ IP ของอุปกรณ์ที่เราใช้งาน ซึ่งถ้าเราต้องการจะใช้งานอินเตอร์เนต ก็ต้องมีการทำ NAT ครับ
สำหรับน้องๆที่จะใช้งาน Internet แล้วอยากทราบว่า Public IP ที่เราใช้งานอยู่คือหมายเลขอะไร สามารถตรวจสอบได้ที่ http://www.checkip.org


NAT (Network Address Translation)
เป็นวิธีการปรับเปลี่ยนข้อมูลในส่วนของ IP Header (IP Header อยู่ในเนื้อหาที่น้องๆเรียนครับ) โดยเมื่อ Packet วิ่งผ่านอุปกรณ์ที่มีการตั้งค่าในการทำ NAT (โดยปกติจะเป็น Router หรือ Firewall) ซึ่งก็จะมีการปรับเปลี่ยนในส่วนของ Source IP หรือ Destination IP อันนี้ก็แล้วแต่รูปแบบของการทำ NAT
ในอุปกรณ์ Router หรือ Firewall ที่มีการทำ NAT ก็จะมีตารางหรือ Entry ไว้เก็บค่าต่างๆ ว่า Private IP เบอร์นี้ๆๆ ถูก NAT ออกไปอินเตอร์เนตโดยใช้เบอร์นี้ๆๆๆ คล้ายๆกับตาราง MAC Address Table ของอุปกรณ์ Switch เลยครับ

NAT มีรูปแบบการใช้งานหลากหลาย แต่ที่พี่จะสอนในที่นี้คือพื้นฐานก่อนนะครับ ก็คือจะเป็น NAT แบบ Static แล้วก็การทำ NAT แบบ PAT (Port Address Translation)


1. Static NAT 
หมายถึงการทำ NAT แบบ 1-1 หรือ one-to-one เป็นการตั้งค่าการทำ NAT โดยจับคู่ระหว่าง Private ไปหา Public อย่างละ 1 IP เท่านั้น รูปแบบนี้เป็นรูปแบบพื้นฐานของการทำ NAT ครับ ให้เราศึกษาจากรูปด้านล่างนี้ครับ

อธิบาย : 
     จากภาพด้านซ้ายมือจะเป็นเครื่องคอมพิวเตอร์ที่มี IP Address เป็น 10.0.1.1 ต้องการที่จะออกไป Internet คือ Server 200.1.2.3, เมื่อ Packet วิ่งออกจาก PC มายัง Router ที่มีการตั้งค่า NAT เอาไว้เป็น 10.0.12.1 <-> 132.0.1.100 ตัว Router จะทำการเปลี่ยน IP Header ในส่วนของ Source จาก 10.0.12.1 เป็น 132.0.1.100 แล้วออกไปสู่อินเตอร์เนต หรือเครื่องปลายทางที่ 200.1.2.3
  เมื่อเซิฟเวอร์ที่ 200.1.2.3 ได้รับ Packet และเห็นว่า Source คือ 132.0.1.100 แล้วต้องการส่งข้อมูลกลับ ก็จะใช้เลข 132.0.1.100 เป็นเลข Destination แล้วส่งกลับไปยัง Router
  และเมื่อ Router ได้รับ Packet ตอบกลับมาโดยมี Destination เป็น 132.0.1.100 ก็จะทราบทันทีว่าทางเซิฟเวอร์ ต้องการติดต่อกับเครื่องที่อยู่ภายในคือ 10.0.12.1 ก็จะทำการปรับเปลี่ยน IP Header อีกครั้งเพื่อเปลี่ยน Destination เป็น 10.0.12.1 แล้วก็ส่งข้อมูลไปหา PC ด้านในได้อย่างถูกต้อง


2. PAT (Port Address Translation)
     จากการทำ NAT แบบ Static มีข้อเสียคือจะทำได้แบบทีละ 1 เท่านั้น ดังนั้นถ้าในส่วนของ Private Network ก็จะสามารถใช้งานอินเตอร์เนตได้แค่เครื่องเดียว เครื่องอื่นไม่สามารถใช้งานอินเตอร์เนตในเวลาเดียวกันได้
     ถึงตรงนี้เราทราบแล้วว่าการที่จะขอเช่า Public IP ซักเลขหมายนึงนั้นมีค่าใช้จ่าย ให้น้องๆจินตนาการถึงร้านอินเตอร์เนตคาเฟ่ หรือร้านเกมว่า ถ้าในร้านมีเครื่องซัก 100 เครื่อง แล้วใช้การ NAT แบบ Static (one-to-one) แน่นอนว่าเราต้องทำการเช่า Public ทั้งหมด 100 หมายเลข ซึ่งมีค่าใช้จ่ายสูง ทั้งยังสิ้นเปลือง IP อีกโดยไม่จำเป็น ฉะนั้นสิ่งที่จะมาแก้ปัญหาตรงนี้คือ การทำ NAT แบบ PAT
การทำ NAT แบบ PAT มีชื่อเรียกหลายแบบ เท่าที่น้องๆอาจได้ยินคือ PAT, NAT Overload และ Hide NAT ซึ่งก็คือความหมายเดียวกัน (พี่จะเรียกสั้นๆตรงนี้ว่า PAT)
     หลักการของ PAT คือ อุปกรณ์ที่ทำหน้าที่ในที่นี้คือ Router หรือ Firewall ที่มีการตั้งค่าการทำ PAT เมื่อ Packet จาก Internal เข้ามา เพื่อที่จะออกไปยัง Internet, ตัว Router/Firewall ก็จะทำการหน้าเพิ่ม Port Number ต่อท้ายหมายเลข IP Address เมื่อพูดถึงเลข Port ก็หมายถึง Transport Layer (Layer 4 ใน OSI Model) ซึ่งมีขนาด 16 บิท หรือ 2^16 = 0-65535 นั่นหมายความว่า Public IP หนึ่งหมายเลข สามารถที่จะใช้เลข Port ที่ว่านี้ แจกจ่ายไปยัง Client ที่อยู่ใน Internal พร้อมกันได้มากถึง 65536 เครื่อง !!!
     แต่จริงๆแล้ว ก็จะมีเลข Port บางช่วงซึ่งตัว Router/Firewall จะไม่ได้เอามาทำ NAT จะสงวนไว้ทำอย่างอื่น แต่ก็จะมีเลขกลมๆประมาณ 60000 ที่สามารถใช้ได้ 


เรามาดูตัวอย่างจากภาพกันครับ



อธิบาย :
     เรามี Client อยู่ 3 เครื่องคือ 10.10.10.1 – 3 และมี Public IP ที่อยู่บน Router คือ 63.63.63.1 เมื่อมีการใช้งานจากเครื่องภายในทั้ง 3 เครื่อง เวลาออกอินเตอร์เนตไปหาเว็บเซิฟเวอร์ ตัว Router ก็จะแปะเลข Port ไว้เช่น 63.63.63.1:8000 หมายถึง 10.10.10.1:80 ดังตาราง PAT/NAT Translation Table ที่อยู่ในภาพครับ ไม่ยากเลยใช่มั๊ยหล่ะ ?

ทิ้งท้าย
     จริงๆเรื่อง NAT มีอีกหลายแบบ หลายชนิด แต่พื้นฐานก็มาจากเนื้อหาที่พี่สอนด้านบนครับ การที่เราจะดูว่าจะต้องใช้ NAT แบบไหนยังไง อันนี้เราก็ต้องพิจารณาว่า เครื่องภายในของเราเหมาะกับ NAT แบบไหน เช่น ใช้งานอินเตอร์เนตทั่วไป หรือ จะทำเป็นเซิฟเวอร์ให้สามารถเข้ามาใช้งานจากอินเตอร์เนตได้ เป็นต้น ซึ่งเหล่านี้ก็ต้องใช้รูปแบบ NAT ที่แตกต่างกันไปครับ
     แล้วอีกอย่างที่อยากจะให้น้องๆจำก็คือ การทำ NAT ไม่ใช่เพียงเพื่อการใช้งานอินเตอร์เนตเท่านั้น บางครั้งเราใช้ NAT เพื่อเหตุผลด้านความปลอดภัย โดยอาจจะเป็น NAT ภายในองค์กร หรือระบบเอง ก็จะเป็นเนื้อหาขั้นสูง ซึ่งก็จะมีเรื่องของวิชา Security เข้ามาเกี่ยวข้อง ตรงนี้พี่จะยังไม่พูดถึงครับ

cr; image from google, and IANA
by,,,p'artz # KKU COE/17



No comments:

Post a Comment