3/19/2555

Apache Mod Rewrite เพื่อทำ Easy URL

เทคนิคนี้เป็นผลพลอยได้จากการเขียน Scriptdd ตัวใหม่นี่แหล่ะครับ
ด้วยความที่ ตัวเก่านั้นมีอายุหลายปีแล้ว ทำให้อะไรหลายๆอย่างดูเก่าตามไปด้วย

การทำ Easy URL นั้นเป็นเทคนิคอย่างหนึ่งที่ช่วยให้ URL ของเรา สวยงามและ
สื่อความหมายให้กับผู้ใช้โดยเฉพาะ Search Engine ต่างๆแล้วจะชอบมาก

เพราะอะไร ?

ผมขอยกตัวอย่างง่ายๆ เช่น URL นี้

แบบดั่งเดิม
http://www.unlimitpc.com/modules.php?name=Article&pa=showpage&pid=295

ถ้าเปลี่ยนใหม่เป็น
http://www.unlimitpc.com/Article/showpage/295.html

หรือ
http://www.unlimitpc.com/Article/POV-GF8500GT.html

3 URL นี้ถ้าเป็นคุณ คุณจะคลิกอันไหนครับ ? หรือพอเดาได้ไหมครับ
ว่า URL นี้เป็นเนื้อหาเกี่ยวกับอะไร ??

นี่แหล่ะครับการทำ Easy URL ซึ่งนอกจากจะทำให้ผู้ใช้สนใจจะคลิก Link แล้ว
ยังสามารถช่วยเพิ่มความน่าสนใจให้กับ Search Engine ได้ด้วย

เนื่องจากการทำ SEO (Search Engine Optimization) ก็มีการพิจารณาชื่อ URL
ในการทำ Index ของ Keyword ด้วย


แล้วทำยังไง ?

สำหรับ Apache แล้วนั้นเรียกได้ว่า หมูมากเพราะถูกออกแบบมาสำหรับเรื่องนี้โดยเฉพาะ

พระเอกของเรานั้นคือ Mod Rewrite ครับ

Mod Rewrite เป็นโมดูลที่เพิ่มเติมสำหรับ Apache ให้สามารถทำงานลักษณะแสดงเนื้อหา
(จาก php หรือ pl หรือ html ต่างๆ) ลงบน URL ที่กำหนดไว้ในเงื่อนไขได้

เช่น

การที่เราเห็น URL ว่า
http://www.songburi.com/interview/petch_album_lets_talk_about_love_1.html

ความจริงแล้วระบบภายในอาจจะเรียกเป็น
http://www.songburi.com/interview/index.php?id=petch_album_lets_talk_about_love_1

ซึ่งทั้งหมดอยู่ที่การ Config Mod Rewrite นั้นแหล่ะครับ

(ไม่ต้องแปลกใจแอบ Promote Web ให้เพื่อนซะงั้น :P)

ฉะนั้นจากที่ผมกล่าวมาการทำ Easy URL ด้วย Mod Rewrite ต้องทำตั้งแต่การออกแบบ Script ในฝั่ง
เนื้อหาให้สัมพันธ์กับการ Config Mod Rewrite ครับ

ว่าแล้วมาเริ่มกันที่การ Config Mod Rewrite ก่อนครับ

1. ตรวจสอบก่อนว่า Server มี Mod Rewrite หรือเปล่า
สำหรับ สาวก Apache เท่านั้น ลองเขียน php ขึ้นมา File นึงครับ

phpinfo();
?>


แล้ว Upload ขึ้นไปบน Server ลองดูจาก phpinfo ว่ามี Mod Rewrite ใน Server หรือเปล่า
จากรูปจะเห็นว่า php ตรวจสอบแล้วว่า Apache ได้ติดตั้ง mod rewrite เอาไว้
แบบนี้ก็มีโอกาสใช้ได้ 50% แล้วครับ ^^

2. ต่อไป ให้ลอง Download Script ตรวจสอบนี้ (คลิกที่นี่) ไป ติดตั้ง มีอยู่ 2 File น่ะครับ
.htaccess คือ File config mod rewrite และ index.php เป็นตัวอย่างการเรียก URL

ที่ Server ของคุณ เอาไว้ใน /rewrite/ นะครับ แล้วลองเรียก URL ว่า

/rewrite/test_rewrite.html  (เปลี่ยนคำว่า test_rewrite เป็นคำที่คุณต้องการตามสะดวก)


ถ้าขึ้นตามรูปแสดงว่า Server ของคุณพร้อมใช้งาน Mod Rewrite แล้วล่ะครับ ^^


3. ถ้าลองตามข้อ 2 แล้วไม่สามารถใช้งานได้กรุณาแจ้ง Admin ครับ ให้เพิ่ม ใน httpd.conf
ว่า ให้ AllowOverride All ใน Home Path ของ Website ของคุณ


การ AllowOverride All คือการยอมรับการเรียก .htaccess จาก folder ใดๆก็ได้ครับ


ถ้าทุกอย่างเรียบร้อยคุณก็จะสามารถแปลงร่างเล่น Easy URL กันได้แล้วครับ เย้

แิอบโฆษณา

พี่ต่อสะกิดมาฝากข่าวโฆษณาครับ www.siamhosting.com Server ทุกตัว รองรับ Mod Rewrite ครับ ^^!

เริ่มออกแบบส่วน PHP เพื่อปรับการเรียกใช้

เนื่องจาก Script เดิมที่ผมเคยเขียนไว้ ในการเรียกเนื้อหาข้อมูลโดยใช้ id แทนฉะนั้น
ผมจึงเพิ่ม Field ขึ้นมา 1 ช่องเพื่อเก็บชื่อ Easy URL ที่เราต้องการเอาไว้


เสร็จแล้วผมจึงเปลี่ยน Script จากการเรียก id เป็นเรียก Easy URL แทน ดังนี้

   Script วิธีเรียกแบบเดิม
   content_detail.php?id=1234

   แก้ใหม่
   content_detail.php?path_url=easy_url_55555
 
เท่านี้ Script เดิมก็สามารถเรียกใช้งานแบบ Easy URL ได้แล้วครับ

เขียน .htaccess เพื่อรับกับส่วน PHP

จากที่เห็นผมจึงแก้ไข .htaccess ใหม่ดังนี้

----
RewriteEngine On
RewriteBase /content/

RewriteRule ^(.*).html content_detail.php?path_url=$1
-----



จาก .htaccess ฉะนั้นสรุปได้ว่า Easy URL ใหม่ที่จะเกิดขึ้นก็คือ

http://www.yourdomain.com/content/my_easy_url_if_i_want.html


กระบวนการของ URL ดังกล่าวนี้คือ
เมื่อมีการเรียก URL ที่อยู่ภายใต้ /content/ เข้ามา Apache จะตรวจสอบว่า
ถ้ามี Filename ใดๆ .html เข้ามา Apache จะส่ง Filename นั้นๆ ไปให้กับ
PHP ชื่อว่า content_detail.php?path_url=ชื่อ filename นั้นๆ นั้นเอง

ซึ่งการเขียน .htaccss นี้สามารถเขียนหลายๆ เงื่อนไขเข้าไปได้เช่น

----
RewriteEngine On
RewriteBase /content/

RewriteRule ^(.*).html content_detail.php?path_url=$1
RewriteRule ^page-(.*).html index.php?p=$1
-----


กรณีที่ เนื้อหามีหลายหน้า ปกติเราจะส่งข้อมูลเป็น index.php?p=2 ไป
แต่ผมเปลี่ยนใหม่ให้เรียกเป็น page-2.html แทนครับ


ทั้งหมดที่กล่าวมาเป็นเทคนิคแค่เบื้องต้นและ สรุปให้ดูง่ายที่สุด
ใครอ่านไม่รู้เรื่องลองอ่านซ้ำหลายๆรอบ น่ะครับ

ถ้าหากใครต้องการเทคนิคสูงๆ ผมก็ขอทิ้ง Link อ้างอิงเอาไว้ให้ลองไปศึกษากันดู
บทความนี้ก็ขอจบแค่นี้แหล่ะครับ

อ้างอิง

ต้นน้ำที่ผมเริ่มหาข้อมูลจากคุณ bomber ครับ
http://www.narisa.com/blog/bomber/index.php?showentry=133

เทคนิคหลายๆแบบของการเขียน Mod Rewrite
http://corz.org/serv/tricks/htaccess2.php
http://www.sitepoint.com/article/guide-url-rewriting
http://forums.searchenginewatch.com/showthread.php?t=3925
http://www.modrewrite.com/

อันนี้สรุปทั้งหมด Print ออกมาแปะฝาบ้านได้เลยครับ
http://www.ilovejackdaniels.com/apache/mod_rewrite-cheat-sheet/

สำหรับคนที่ใช้ IIS ของ Microsoft ลองดูที่ Link นี้นะครับ
สามารถใช้ ModRewrite ได้เหมือนกัน


http://www.scriptdd.com/webtip/apache-mod-rewrite-easy-url.html

MySQL 5.x กับภาษาไทย UTF8 ภาษาไทยเพี้ยน? ไม่รองรับภาษาไทย?

สำหรับคนที่เพิ่งเริ่มเล่น phpMyAdmin ใหม่ๆ จะมีปัญหากับเรื่องของภาษาไทยเยอะมากครับ เพราะสิ่งนึงคือไม่เข้าใจเรื่องของการ ENCODING, CHARSET วันนี้จะมาอธิบายให้เข้าใจง่ายๆ

charactor encoding สำหรับ เว็บไซต์ ที่มีพื้นฐานอยู่บนภาษา html นั้นคือการแปลภาษาครับ แปลภาษาในที่นี้ก็คือ การเข้ารหัสตัวอักษร อย่างทั่วโลกที่นิยมกันคือ utf-8 บ้านเรา แต่ก่อนก็ใช้ window-874 และ tis-620 ซึ่งตอนนี้ผมเลิกใช้ไปแล้ว เพราะมีปัญหากับการ เพิ่ม,แก้ไข ข้อมูลใน MySQL ที่ทำให้ใน MySQL อ่านตัวหนังสือภาษาไทยไม่ได้

ส่วน หนึ่งมาจากความไม่เข้าใจในเรื่องของการติดตั้ง server ซึ่งขั้นตอนการติดตั้งใน version 5.x.x นั้นจะมีให้เลือก default-character-set ซึ่งจะแนะนำเป็นขั้นตอนดังนี้ครับ

ให้เลือก default-character-set เป็น utf-8 ถ้าเว็บไซต์ของเราใช้ encoding เป็น UTF-8 ครับ

ให้เลือก default-character-set เป็น tis-620 ถ้าเว็บไซต์ของเราใช้ encoding เป็น tis-620


tis-620 นั้น มีข้อเสียคือ เราอ่านกันได้เฉพาะพี่ไทยเท่านั้นครับ ส่วนใหญ่แล้ว browser ที่อยู่ในเมืองนอกเขาจะตั้ง default ไว้เป็น utf-8 เื่มื่อเ้ขาเปิดเว็บไซต์เราเข้ามา มันก็จะเป็นภาษายึกยือ หรือภาษาต่างดาว ที่อ่านไม่ออก ต้องไปเลือก charactor encoding เป็น Thai (TIS-620) ให้วุ่นวายเข้าไปอีก

ปัญหาที่เคยเกิดขึ้นกับคนที่ใช้ MySQL 4.x
 คือ มันไม่สามารถเรียงตัวอักษร (ORDER BY cluase) ที่เป็นภาษาไทยได้ ซึ่งแน่นอนครับ มันเก็บได้แต่ภาษาไทย แ่ต่มันไม่รู้จักอักขระที่เป็นภาษาไทยนั่นเอง 

สิ่งที่แนะนำในการแก้ไขปัญหานี้ก็คือ
- ติดตั้ง AppServ , XAMPP, หรืออื่นๆ โดยใช้ charactor set เป็น UTF-8 ครับ
- ตั้งค่า charactor encoding ใน เครื่องมือสำหรับจัดการเว็บไซต์ให้เป็น utf-8 ครับ

โดยแก้ไขตรงส่วนนี้ ให้เป็น


- ถ้ามีการติดต่อฐานข้อมูล ให้เพิ่มในส่วนของ mysql_db_query($dbname,"SET NAMES UTF8");
- หรือ mysql_query("SET NAMES UTF8");

* connection ตรงนี้หมายถึงว่า ทุกครั้งที่มีการติดต่อ ให้เรา เพิ่มบรรทัดนี้เข้าไปครับ ไม่ว่าจะ select, update

หรือถ้าใครที่ทำมาแบบนี้ก็ ใส่กันแค่ทีเดียวครับ
โค๊ด:
$server="localhost";
$db_user="root";$db_pwd="1234";$db_name="my_database";
$conn = @mysql_pconnect($server,$db_user,$db_pwd) or die(mysql_error());mysql_query("SET NAMES UTF8");
@mysql_select_db($db_name,$conn) or die(mysql_error());?>

ถ้าจะอัพเกรดจาก MySQL 4.x มาใช้ 5.x ต้องทำยังไงให้ มันอ่านภาษาไทยได้
ก่อนอื่นเลย เราต้อง backup database ออกมา ด้วยการ Export เท่านั้น!! ถ้าติดนิสัยมักง่ายแบบเเดิมๆ ก็คือ copy ข้อมูลใน MySQL/data เอาไว้ พอลง version ใหม่ก็ paste ไปไว้ที่เดิม วิธีการนีืถือว่าผิดครับ!! เพราะมันคนละ version กัน ภาษาที่คุณได้ อาจจะไม่ใช่ ทีุ่คุณต้องการจะเห็น

เพราะ ว่า 4.x กับ 5.x มีความต่างกันมาก ด้วยเรื่องการการเรียงภาษาไทยครับ อย่าเข้าใจว่า มันแค่เก็บภาษาไทยได้ แต่ปัจจุบัน มันคือการเรียงตัวอักษรภาษาไทยครับ ด้วย collation ซึ่งใน 4.x ไม่มีส่วนนี้มันเป็น field ที่เพิ่มเข้ามาใจ 5.x เดี๋ยวอ่านข้อมูลต่อไปจะเข้าใจครับ

ขั้นตอนการ Export
- ให้เรา export ออกมาโดย เลือกเป็น SQL compatibility mode : MySQL40 นะครับ Compression: zipped
- เมื่อได้ก้อนข้อมูลมาแล้ว ก็ upgrade เป็นเวอร์ชั่นใหม่ แล้ว ก็ import เข้าไปโดย วิธีการ import ผ่าน phpMyAdmin
- เลือก Character set of the file: utf8 (ซึ่งตามค่ามาตรฐานที่เราตั้งไว้ตอนที่ติดตั้งครับ)
- เลือก SQL compatibility mode : MySQL40
- ทำการ import
* ปัญหาจะเกิดขึ้น อาจเป็น error ของข้อมูล ดันนี้ต้องแตกเป็นข้อๆไปครับ ว่าเกินจากอะไร ถ้าัยังไงโพสถามไว้ดีกว่า
* ข้อมูลที่นำเข้า อาจจะใหญ่ ทางที่ดี แบ่งเ็ป็น ส่วนๆ แล้วค่อย import


อ้างจาก: บทความโดย: Apples
ทำความเข้าใจกับเครื่องหมาย
  ??????????????????????????????????????????????????????????????
  ??????????????????????????????????????????????????????????????
  เวลาดึงฐานข้อมูลจาก MySQL หรือ phpMyAdmin

  ปัญหานี้เป็นปัญหาจริงหรือ
    - ไม่ใช่ปัญหาแต่ว่าผู้ใช้ปรับตัวเข้ากับเวอร์ชั่นใหม่ไม่เป็น

  ถ้าไม่ใช่ปัญหาแล้วจะทำยังไงกับ MySQL 5.x , 4.1.x ที่ไม่ยอมเป็นไทย
    - เวลา Connect Database ให้เพิ่มในส่วนของ mysql_db_query($dbname,"SET NAMES tis620");
      เพิ่มเข้าไปทุกครั้งมีมีการ Connect

  ทำการเพิ่ม SET NAMES tis620 ไปแล้วแต่ phpMyAdmin เวลา Dump ข้อมูลมันก็ยังเป็น ????? อยู่อีก

    - เปิด my.ini ขึ้นมาโดยกดที่ Start -> run พิมพ์ my.ini แล้วกด Enter
      ในส่วนของ [client] ให้เพิ่ม
           default-character-set = tis620
      ในส่วนของ [mysqld] หลัง database directory ให้เพิ่ม
           default-character-set = tis620
           character-set-server = tis620
           collation-server = tis620_thai_ci
           init_connect = 'SET collation_connection = tis620_thai_ci'
           init_connect = 'SET NAMES tis620'

      จากนั้น Restart MySQL

  แล้วคนใช้ UTF-8 จะทำยังไงในเมื่อเรา SET ทุกอย่างเป็น tis620 หมด
    - คนใช้ UTF-8 ต้องมา mysql_db_query($dbname,"SET NAMES UTF8"); เองซะแล้ว !!
      ** ในการ Input ข้อมูลต่างๆใน phpMyAdmin นั้นจะไม่มีผลใดๆ กับผู้ใช้ UTF8

  เมื่อก่อนไม่เห็นมีแบบนี้เลยแล้วเมื่อก่อนให้เลือก character set คืออะไร
    - เมื่อก่อนเป็น Character Set แบบปลอมๆ คือข้อมูลต่างๆที่เก็บลงฐานข้อมูลมันคือ latin1 นั่นเอง
      แล้วทำไม Latin1 มันใช้ภาษาไทยได้หละ แน่นอนอยู่แล้วมันใช้ได้เนื่องจาก latin1 มัน Key map แบบเดียวกะ keyboard ไทย
      และประเทศอื่นๆ ก็เป็น Key Map เดียวกัน แต่สมัยนี้พวกภาษาจะไม่ขึ้นอยู่กับ Key Map ที่เราเห็นอยู่แล้ว (UTF-8)
      *** และที่สำคัญในเวอร์ชั่น 4.0, 3.x มีให้เลือก character set ตรงนั้นไม่ได้มีความหมายว่า เก็บข้อมูลเป็นภาษาไทย
       ความหมายของมันคือ เรียงลำดับภาษาไทย ต่างหาก คนไทยจึงเข้าใจผิดๆ มานาน -_-' กับ tis620 ใน MySQL
      ไม่ก็ลองย้อนไปดูได้ครับแม้ว่าจะเลือก charset เป็น latin1 มันก็เก็บข้อภาษาไทยได้ เพียงแต่เรียงลำดับภาษาไทยไม่ได้เท่านั้น

  แล้วทำไมสมัยนี้ MySQL ทำไมยุ่งยากกว่าเดิมเยอะ
    - มันไม่ได้ยุ่งยากหรอกครับ มันอยู่ที่เราจะปรับตัวมากกว่า อย่ายึดติดกับหนังสือตามห้องสมุด เพราะที่ท่านอ่านมันเป็นความรู้เก่าๆ
      ผมไม่ได้บอกว่าหนังสือที่เค้าขายกํนมันไม่ดีนะครับ เพียงแต่อยากจะบอกว่าที่เค้าขายกัน มันตกยุคไปนานโขแล้ว
      เริ่มต้นทำความเข้าใจกับ MySQL ใหม่ เพราะที่มองเห็นว่ายุ่งยากกว่าเดิมจริงๆ ไม่ใช่ ควรเรียกว่าเป็นทางเลือกใหม่จะเหมาะสมกว่า
      เพราะว่าระดับภาษาของ MySQL จะเจาะลึกลงไปเยอะมากคือ
        - ต้องกำหนดภาษาเมื่อ Connect to Database
        - ต้องกำหนดภาษาเมื่อ Create Database (การเรียงลำดับ)
        - ต้องกำหนดภาษาเมื่อ Create Table (การเรียงลำดับ)
        - ต้องกำหนดภาษาเมื่อ Create Field (การเรียงลำดับ)

  รู้ปัญหามานานแล้วทำไมพึ่งมาบอก ??
    - เพราะผมเลิกใช้ TIS-620 ไปแล้ว ตอนนี้ใช้แต่ UTF-8 ดีกว่าเยอะ !!

  ความเสถียรของ MySQL 5.x เป็นยังไงบ้างเมื่อเทียบกับตัวเวอร์ชั่นเก่าๆ
    - เสถียรกว่าเวอร์ชั่นเก่าๆ มาก ไม่มีอาการ Crash อิดๆ ออดๆ เหมือนแต่ก่อน ดังนั้น แนะนำให้ใช้เป็นอย่างยิ่ง

  PHP5 ทำไมมี Bug เยอะจัง
    - อันนี้ก็เข้าใจผิดๆ อีกเรื่องหนึ่งที่เจอกันเยอะมาก เข้าใหม่เสียว่า ที่ดูเป็น Bug ที่เห็นนั่นแหละ
      คือเราเองเขียน Source Code ผิด เนื่องจาก PHP5 มี Sesnsitive มากๆ เกี่ยวกับการเขียน Code หลังจากที่
      ผมเลือกใช้ PHP5 ผมจึงรู้ว่าสมองอันน้อยนิดที่คิดว่าผมเขียนโปรแกรมถูกนั้น ปรากฏว่าเจอ Error กระจาย
      ต้องมาไล่แก้ code ใหม่อีกครั้ง ซึ่ง Error ที่แจ้งออกมา เราจะเห็นได้ว่าเราเขียนผิดเองจริงๆ และทำให้ผมมองย้อน
      กลับไปที่ PHP4 จึงทำให้รู้ว่า PHP4 นี่แหละที่มี Bug เยอะกว่า PHP5เพราะว่าไม่ยอมแจ้งข้อผิดพลาดขึ้นมาเลย
      ทั้งๆ ที่มีผิดอยู่เห็นๆ บทพิสูจน์นี้ทดสอบบน Domain ที่อยู่ใน Hosting ผมกว่า 60 กว่าโดเมนสามารถทำงาน
      ได้กับ PHP5 ได้อย่างไม่มีปัญหาใดๆ เลยแม้แต่น้อย อีกทั้ง PHP5 ยังทำงานเร็วกว่า PHP4 เพราะเนื่องจากว่า PHP5
      เลือกใช้ Zend Engine 2 นั่นเองจึงทำให้ความเร็วเพิ่มขึ้นมาประมาณ 20% และลด Load CPU ของ Server
      ลงไปเยอะมาก

  แล้วแบบนี้ก็ต้องหันมาใช้ PHP5 แทนที่ PHP4 ใช่ไหม ?
    - อันนี้ขึ้นอยู่กับความชอบของแต่ละคน แต่ถ้าให้ผมแนะนำใช้เถอะครับ เพราะตอนนี้ PHP6 เค้าจะออกมากอีกแล้ว
      แต่ว่าตอนนี้คุณยังไม่ได้เริ่มต้นที่จะทดลองใช้ PHP5 เลย ขืนใช้ PHP4 แล้ว Upgrade เป็น PHP6
      ผมรับประกันได้เลยว่าคุณต้องปวดหัวแบบสุดๆ แน่นอน !! แล้วจะมาบอกอีกไม่ได้ว่า PHP5 และ PHP6 เค้ามี Bug !
      ใช้ PHP4 แทนแล้วกัน ก็ขอยืนยันอีกครั้งว่า Source Code ของคุณจะเป็น Source Code รุ่นโบราณที่สุดในโลก

3/18/2555

รอบรู้ระบบการทำงานของ NAT ตอน เชื่อมต่ออินเทอร์เนตอย่างปลอดภัยและประหยัด

ปัจจุบันเทคโนโลยี อินเทอร์เนตเข้ามามีบทบาท ในระบบเครือข่ายเป็นอย่างมาก จากเดิมที่มีการนำเครื่องคอมพิวเตอร์เพียงเครื่องเดียวต่อโมเด็มเข้ากับอินเทอร์เนต กลายมาเป็นการนำเอาระบบเครือข่ายทั้งคณะไปเชื่อมต่อกับอินเทอร์เนตแทน ซึ่งมีทั้งผลดีและผลเสียตามมามากมาย
ปัจจุบันเทคโนโลยี อินเทอร์เนตเข้ามามีบทบาท ในระบบเครือข่ายเป็นอย่างมาก จากเดิมที่มีการนำเครื่องคอมพิวเตอร์เพียงเครื่องเดียวต่อโมเด็มเข้ากับอินเทอร์เนต กลายมาเป็นการนำเอาระบบเครือข่ายทั้งคณะไปเชื่อมต่อกับอินเทอร์เนตแทน ซึ่งมีทั้งผลดีและผลเสียตามมามากมาย อย่างไรก็ดี การเชื่อมต่อสื่อสารระหว่างเครือข่ายผ่าน อินเทอร์เนต นับวันจะได้รับความนิยม ความสะดวกและเต็มไปด้วยวิถีทางที่ประหยัดมากขึ้น
ในอดีตการเชื่อมต่อกับอินเทอร์เนต เป็นเรื่องที่เสี่ยงต่อภัยคุกคามจากผู้ไม่หวังดี อีกทั้งการ เชื่อมต่อกับอินเทอร์เนตท่านจะต้องจ่ายค่าเช่าใช้ ไอพีแอดเดรส จากผู้ให้บริการอินเทอร์เนต ด้วยค่าใช้จ่าย ที่ท่านยังมองไม่เห็นความคุ้มค่าของมัน อีกทั้งยังต้องเสี่ยงกับความปลอดภัยอีกด้วย
ปัจจุบันเทคโนโลยีอินเทอร์เนตได้ล้ำหน้ากว่าที่คิด มีการพัฒนาวิธีการ ซ่อนไอพีแอดเดรสของคอมพิวเตอร์ที่อยู่ในเครือข่าย ทำให้เครือข่ายหรือคอมพิวเตอร์ในอินเทอร์เนตไม่สามารถมองเห็นได้ เมื่อมองไม่เห็นก็ไม่สามารถทำอะไรเครือข่ายภายในได้ วิธีการ เช่นนี้ ได้รับความนิยมมากในช่วง 2-3 ปีที่ผ่านมา บนระบบปฏิบัติลีนุกซ์ ซึ่งเรียกมันว่า IP Masquerading โดยทั่วไปจะเรียกว่า Network แอดเดรส Translation (NAT) ดูรูปที่ 1
รูปที่ 1 แสดงการวางตำแหน่งของ NAT ระหว่างเครือข่ายภายในกับภายนอก
Network แอดเดรส Translation (NAT เป็นวิธีการหนึ่งในการแปลงและแปลไอพีแอดเดรสของเครือข่ายภายใน ให้เป็น ไอพีแอดเดรส ซึ่งเป็นที่ยอมรับและสื่อสารบนอินเทอร์เนต
NAT ให้ประโยชน์มากมายหลายรายการ อาทิ เช่นท่านสามารถใช้ไอพีแอดเดรสที่ตั้งขึ้นมาเองได้ (ซึ่งเป็น ไอพีแอดเดรส ที่ไม่ต้องจดทะเบียนบนอินเทอร์เนต) เพียงแต่ใช้ไอพีแอดเดรสที่ผู้ให้บริการอินเทอร์เนตให้มาก็พอ อีกทั้งยังสามารถซ่อน ไอพีแอดเดรส ที่อยู่ในเครือข่าย (ไอพีแอดเดรสที่ท่านกำหนดขึ้นมาเอง ) ได้ ทำให้มีความปลอดภัย รวมทั้งไม่จำเป็นต้องอ้างแอดเดรสเลขหมายซ้ำๆอีก เมื่อต้องการติดต่อกับอินเทอร์เนต หรือ เครือข่ายขององค์กร อย่างไรก็ดี การใช้ NAT มิใช่ทางเลือกการเชื่อมต่อที่ดีที่สุด รวมทั้งการประหยัด
การใช้ NAT เพื่อจุดมุ่งหมายขั้นพื้นฐาน มีดังนี้
  • NAT ยอมให้ท่านสามารถซ่อน ไอพีแอดเดรส ของเครือข่ายภายในองค์กร ด้วยจุดประสงค์เพื่อรักษาความปลอดภัย เมื่อบุคคลภายนอกไม่สามารถล่วงรู้ IP จริงภายในของเรา ก็ย่อมมีความปลอดภัย
  • หากท่านมีเครือข่ายภายใน ที่มีการจัดตั้ง Configured ให้ใช้ ไอพีแอดเดรส ที่ไม่ได้จดทะเบียนให้ใช้บนอินเทอร์เนต หรือ จาก ISP การใช้ NAT จะช่วยให้การเชื่อมต่อเครือข่ายภายในองค์กรกับอินเทอร์เนตซึ่งถือว่าเป็นเครือข่ายสาธารณะนั้น มีความปลอดภัย เนื่องจาก NAT จะทำการแปลง ไอพีแอดเดรส ของเครือข่ายในองค์กร ให้ใช้ ไอพีแอดเดรส ที่จดทะเบียนถูกต้องบนอินเทอร์เนตเสีย ก่อนที่จะส่งข้อมูลข่าวสารออกไปที่ อินเทอร์เนต
  •  คอมพิวเตอร์ภายในองค์กร ที่ได้รับการจัดตั้ง ไอพีแอดเดรส แบบ Static NAT (เช่น Mail Servers เป็นต้น) สามารถที่จะถูก แปล แอดเดรส เมื่อติดต่อกับภายนอก โดยไม่ต้องมีการ Update ข้อมูลบันทึกบน NAT
  • NAT สามารถเก็บรักษา ไอพีแอดเดรส ที่ได้จดทะเบียนถูกต้องจำนวนหนึ่งไว้ เพื่อให้เครือข่ายภายในใช้เพื่อติดต่อกับ อินเทอร์เนต
  • การออกแบบเครือข่ายภายใต้ NAT สามารถทำได้ง่าย เนื่องจากมีแบบแผนการอ้าง แอดเดรส อย่างไร้ขีดจำกัด (ไม่มีข้อจำกัดในการเติบโตของเครือข่าย ซึ่งอาจนำไปสู่ ไอพีแอดเดรส ที่ไม่พอเพียง)
  • เมื่อมีการติดต่อกันระหว่างเครือข่ายภายในกับ อินเทอร์เนตเกิดขึ้น NAT จะสามารถใช้แบบแผนการอ้าง แอดเดรส ของ NAT เองได้อย่างรวดเร็ว และสามารถจัดการเชื่อมต่อให้ได้อย่างชนิดไร้รอยตะเข็บ
  •  NAT ไม่ต้องการ การอ้าง แอดเดรส ของเครือข่ายชนิด ซ้ำซาก ในการติดต่อสื่อสารกับอินเทอร์เนต
  • ความปลอดภัยของเครือข่าย จะเพิ่มขึ้น โดยการซ่อน ไอพีแอดเดรส ของเครือข่ายภายในองค์กร
ข้อเสียเปรียบ
  •  เป็นระบบที่ทำให้ ยากต่อการติดตามที่มาของ ไอพีแอดเดรส หรือผู้ใช้บน อินเทอร์เนต เนื่องจากผู้ที่ติดต่อเข้ามา แม้จะใช้ ไอพีแอดเดรส ที่ถูกต้อง แต่เนื่องจากเป็นการติดต่อเข้ามาโดยผ่าน การแปลง แอดเดรส โดย NAT จึงไม่สามารถติดตามได้ว่า เป็นการติดต่อมาจากเครื่องใด อย่างแท้จริง ทั้งนี้ เป็นเพราะคอมพิวเตอร์ทุกเครื่องภายในองค์กร เมื่อสื่อสารผ่าน NAT จะมีการใช้ ไอพีแอดเดรส ที่ถูกต้องตัวเดียวกัน นั่นเอง
  • เส้นทางการสื่อสารกับโลกภายนอก อย่าง เช่น อินเทอร์เนต จะต้องเกิด ช่วงหน่วงเวลา หรือที่เรียกว่า Delay เนื่องจากทุกๆ แอดเดรส ภายในเครือข่ายขององค์กร จะต้องได้รับการแปลงให้เป็น ไอพีแอดเดรส อย่างถูกต้องเสียก่อน หากมีการติดต่อกับอินเทอร์เนต ทีเดียวพร้อมๆกัน หลายๆเครื่อง ก็อาจเกิดปัญหาติดขัดได้ แม้จะไม่มากนักก็ตาม
การทำงานของ NAT
NAT เป็นระบบการอินเตอร์เฟซกับอินเทอร์เนต ที่ไม่ขึ้นอยู่กับ Protocol และ Application รวมทั้ง อุปกรณ์ Hardware ใดๆ ซึ่งหมายความว่า NAT สามารถถูกนำมาประยุกต์ใช้งานกับ Router หรือคอมพิวเตอร์ที่ทำหน้าที่เป็น Router ใดๆ ที่มีลักษณะการเชื่อมต่อ โดยมีด้านหนึ่งสำหรับเครือข่ายภายใน และอีกด้านหนึ่งกับเครือข่ายภายนอก ดังเช่น อินเทอร์เนต ตัวอย่างการเชื่อมต่อ เช่น การติดตั้ง NAT ที่ Border Router ซึ่งเป็น Router ที่เชื่อมต่อเครือข่ายย่อยๆ ต่างๆ ภายในองค์กรกับเครือข่ายภายนอก ดูรูปที่2
รูปที่ 2 แสดงลักษณะการเชื่อมต่อของ NAT Router
NAT สามารถทำงานได้ในรูปแบบ 2 ทาง หรือการเชื่อมต่อสื่อสารทั้งในแบบ Inbound และ Outbound หมายความว่า สามารถจัดการกับ ไอพีแอดเดรส ที่วิ่งเข้ามา หรือ ไอพีแอดเดรส ที่วิ่งออกไป โดยสามารถจัดการกับ ไอพีแอดเดรส ต้นทางและปลายทางได้เป็นอย่างดี NAT สามารถทำงานในสถานการณ์ 3 ประการ ดังนี้
  • ทำหน้าที่แปลงและแปล ไอพีแอดเดรส ต้นทางที่มาจากเครือข่ายภายใน
  • ทำหน้าที่ แปลงและแปล ไอพีแอดเดรส ต้นทางที่มาจากเครือข่ายภายนอก เช่น อินเทอร์เนต เป็นต้น
  •  ทำหน้าที่แปลงและแปล ไอพีแอดเดรส ปลายทางภายในเครือข่าย
แม้ว่า NAT สามารถใช้ กับ ไอพีแอดเดรส ภายนอกก็ตาม แต่โดยทั่วไป NAT มีไว้เพื่อการแปล ไอพีแอดเดรส ภายในเครือข่าย จุดประสงค์ก็เพื่อที่จะซ่อน ไอพีแอดเดรส ภายในเครือข่าย และ/หรือ การแปล ไอพีแอดเดรส ที่ไม่ได้จดทะเบียนถูกต้อง (หรือ ไอพีแอดเดรส ส่วนตัว) ไปใช้เป็น ไอพีแอดเดรส ที่จดทะเบียนถูกต้อง ที่สามารถวิ่งไปตามเส้นทางบนอินเทอร์เนต การที่จะให้ทำเช่นนี้ได้ จำเป็นต้องมีการจัดตั้ง Configuration ที่ถูกต้องก่อนการใช้งานเสมอ
ก่อนอื่น เรามาดูประโยชน์ที่ได้จากการ ใช้ NAT อย่างใกล้ชิด ดังต่อไปนี้
สามารถขจัดการเสียเวลาจากการอ้าง แอดเดรส ซ้ำซาก
สมมตว่า ท่านมีเครือข่ายที่ประกอบด้วย ไอพีแอดเดรส ที่ไม่ได้จดทะเบียนถูกต้อง และต้องการให้เครือข่ายของท่านนี้ เชื่อมต่อกับอินเทอร์เนต และแน่นอน หากต้องการให้ Packet จากเครือข่ายของท่านสามารถวิ่งบนอินเทอร์เนตได้ ไอพีแอดเดรส ที่เป็นต้นทางและปลายทางจะต้องได้รับการจดทะเบียนถูกต้องบนอินเทอร์เนตเสียก่อน ดังนั้น หากท่านต้องการให้คอมพิวเตอร์เครื่องใดเครื่องหนึ่งของท่านรับและส่งข้อมูลผ่านอินเทอร์เนต ท่านจะต้องอ้าง แอดเดรส โดยตลอดซ้ำแล้วซ้ำเล่า ซึ่งไม่เพียงแต่ทำให้ ต้องเสียเวลาและเงินทองมิใช่น้อย แถมท่านจะต้องมี ไอพีแอดเดรส ที่ถูกต้องเป็นจำนวนมาก เพื่อนำมาใช้
NAT จะช่วยให้ท่านสามารถใช้ ไอพีแอดเดรส เดิมที่มีอยู่ ถึงแม้ไม่ได้จดทะเบียนถูกต้องก็ตาม เพียงแต่ท่านจะต้องมี ไอพีแอดเดรส ที่ถูกต้องจำนวนหนึ่งก็พอ ซึ่ง ไอพีแอดเดรส จำนวนน้อยนิดนี้ ท่านสามารถนำไปใช้สร้างเป็น ไอพีแอดเดรส Pool (ไอพีแอดเดรส ที่คอมพิวเตอร์บนเครือข่าย นำมาแบ่งใช้งานร่วมกัน) ด้วยวิธีนี้ คอมพิวเตอร์ภายในเครือข่ายสามารถใช้ ไอพีแอดเดรส ที่ถูกต้อง ติดต่อกับอินเทอร์เนตได้ และการร้องขอเข้ามาเพื่อเชื่อมต่อกับคอมพิวเตอร์ในเครือข่ายจากภายนอก จะใช้ ไอพีแอดเดรส ของ NAT เป็น แอดเดรส ปลายทาง ซึ่ง NAT จะทำการแปลและนำเอา ไอพีแอดเดรส ของ NAT ใน แอดเดรส Pool นี้ไปเป็น ไอพีแอดเดรส ที่ใช้งานภายในเครือข่ายต่อไป
การทำงานของ Port แอดเดรส Translation หรือ PAT
Port แอดเดรส Translation (PAT) เป็น Option เพิ่มเติมที่เกี่ยวกับการทำงานของ NAT ซึ่งจัดเป็นชุดการทำงานรองของ NAT หน้าที่ของ PAT ได้แก่การแปล ไอพีแอดเดรส ให้เป็น PAT ไอพีแอดเดรส เพียงชุดเดียว ซึ่ง PAT ให้การสนับสนุนการทำงานบนโปรโตคอล UDP และ TCP เท่านั้น
ภายใน PAT ประกอบด้วยตาราง ไอพีแอดเดรส ซึ่งภายในจะมี ไอพีแอดเดรส ที่ผ่านการจดทะเบียนถูกต้องแล้วอยู่ 1 แอดเดรส โดย ไอพีแอดเดรส ต้นทางที่อยู่ในเครือข่ายภายใน จะถูกจัด Map เข้าไปไว้ภายใน PAT ไอพีแอดเดรส แห่งนี้ การทำงานในส่วนนี้ของ PAT จะคล้ายกันกับการทำงานของ NAT จะต่างกันก็ตรงที่ PAT จะใช้เพียงแค่ 1 ไอพีแอดเดรส เท่านั้น การที่เขา (ฝรั่ง) เรียกว่า PAT ก็เนื่องจากมีการทำงานในลักษณะ แลกเปลี่ยน (Swapped) ไอพีแอดเดรส ไปมาของ PAT โดยมี หมายเลข Port ที่เกี่ยวข้องกับการเชื่อมต่อในแต่ละครั้ง จะถูกแปลไปเป็นเลขหมาย Port ที่ต่างกัน ค่าจากการเปลี่ยนแปลงนี้ จะถูกเก็บรักษาไว้ที่ตาราง PAT เพื่อใช้พิสูจน์ ว่าข้อมูลที่ได้ จากเครือข่ายภายใน จะส่งออกไปให้ใครบ้างที่เคยขอจากเครือข่ายภายนอก โดยไม่สับสนและผิดพลาด
PAT สามารถถูกจัดตั้งให้ใช้ ไอพีแอดเดรส แบบเฉพาะเจาะจงก็ได้ หรืออาจจะใช้ ไอพีแอดเดรส ของ Interface (เช่น LAN Card) ที่ติดตั้งอยู่บน คอมพิวเตอร์ที่ใช้เป็น NAT หรือที่ตัว NAT Router ก็ได้ ต่อไปนี้ เป็นตัวอย่าง ในการจัดตั้ง Configured บน Router Cisco ที่สนับสนุน PAT ดังนี้ (สมมตว่า มีการกำหนด Access list 100 บน Router เอาไว้
router (config-int) #ip nat outside
router (config) #ip nat pool NATแอดเดรสes 189.198.211.10
189.198.211.10 netmask 255.255.255.0
router (config) #ip nat inside source list 100 pool NATแอดเดรสes overload
<<จบตีกรอบปูสกรีน>>
ตัวอย่างแสดงการจัด Configured PAT โดยการใช้ ไอพีแอดเดรส แบบเฉพาะเจาะจง
ตัวอย่างแสดงการจัด Configured PAT โดยการใช้ ไอพีแอดเดรส ของ Interface บน Router เอง
<<ตีกรอบปูสกรีน>>
router (config-int) #ip nat outside
router (config) #ip nat inside source list 100 interface serial0 overload
เมื่อใดที่ควรจัด Configured และเมื่อใดที่ยังไม่ควร
แม้ว่า Network แอดเดรส Translator ให้ประโยชน์มากมายหลายประการก็ตาม แต่ก็ยังมีเหตุผลหลายประการที่ยังไม่ควรใช้ NAT
สมมตว่าท่านใช้ Router Cisco ที่มี IOS ให้การสนับสนุน NAT ซึ่งสามารถ ทำงานร่วมกับApplication และ Traffic หลายประเภท หากท่านต้องการใช้ Cisco IOS NAT ท่านจะต้องตรวจสอบดูก่อนว่า Cisco IOS NAT ให้การสนับสนุน Application ที่ท่านใช้อยู่หรือไม่ โดยมีข้อเท็จจริงอยู่ว่า Cisco IOS NAT ให้การสนับสนุน Application ใดๆก็ได้ ที่มีการสื่อสารบน TCP และ UDP ยกเว้นมีการใช้ IP Packet เป็นผู้นำพาข้อมูลข่าวสารที่มีลักษณะเป็นกระแส (Data Stream) ซึ่ง NAT IOS ไม่ให้การสนับสนุน แต่อย่างไรก็ดี ก็ยังมีข้อยกเว้นสำหรับ Application และ Protocol ที่เป็นดังต่อไปนี้
  •  ICMP
  • FTP
  •  NetBIOS over TCP/IP (NBT)
  • Real Audio
  • CuSeeMe
  • Streamworks
  • DNS's A และ PTR Queries
  • H.323 Version 12.0
  • NetMeeting Version 12.0
  • VDOLive Version 11.3
  • Vextreme Version 11.3
ต่อไปนี้ เป็น Protocol และ Application ที่ Cisco IOS NAT ให้การสนับสนุน ดังนี้
ตารางที่ 1 แสดงรายการ Protocol และ Application ที่ Cisco IOS NAT ให้การสนับสนุน
สนับสนุนโดย Cisco IOS NAT
ไม่สนับสนุนโดย Cisco IOS NAT
 HTTP
TFTP
Telnet
Archie
Finger S
NTP
NFS
Rlogin, rsh, rcp
IP Multicast
Routing table updates
DNS zone Transfers
talk, ntalk
NMP
NetShow
สิ่งที่ NAT ทำงาน ได้แก่การแปล ไอพีแอดเดรส ในลักษณะแบบฉบับที่เรียก ว่าหนึ่งต่อหนึ่ง หรือจำนวนมากต่อจำนวนมาก โดย ไอพีแอดเดรส ที่อยู่ภายในเครือข่าย จะถูก Map ให้เป็น ไอพีแอดเดรส ภายนอก หมายความว่า ไอพีแอดเดรส ภายในจะถูกแปลงเป็น ไอพีแอดเดรส สำหรับการสื่อสารกับภายนอกที่เหมาะสม หรือในทางกลับกัน
ขั้นตอนในการแปล แอดเดรส มีดังนี้
  •  ไอพีแอดเดรส ที่อยู่ใน IP Header จะถูกแทนที่ด้วย ไอพีแอดเดรส ภายนอก หรือภายใน (ขึ้นอยู่กับทิศทางการวิ่งของ Packet ) และ หมายเลข Port ใน TCP หรือ UDP Header จะถูกเปลี่ยนเป็นเลขหมาย Port อันใหม่ หาก มีการกำหนดให้ NAT จะต้องทำการแปลหมายเลข Port ด้วย
  • ค่า Checksum สำหรับ IP Packet จะถูกคำนวณใหม่ และตรวจสอบเพื่อความถูกต้อง
  • ที่ Header ของ TCP จะได้รับการคำนวณใหม่ เช่นกัน หลังจากที่ได้รับการคำนวณมาแล้วก่อนหน้านี้ครั้งแรก จากเครื่องคอมพิวเตอร์ที่เป็นเจ้าของ ภายในเครือข่าย (หรือเจ้าของที่มาจากเครือข่ายภายนอก)
จากที่กล่าวมาแล้วจะเห็นได้ว่า NAT ทำหน้าที่แปล ไอพีแอดเดรส ของเครื่องต้นทางและเครื่องปลายทาง ขึ้นอยู่กับทิศทาง ของ Traffic ในการที่จะแปลง ไอพีแอดเดรส นั้น NAT จะต้องตรวจสอบที่ ช่อง ไอพีแอดเดรส ของ Packet ซึ่ง Packet ในที่นี้ เราเรียกว่า IP Datagram โดยที่ IP Datagram เป็นรูปแบบของข่าวสาร ที่ใช้ห่อหุ้มข้อมูลและ Protocol ในระดับสูงที่ใช้จัดการกับขนถ่ายข้อมูล อย่างเช่น TCP โดยให้บริการขนถ่ายข้อมูลจาก User File จาก Web Page หรือข่าวสาร Email เป็นต้น
เมื่อคอมพิวเตอร์ได้สร้าง TCP/IP หรือ UDP Traffic ขึ้น เครื่องที่จะส่งข้อมูล จะต้องอาศัย Protocol เพื่อการสร้าง IP Header ขึ้น โดย IP Header จะหุ้มห่อ TCP Header รวมทั้ง Protocol อื่นๆรวมทั้งข้อมูล จากระดับชั้น Application ใน OSI Model (เช่น HTTP หรือ FTP เป็นต้น) เพื่อประกอบขึ้นมาเป็น Packet ชิ้นหนึ่ง
หน้าที่หลักของ IP Header ใน ตัว Packet ได้แก่ การแสดง แอดเดรส ของผู้รับและผู้ส่ง ของ Packet รวมทั้ง ข่าวสารที่แสดงขนาดของ Header และค่าที่ใช้แสดงสถานะของ IP Packet ซึ่งเปรียบได้กับ พัสดุไปรษณีย์ ที่จะต้องจ่าหน้าซองถึงผู้รับและส่ง ขนาดน้ำหนัก ชนิดของบริการขนส่ง (เปรียบได้กับชนิดของ Protocol ที่ใช้) และอื่นๆ ข้อมูลข่าวสารที่อยู่ภายใน IP Header นี้ NAT จำเป็นต้องนำมาใช้เพื่อการแปล ไอพีแอดเดรส
TCP Header
TCP Header ก็เป็นอีกจุดหนึ่งที่ NAT อาศัยข้อมูลภายในของมันเพื่อการ จัดส่ง Packet เข้าๆออกผ่าน NAT หน้าที่หลักของ TCP Header ได้แก่ การจัดการเพื่อให้แน่ใจว่า ข้อมูลข่าวสารมีการรับส่งที่น่าเชื่อถือได้ นอกจากนี้ ยังใช้เพื่อการควบคุมการไหลของข้อมูลข่าวสารระหว่างผู้รับและผู้ส่ง รวมทั้งมีระบบตรวจสอบความถูกต้องของ Header
จากภาพที่ 5 ท่านจะได้เห็น ช่อง TCP Source Port และ TCP Destination Port มีไว้เพื่อเชื่อมต่อ Application Protocol กับข้อมูล เข้ากับ ไอพีแอดเดรส บนคอมพิวเตอร์ผู้รับและผู้ส่ง ซึ่งช่องต่างๆเหล่านี้ อาจต้องถูกปรับแต่งแก้ไขโดย NAT
ลักษณะหน้าตาของ IP Datagram มีดังนี้ (ดูรูปที่ 3, 4 และ 5)
รูปที่ 3 แสดงลักษณะของ IP Packet
รูปที่ 4 แสดงลักษณะของ IP Header
รูปที่ 5 แสดงลักษณะของ TCP Header
NAT มีอยู่ 2 ชนิดหลักๆ ได้แก่
  • Static NAT
  • Dynamic NAT
Static NAT
Static NAT เป็นการแปล ไอพีแอดเดรส ชนิดกำหนดค่า แอดเดรส ตายตัว จากเครือข่ายภายใน ไปยังเครือข่ายภายนอก ส่วน แอดเดรส ภายนอกจะไม่มีการเปลี่ยนแปลง ดังนั้น ความสัมพันธ์ระหว่าง ไอพีแอดเดรส ของ เครือข่ายภายนอกและภายในจะเป็นแบบแน่นอนตายตัว
รูปที่ 6 แสดง ไอพีแอดเดรส ของเครือข่ายภายในกับเครือข่ายภายนอก
จากรูปที่ 6 จะเห็นว่า บรรดาเครื่องพีซี และเซิร์ฟเวอร์ต่างๆที่อยู่เครือข่ายภายใน จะใช้ แอดเดรส ส่วนตัว (Private Address) ของมันเอง รวมทั้งสามารถใช้ แอดเดรส สาธารณะ (แอดเดรส ที่จดทะเบียนถูกต้อง) ในการสื่อสารระหว่างกัน เป็นการภายในได้ แต่ไม่ว่าท่านจะใช้ แอดเดรส อะไรก็ตาม หากต้องการติดต่อกับนอกเครือข่าย จะต้องผ่านการแปลเสียก่อนที่จะออกจากเครือข่ายเสมอ
สมมตว่า มีพีซีเครื่องหนึ่งซึ่งมี ไอพีแอดเดรส ภายในเบอร์ 192.168.10.1 ทำการส่งข่าวสารไปที่ อินเทอร์เนต โดยอ้าง แอดเดรส ที่ 140.49.10.1 ซึ่งแอดเดรสนี้ เป็น แอดเดรส บนอินเทอร์เนต ลักษณะนี้ Packet ที่วิ่งออกจาก PC นั้น จะมี แอดเดรส ต้นทางเป็น 192.168.10.1 ในกรณีนี้ เมื่อ Packet วิ่งมาถึง NAT Router ก็จะถูกแปลงเป็น 192.112.36.1 ซึ่งเป็น ไอพีแอดเดรส ที่ผู้จัดการเครือข่ายได้กำหนดขึ้น ลักษณะนี้ จะเห็นได้ว่า แอดเดรส ภายใน จะสอดคล้องกับ แอดเดรส ภายนอกอย่างแน่นอนตายตัว และทุกครั้งที่ติดต่อออกไปที่ภายนอก ก็จะต้องใช้ แอดเดรส เดิมเสมอ
และเมื่อมีการตอบกลับมาจากเว็บไซท์ที่อยู่บนอินเทอร์เนต ตัว NAT Router จะใช้กระบวนการย้อนกลับ โดย Router จะอ่านค่า แอดเดรส ปลายทาง ที่อยู่บน Packet ที่ส่งตรงมาจากเว็บไซท์ (140.49.10.1) จากนั้นก็จะทำการพิสูจน์เครื่องพีซี ภายในที่ เว็บไซท์ นี้ต้องการติดต่อด้วย จากนั้นก็กำหนด ไอพีแอดเดรส เพื่อติดต่อกับ เครื่องพีซีนั้นๆ ต่อไป (ดูรูปที่ 7)
รูปที่ 7 แสดง ลักษณะการอ้าง แอดเดรส และ MAP แอดเดรส แบบ Static
ข้อดีและข้อเสียของการใช้ Static NAT
แม้ Static NAT จะเป็นระบบที่เรียบง่ายและตรงไปตรงมาก็ตาม แต่ก็มีจุดด้อยหลายประการ ที่ทำให้ Static NAT กลายเป็นระบบที่เหมาะสำหรับ เครือข่ายที่มีข้อจำกัดมากมาย แต่ไม่เหมาะกับเครือข่ายใหญ่ ด้วยเหตุผลหลายประการดังนี้
  • ต้องการการดูแลอย่างมาก การ Map แอดเดรส โดยวิธีการของ Static Map นี้ จะไม่มีการเปลี่ยนแปลงเลขหมาย ไอพีแอดเดรส โดยอัตโนมัติ หากมีการเปลี่ยนแปลง แอดเดรส ภายในหรือภายนอกเกิดขึ้น เช่น หากต้องการเพิ่มหรือแก้ไข แอดเดรส ใดๆ แล้ว ผู้ดูแลเครือข่ายจะต้องเข้ามาจัดตั้งตาราง การแปล แอดเดรส กันใหม่ และเป็นเรื่องน่าเสียดาย หากเกิดความผิดพลาดขณะที่มีการจัดตั้ง ตารางการแปล แอดเดรส
  • มีการใช้งาน แอดเดรส อย่างมาก ในเครือข่ายขนาดใหญ่ การใช้ แอดเดรส ภายในและภายนอก แบบชนิดหนึ่งต่อหนึ่ง นี้ ทำให้กิน แอดเดรส ภายนอกค่อนข้างมาก หากมีเครื่องคอมพิวเตอร์ภายในเครือข่ายเป็นจำนวนมาก เพราะต้องกำหนด 1 เครื่องต่อหนึ่ง ไอพีแอดเดรส ที่ถูกต้อง
  • มีการเลือกเส้นทางที่แน่นอนตายตัว ในกรณีที่มีการเชื่อมต่อกับอินเทอร์เนตแบบหลายๆ Connection เช่น เชื่อมต่อพร้อมกันหลาย ISP เมื่อมีการใช้ Static NAT เกิดขึ้น ระบบนี้จะเลือกเส้นทางที่แน่นอนตายตัว ตามที่ Static NAT กำหนดไว้
จุดด้อยของ Static NAT มิได้หมายความว่า ระบบนี้ไม่เหมาะสมกับ เครือข่ายสมัยใหม่ในปัจจุบัน แต่ Static NAT เหมาะสำหรับระบบเครือข่ายขนาดเล็ก ต่อไปนี้ เป็นรายละเอียดที่แสดงถึงข้อดีของการใช้ Static NAT มีดังนี้
  • จำกัดความต้องการใช้ NAT ภายในเครือข่ายที่ซึ่งมีการจำกัดจำนวนของ PC ที่ใช้ NAT ระบบ Static NAT ดูจะเป็นเครื่องมืออันทรงประสิทธิภาพที่จะควบคุมการ Access ไปที่ภายนอก หมายความว่า การจำกัดจำนวนคอมพิวเตอร์ที่จะออกไปที่อินเทอร์เนต ทำได้โดยการจำกัด ไอพีแอดเดรส สำหรับที่จะออกไปที่ Internet เท่านั้นเอง สำหรับเครือข่ายใดที่ส่วนใหญ่มีการสื่อสารเฉพาะภายใน และมีบางครั้งที่มี Access ไปที่ภายนอกบ้าง เป็นจำนวนน้อย ระบบนี้ จึงเป็นระบบที่ดีกว่า
  • การบริหารจัดการเครือข่าย ปัจจุบันมีระบบเครือข่ายอยู่มากมายที่ต้องการบริหารจัดการกับ Traffic ภายนอก เพื่อต้องการดูว่ามีคอมพิวเตอร์เครื่องใดบ้างที่ติดต่อกับภายนอก ทั้งนี้ก็เพื่อให้ง่ายต่อการตรวจสอบที่มาของปัญหา ว่ามาจากเครือข่ายภายในหรือภายนอก การใช้ Static NAT จะช่วยให้สามารถติดตามดูได้ว่า คอมพิวเตอร์แต่ละเครื่องมี Traffic ไปไหนมาไหนบ้าง
  • สามารถเข้ากันได้กับ Application โดยทั่วไป มี Application บางตัวที่ฝัง ไอพีแอดเดรส ไว้ที่ช่องเก็บข้อมูลของ IP Datagram ซึ่งการทำเช่นนี้ จะทำให้ NAT โดยทั่วไปไม่สามารถสังเกตเห็น แอดเดรส ที่อยู่ในช่องนี้ ซึ่งหมายความว่า Application บางรายการไม่สามารถทำงานได้ตามปกติภายใต้ NAT แต่ Static NAT สามารถถูกจัด Configure ให้ทำงานร่วมกับ Application Level Gateway เพื่อตรวจสอบ IP Datagram ดังกล่าวได้
Dynamic NAT
Dynamic NAT เป็นแบบตรงกันข้าม ที่มีการนำเอา ไอพีแอดเดรส จาก กลุ่มของ ไอพีแอดเดรส ที่แชร์หรือร่วมใช้งานกัน หรือที่เรียกว่า แอดเดรส Pool มาทำการแปล จาก แอดเดรส Pool ภายใน ให้เป็น Address Pool สำหรับเครือข่ายภายนอก หรือในทางกลับกัน รูปแบบนี้จะต้องได้รับการจัด Configure โดยผู้ดูแลระบบเครือข่าย แต่หลังจากที่จัด Configure เป็นที่เรียบร้อยแล้ว Routerที่สนับสนุน NAT จะเป็นผู้จ่าย ไอพีแอดเดรส ให้กับคอมพิวเตอร์อย่างเหมาะสม และเพื่อให้เกิดความรวดเร็วในการทำงาน ผู้บริหารจัดการเครือข่ายจะต้อง ทำการ Map ระยะของ ไอพีแอดเดรส หากเป็นไปได้ (ลักษณะนี้ คล้ายๆกับการทำงานของ DHCP Server ที่ไม่ได้กำหนดเครื่อง PC แต่ละเครื่องให้มี ไอพีแอดเดรส ที่ตายตัว โดยผู้จัดการเครือข่าย จะกำหนด แอดเดรส ขึ้นมาจำนวนหนึ่ง เป็นระยะหรือช่วงของ แอดเดรส เช่น 192.80.20.15 - 192.80.20.50 เป็นต้น ดังนั้นใครที่เข้ามาที่เครือข่ายก่อน ก็จะได้รับแจก แอดเดรส ไปใช้งานก่อน โดยเครื่องคอมพิวเตอร์ จะไม่ได้รับ IP ที่ซ้ำกัน ข้อแตกต่างกันระหว่าง NAT กับ DHCP Server ตรงที่ ไอพีแอดเดรส ของ NAT เป็น ไอพีแอดเดรส ที่ได้รับการจดทะเบียนแล้ว เพื่อแจกให้กับเครื่องคอมพิวเตอร์ที่เข้าๆออกบนเครือข่าย ไปยังภายนอก (ดูรูปที่ 8)
รูปที่ 8 แสดงตัวอย่างการทำงานของ Dynamic NAT
หาก Static NAT เป็นส่วนที่เรียกว่าหัวในเหรียญบาท ดังนั้น Dynamic NAT ก็จะถือได้ว่าเป็นส่วนก้อยของเหรียญ เช่นกัน ตรงที่ว่า Dynamic NAT มีการกำหนด แอดเดรส ให้กับภายนอก แบบพลวัตร หมายความว่า แทนที่จะใช้ระบบกำหนด แอดเดรส ภายในกับ ภายนอกแบบหนึ่งต่อหนึ่ง Dynamic NAT จะกำหนดว่า แอดเดรส ที่ใช้จะเปลี่ยนแปลงไปเรื่อยๆ และจะมีการเปลี่ยนแปลงทุกครั้งที่คอมพิวเตอร์ภายในเครือข่าย มีการสถาปนาการเชื่อมต่อกับคอมพิวเตอร์ภายนอกเครือข่าย หรืออาจมีการเปลี่ยนเป็นระยะๆเวลาก็เป็นได้ (ดูรูปที่ 9 )
รูปที่ 9 แสดงการ Map แอดเดรส ของ PC เครื่องต่อไป ด้วย Dynamic NAT
สมมตว่า เครื่องพีซีพร้อมด้วย ไอพีแอดเดรส ภายในเป็น 192.168.10.3 ใช้ HTTP Traffic ไปที่ 140.49.10.1 เมื่อ NAT Router ได้รับ IP Datagram แต่ละ Packet มันจะทำการดึงเอา แอดเดรส ภายนอก (ที่ผ่านการจดทะเบียนแล้ว) จาก แอดเดรส Pool (ในที่นี้ คือ 192.112.36.1, 192.112.36.2 และ 192.112.36.3) และทำการเปลี่ยน แอดเดรส ต้นทางด้วย แอดเดรส ภายนอก ในขณะเดียวกัน NAT Router จะสร้างตารางที่ประกอบด้วย แอดเดรส ที่ใช้เพื่อแปลไว้ แบบเดียวกับที่ Static NAT ใช้เพื่อแปล แอดเดรส แบบตายตัว หน้าตาของตาราง แอดเดรส เป็นไปตามตัวอย่างรูปที่ 10
รูปที่ 10 แสดงการใช้ NAT Router ของเครื่องพีซีต่างๆ จากเครือข่ายภายใน
ในเวลาเดียวกัน IP Datagram ที่มาจากคอมพิวเตอร์เครื่องที่สองบนเครือข่าย ที่ส่งข่าวสารไปที่เครือข่ายภายนอก จะได้รับการปฏิบัติในทำนองเดียวกันโดย NAT Router ตัวอย่าง เช่น NAT Router อาจแปล ไอพีแอดเดรส ต้นทาง ที่อยู่ใน IP Header ที่ติดต่อออกไปเพื่อต้องการใช้งาน FTP Application จาก PC ที่ใช้ แอดเดรส 192.168.10.4 ไปที่ แอดเดรส ต่อไปใน NAT Address Pool ซึ่งประกอบด้วย แอดเดรสจำนวนหนึ่ง (เช่น 192.112.36.1 - 192.112.36.3) ซึ่งต่อมา NAT Router จะแปล แอดเดรส 192.168.10.4 ให้ เป็น 192.112.36.3 ส่วน PC อีกเครื่องหนึ่งคือ 192.168.10.5 จะได้รับการแปลเป็น 192.112.36.2 หากเครื่องพีซีทั้งสองต้องการติดต่อกับเครือข่ายภายนอก (โปรดดูรูปที่ 9)
เมื่อพีซีแต่ละเครื่องได้เสร็จสิ้นจากภาระกิจในการสื่อสารข้อมูลกับเครือข่ายภายนอกแล้ว ตัว NAT Router ก็จะเรียก แอดเดรส ภายนอกคืนกลับเข้าไปที่ Address Pool เพื่อให้ผู้อื่นใช้ต่อไป
Dynamic NAT พร้อมด้วย IP Overload
เป็นที่ทราบดีว่า Port Address Translation (PAT) สามารถทำการ Map บรรดา แอดเดรส ต่างๆ หลาย แอดเดรส ให้เป็น แอดเดรส เดียวที่เป็น แอดเดรส สำหรับติดต่อกับภายนอก และเนื่องจากการที่ PAT สามารถ Map แอดเดรส สำหรับเครือข่ายภายในหลายๆ แอดเดรส ให้เป็น แอดเดรส เดียวนี่เอง จึงทำให้ เลขหมายของ Port ที่ทำงานบน TCP หรือ UDP นั้น มีมากเพียงพอ ที่จะให้บริการโดยไม่เกิดปัญหาได้ และหากท่านต้องการใช้ขีดความสามารถนี้ ท่านจะต้องเปิด Function การทำงานที่เรียกว่า "Enable IP Overload" ภายใต้คำสั่ง "Nat create dynamic)
ส่วนคำว่า "Overload" ในที่นี้ ใช้ในสถานการณ์ ที่ ไอพีแอดเดรส ใน แอดเดรส Pool มีไม่เพียงพอที่จะให้บริการ จึงต้องอาศัย Port เพื่อแยกความแตกต่างระหว่าง การเชื่อมต่อเข้ามาทั้ง 2 Connection ซึ่งโดยทั่วไป เลขหมายของ Port ที่กำหนดให้ใช้งานคือ 1024 ถึง 4999 ซึ่งเท่ากับมีจำนวน Port ใช้งานมากถึง 4000 Port
ต่อไปนี้เป็นตัวอย่างการใช้ Dynamic NAT พร้อม IP Overload (ดูรูปที่ 11)
รูปที่ 11 แสดงการทำงานของ Dynamic NAT ที่อยู่ระหว่าง เครือข่ายภายใน และ อินเทอร์เนต
Dynamic NAT ที่มีการจัดตั้ง Redundant ที่ Interface ภายนอก
หากท่านมีการเชื่อมต่อกับเครือข่ายภายนอก เช่น อินเทอร์เนต โดยทาง Interface ทั้งสอง เช่น การเชื่อมต่อผ่าน ISP 2 แห่งพร้อมกัน ท่านสามารถใช้ NAT เพื่อการแปล แอดเดรส ภายใน ให้เป็น ไอพีแอดเดรส ภายนอก สำหรับการเชื่อมต่อกับ ISP ทั้งสองเพื่อออกอินเทอร์เนต โดย NAT จะสามารถใช้ ไอพีแอดเดรส ภายนอก 2 ชุดเพื่อสื่อสารผ่านทั้งสอง Interface และออกไปทาง Internet ได้ (ดูรูปที่ 12 และ 13)
รูปที่ 12 แสดงการทำงานของ Dynamic NAT Router หลังจากที่ได้กำหนด Port Loading แล้ว
รูปที่ 13 แสดงการใช้ Dynamic NAT Router เชื่อมต่อแบบ Redundant

3/14/2555

NAT คือ

      ในอดีตการเชื่อมต่อกับอินเทอร์เน็ตนั้น จำเป็นต้องมี Public IP address เป็นการเฉพาะจึงจะสามารถเชื่อมต่อและใช้งานได้ แต่เนื่องจากการเติบโตอย่างรวดเร็วของอินเทอร์เน็ตทำให้ IP ไม่เพียงพอต่อการใช้งาน ดังนั้น NAT จึงเป็นทางออกหนึ่งสำหรับการแก้ไขปัญหานี้ โดยการทำ NAT นั้นทำให้สามารถใช้ private IP เชื่อมต่อและใช้งานอินเทอร์เน็ตได้ และยังเพิ่มความปลอดภัยทางเครือข่าย (network security) อีกด้วย
NAT เป็นมาตรฐานหนึ่งของ RFC ถูกเขียนขึ้นในปี 1994 โดยสามารถแปลง (translation) IP หลายๆ ตัวที่ใช้ภายในเครือข่ายให้ติดต่อกับเครือข่ายอื่นโดยใช้ IP เดียวกัน ซึ่งถ้าดูจากภาพแล้วจะเข้าใจได้ชัดเจนยิ่งขึ้น

จากภาพจะเห็นว่าตัว NAT device มี IP address เป็น 192.168.1.1 สำหรับเครือข่ายภายใน (inside network) และมี IP address เป็น 203.154.207.76 สำหรับเครือข่ายภายนอก (outside network) เมื่อเครื่อง 192.168.1.20 ต้องการสร้างการติดต่อออกไปภายนอก (เช่น อินเทอร์เน็ต) ตัว NAT device ก็จะแปลง IP จาก 192.168.1.20 ไปเป็น 203.154.207.76 ซึ่งถ้ามองจากเครือข่ายภายในแล้วจะเห็นว่า เครื่องในเครือข่ายภายในสามารถ access ออกไปยัง external network ได้โดยตรง ในขณะที่เครื่องจากภายนอกจะไม่สามารถติดต่อเข้ามาได้ถ้าเครื่องจากเครือข่าย ภายในไม่ได้เป็นฝ่ายเริ่มต้นการติดต่อก่อน และข้อมูลขาออกที่ออกไปยัง external network นั้นจะเป็นข้อมูลที่มี source IP address เป็น outside IP address ของ NAT device
คำศัพท์ที่ควรทราบ
Non-Routable Address = IP address ที่อยู่ในช่วงที่ถูกสำรองไว้ ตาม RFC 1597 เพื่อใช้สำหรับ private network ได้แก่ 10.x, 172.16.x - 172.31.x, 192.168.x หรือมักจะถูกเรียกอีกอย่างว่าเป็น private IP address (ภาษาบ้านเราชอบเรียกว่า ไอพีปลอม)
NAT Device = อุปกรณ์ที่สามารถทำ network address translation ได้ เช่น Checkpoint Firewall, Linux box, Cisco 675 DSL router
Outbound Mode = การที่ NAT device ทำงานในลักษณะที่แปลง inside IP address ไปเป็น outside IP adrress และไม่ยินยอมให้ external side เป็นฝ่ายเริ่มการส่ง packet ก่อน
Bi-directional Mode = เมื่อ NAT device อนุญาตให้ external side สามารถเป็นฝ่ายเริ่มต้นส่งข้อมูลเข้ามายัง internal side ได้ โดย NAT จะทำการแปลง พอร์ตและ/หรือ address เรียกกันอีกอย่างว่า Port Address Translation (PAT)
NAT มีขั้นตอนการทำงานอย่างไร
เมื่อ NAT เริ่มทำงาน มันจะสร้างตารางภายในซึ่งมีไว้สำหรับบรรจุข้อมูล IP address ของเครื่องในเครือข่ายภายในที่ส่ง packet ผ่าน NAT device และจากนั้นมันก็จะสร้างตารางไว้สำหรับเก็บข้อมูลหมายเลขพอร์ต (port number) ที่ถูกใช้ไปโดย outside IP address (ในที่นี้คือ 203.154.207.76) และเมื่อมีการส่ง packet จากเครือข่ายภายในไปยังเครือข่ายภายนอก NAT device จะมีกระบวนการทำงานดังต่อไปนี้ :
1. มันจะบันทึกข้อมูล source IP adress และ source port number ไว้ในตารางที่เกี่ยวข้อง
2. มันจะแทนที่ IP ของ packet ด้วย IP ขาออกของ NAT device เอง (ในที่นี้คือ 203.154.207.76)
3. มันจะ assign หมายเลขพอร์ตใหม่ให้กับ packet และบันทึกค่าพอร์ตนี้ไว้ในตาราง และกำหนดค่านี้ลงไปใน source port number ของ packet นั้น
4. จากนั้นจะคำนวณหา IP, TCP checksum อีกครั้งเพื่อตรวจสอบความถูกต้อง
และเมื่อ NAT device ได้รับ packet ย้อนกลับมาจาก external network มันจะตรวจสอบ destination port number ของ packet นั้นๆ แล้วนำมาเปรียบเทียบกับข้อมูล source port number ในตารางที่บรรจุข้อมูลไว้ ถ้าเจอข้อมูลที่ตรงกันมันก็จะเขียนทับ destination port number, destination IP address ของ pakcet นั้นๆ แล้วจึงส่ง packet นั้นไปยังเครื่องอยู่ภายในเครือข่ายภายในที่เป็นผู้สร้าง packet นี้ขึ้นมาในครั้งแรก
ข้อดีของ Outbound Mode NAT เมื่อเปรียบเทียบกับ Firewall
อันตรายของอินเทอร์เน็ตในปัจจุบันนี้ก็คือ เมื่อเราเชื่อมต่อเข้ากับอินเทอร์เน็ต โอกาสที่เครื่องของเราจะถูก scan หรือ probe มีโอกาสสูงมาก เพราะ hackers, crackers หรือ script kiddies ต่างก็จ้องที่จะฉกฉวยข้อมูลไปจากเครื่องของเราตลอดเวลา
บริษัทต่างๆ มักจะใช้ไฟร์วอลล์เป็นตัวป้องกันอันตรายจากอินเทอร์เน็ต ไฟร์วอลล์เป็นอุปกรณ์ที่พิจารณา network traffic โดยจะดูในส่วนของ destination IP, source IP, destination port number, source port number หรือข้อมูล header อื่นๆ ว่าจะให้ผ่านหรือไม่ให้ผ่านตัวไฟร์วอลล์ไป ข้อเสียของไฟร์วอลล์ก็คือความยากในการเขียน rule และการบำรุงรักษา เพราะต้องใช้ความรู้เรื่องเครือข่ายเยอะพอสมควร และการบำรุงรักษานั้นถือเป็นเรื่องที่มีความสำคัญเพราะไฟร์วอลล์ที่มี rule set ที่ซับซ้อนและยุ่งยากมากอาจจะมีช่องโหว่ที่ไม่รู้ตัวก็เป็นได้
NAT ทำงานได้ในระดับเดียวกันกับไฟร์วอลล์แต่สามารถลดค่าใช้จ่ายและไม่ต้องการ ความรู้ด้านเทคนิคมากมายนัก NAT สามารถซ่อน internal network IP address จากเครือข่ายภายนอกไว้ได้ ซึ่งผู้ที่อยู่ภายนอกจะมองเห็นแค่เพียง outside IP address ของ NAT device เท่านั้น ดังนั้นโอกาสในการ broadcast หรือ hack หรือ spoof จึงแทบไม่มีโอกาสเป็นไปได้
ข้อดีอีกอย่างหนึ่งของ NAT คือทำให้ลดภาระของผู้ดูแลระบบลง จากเดิมที่ต้องดูแลทั้ง NAT device และเครื่องต่างๆ ในเครือข่ายภายใน การใช้ NAT ทำให้ผู้ดูแลระบบให้ความสนใจเพียง NAT device เพียงเท่านั้น ซึ่งทำให้ผู้ที่อยู่ภายนอกไม่สามารถส่ง packet เข้ามาได้ ถ้าไม่มีการเริ่มส่งจากเครือข่ายภายในก่อน และทุก packet จะต้องส่งผ่าน NAT device เสมอ
ความง่ายในการดูแลเครือข่ายที่ใช้ NAT
เนื่องจากเราสามารถใช้ non-routable address ในเครือข่ายภายใน ซึ่งสามารถใช้ได้อย่างมากมาย จึงทำให้ลดค่าใช้จ่ายสำหรับ routable address ลงไปได้
สามารถแบ่งเครือข่ายให้เล็กลงได้อย่างง่าย และการเพิ่มเข้า-ลดออกของเครื่องคอมพิวเตอร์ในเครือข่ายก็ไม่มีผลกระทบต่อระบบ
NAT device รุ่นใหม่ๆ สามารถทำหน้าที่เป็น DHCP server ได้ด้วย
NAT device บางยี่ห้อ สามารถจำกัดการเข้าถึงอินเทอร์เน็ตได้ เช่นให้ใช้เฉพาะ HTTP เท่านั้น
มี traffic logging คือมีการบันทึกข้อมูลลงล็อกไฟล์ ทำให้สามารถตรวจสอบรายงานการใช้งานได้
NAT device บางตัวสามารถทำ routing ได้ด้วย ซึ่งทำให้เราสามารถสร้างเครือข่ายที่เป็น sub-network ได้
แต่ NAT สามารถทำงานได้ในหลายโหมด
เมื่อ NAT ทำงานใน outbound mode ทำให้ผู้ที่อยู่ภายนอกไม่สามารถส่ง packet เข้ามาได้ ถ้าไม่มีการเริ่มส่งจากเครือข่ายภายในก่อน การทำงานในลักษณะนี้ยังมีจุดอ่อนในเรื่องของความปลอดภัยดังต่อไปนี้คือ
ถ้า internal side user เรียกใช้เว็บที่มีโค้ดที่เป็นอันตราย (malicious code) เช่น IIS web server ที่ติดไวรัส Nimda หรือ malicious ActiveX code หรือ malicious Java code ซึ่งตัว NAT device เองจะไม่สามารถป้องกันอันตรายในลักษณะนี้ได้
มีโปรแกรมบางตัวที่อยู่ใน เครื่องของ internal side พยายามส่ง packet ออกไป external side เช่น ม้าโทรจัน ซึ่งในกรณีนี้ NAT ก็ไม่สามารถป้องกันได้เช่นเดียวกัน
NAT ไม่ได้ปกป้องข้อมูลภายใน internal host เสมอไป เราสามารถตรวจสอบล็อกไฟล์ในบางเซิร์ฟเวอร์ (เช่น Windows Streaming Media Server) ซึ่งสามารถค้นพบว่า มีข้อมูลของ non-routable address และเวอร์ชั่นของระบบปฏิบัติการปรากฏอยู่
มีความเป็นไปได้ที่จะมีการส ร้าง IP packet ปลอม เพื่อหลอก NAT device ว่า packet นี้ถูกเริ่มสร้างจาก internal IP address จากนั้นตัว NAT device ก็จะ forward packet นี้ไปยัง internal network
และแน่นอนที่สุด NAT ไม่สามารถป้องกันไวรัสได้
เมื่อ NAT ทำงานใน bi-directional mode หรือ PAT mode ตัว NAT device จะมีตารางซึ่งใช้เก็บข้อมูลเพื่อ map external address, port ไปเป็น internal address, port ซึ่งในกรณีนี้จะอนุญาตให้เราเซ็ทอัพ internet IP address, port ได้ที่ external side ของ NAT device จากนั้นก็จะทำ statically map ไปยัง private address, port ซึ่งอยู่ที่ internal side ของ NAT device ยกตัวอย่างเช่น เราสามารถตั้งเว็บเซิร์ฟเวอร์ที่ internal side โดยมี IP address เป็น 192.168.1.20 ที่พอร์ต 80 และมีค่า internet IP address เป็น 203.154.207.76 พอร์ต 80 ที่ external side เมื่อมี request จากภายนอกเข้ามายังexternal address ที่พอร์ต 80 มันจะถูกส่งต่อไปยังพอร์ต 80 ของ internal address และเมื่อมี request มาที่พอร์ตอื่นนอกเหนือจาก 80 แล้ว ข้อมูลนั้นจะถูกทิ้งไป
คำถามคือ NAT ยังมีความปลอดภัยเพียงพอหรือไม่
มีหลายคนที่ยังเข้าใจผิดเรื่อง NAT โดยมักจะคิดว่าถ้ามี NAT แล้วก็ไม่จำเป็นต้องมีไฟร์วอลล์ ซึ่งจริงๆ แล้ว NAT ยังมีช่องโหว่ที่ต้องพิจารณาอีก ในกรณีที่ NAT ทำงานใน bi-directional mode นั้น จะต้องมีการเปิดพอร์ตสำหรับให้บริการเสมอ เช่น 20-21 (FTP), 23(TELNET), 25 (SMTP), 53 (DNS), 80 (HTTP), 110 (POP), 143 (IMAP) ซึ่งพอร์ตเหล่านี้เป็นที่รู้จักกันดี และมี exploit code ที่รันได้บนพอร์ตเหล่านี้ ซึ่งมักจะมีช่องโหว่อยู่เสมอ และ NAT ไม่สามารถป้องกันอันตรายในลักษณะนี้ได้เลย นอกจากนี้ NAT device ยังมีข้อเสียที่การเก็บข้อมูลลงล็อกไฟล์ ซึ่งการโจมตีดังที่กล่าวไปข้างต้นนั้น NAT device (บางยี่ห้อ)จะไม่บันทึกข้อมูลลงล็อกไฟล์เลย ดังนั้นเราอาจจะโดนโจมตีโดยไม่รู้ตัวก็เป็นได้
นอกจากนี้การที่ user ใน internal network รันโปรแกรมบนเครื่องตัวเอง ซึ่งโปรแกรมนั้นอาจจะเป็นม้าโทรจันก็เป็นไปได้ จากนั้นม้าโทรจันก็จะส่ง packet ออกไป external network ซึ่ง NAT ก็จะปล่อยให้ packet ผ่านไปได้เพราะถือว่าเป็นการ request จาก internal side ในกรณีนี้ก็จะเห็นได้ว่า NAT ไม่ได้ช่วยอะไรได้เลย
บทสรุป
NAT ไม่ใช่ทางเลือกที่ดีสำหรับ security แน่นอนว่ามันสามารถป้องกันข้อมูลด้าน internal network ได้ มันปิดทุกพอ์รตที่เราไม่ได้ตั้งใจเปิดไว้ แต่มันก็ยังคงมีจุดอ่อนดังที่กล่าวมาแล้ว จำเป็นที่จะต้องมีไฟร์วอลล์, DMZ และ Intrusion Detection System ซึ่งได้รับการออกแบบให้เหมาะสมกับทรัพยากรที่มีอยู่ พร้อมกับการได้รับการดูแลจากผู้ดูแลระบบอย่างสม่ำเสมอ
เอกสารอ้างอิง
http://www.thaicert.org/paper/firewall/nat.php
http://www.sans.org/infosecFAQ/firewall/net_add.htm
http://www.sans.org/infosecFAQ/firewall/net_add2.htm
http://www.vicomsoft.com/knowledge/reference/nat.html

NAT : Network Address Translation

NAT : Network Address Translation


NAT Network
การ สื่อสารในระบบเครือข่ายอินเตอร์เน็ต จะมีการกำหนด IP Address ซึ่งเป็นหมายเลขที่ใช้สำหรับระบุตัวตนของผู้ใช้งาน (หมายเลข IP จะเป็นกลุ่มเลข 4 ชุด เช่น 202.153.148.21 เป็นต้น) ซึ่งแต่ละคนจะมีหมายเลข IP Address ไม่ซ้ำกัน อย่างไรก็ตามโดยปกติ IP Address ของคุณที่ได้รับเวลาเล่น internet ผ่านทาง ISP จะได้รับเป็นหมายเลขแบบสุ่ม
ปัจจุบัน มีผู้ใช้งาน Internet มากมาย ทำให้ IP Address ที่แจกจ่ายให้นั้น ไม่เพียงพอ อย่างไรก็ตาม การแก้ไขปัญหา IP ไม่เพียงพอ สามารถทำได้โดยใช้วิธีการทำ Network Addrsss Translation (NAT) หรือการสร้างตารางการจับคู่ของ IP แบบสุ่ม (ตัวอย่าง : สมมุติว่าองค์กรมีคอมพิวเตอร์ 50 เครื่องที่ต้องการเล่น internet และมี Registered IP จาก ISP 2 หมายเลข การทำ NAT แบบสุ่ม จะมีการตรวจสอบว่า IP ใดว่างก็จะมีการใช้ IP นั้นๆ) สำหรับอุปกรณ์สำหรับทำ NAT สามารถทำได้จากอุปกรณ์ที่เรียกว่า Router หรือ Firewall

หลักการทำงานของ NAT

โดย ทั่วไปในระบบเครือข่ายภายในองค์กร โดยเฉพาะองค์กรที่มี Server เป็น Windows NT, 2000 server จะมีการกำหนด IP ภายในองค์กรที่เรียกว่า private IP เช่น 192.168.0.1 หรือ 10.0.0.1 เป็นต้น IP เหล่านี้จะเป็น IP จะไม่สามารถนำไปใช้งานในระบบอินเตอร์เน็ตได้ การทำ NAT จะเป็นการแปลง private IP ให้เป็น IP ที่สามารถใช้งานบนระบบอินเตอร์เน็ตได้ หรือที่เราเรียกว่า Registered IP

เรื่องน่ารู้ เพิ่มเติม เกี่ยวกับ NAPT

จากราย ละเอียดข้างต้น ยังไม่สามารถอธิบายความสามารถของการทำ NAT ได้ ดังนั้นขออธิบายเพิ่มเติมเกี่ยวกับ NAPT : Network Address Port Translation โดยรายละเอียดแล้ว การสื่อสารผ่านระบบเครือข่ายอินเตอร์เน็ต โดยใช้ช่องทางสื่อสาร TCP/IP จะประกอบด้วย
  1. Source IP Address
  2. Source Port
  3. Destination IP Addrss
  4. Destination Port
ซึ่ง ทั้งหมดนี้ รวมเรียกว่า Socket และตัว Socket นี้เองจะเป็นตัวกำหนดว่าการสื่อสารนั้นยังคงดำเนินการต่ออยู่หรือไม่ และเนื่องจากจำนวน port ใน Firewall จะมีจำนวน ports ถึง 65,535 (สำหรับ server 1024 ports) ดังนั้นจะมี ports คงเหลือ 64,511 ทำให้เราสามารถต่ออินเตอร์เน็ตภายในองค์กร โดยใช้ Registred IP เพียงไม่กี่หมายเลข และนี่คือความสามารถพิเศษในการใช้งานในส่วนของ NAPT นั่นเอง