ยินดีต้อนรับสู่ show running-config ครับ

บล็อก show running-config นี้สร้างไว้เพื่อเป็นแหล่งรวบรวมเทคนิคการตั้งค่าอุปกรณ์เครือข่าย Cisco ไม่ว่าจะเป็น Cisco IOS Router, Cisco Catalyst Swtich, Cisco ASA Firewall, Cisco Mars เป็นต้น รวมทั้งอาจจะมีเทคนิคการตั้งค่าอุปกรณ์ในยี่ห้ออื่น ๆ บ้างเล็กน้อยครับ

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

Thursday, November 27, 2014

NAT Virtual Interface (NVI) คืออะไร?




            โดยปกติแล้วในการตั้งค่า NAT สำหรับการแปลงหมายเลขที่อยู่จาก private IPv4 address ไปเป็น public IPv4 address บน Cisco IOS Router จะต้องมีการบอกขอบเขต (domain) ให้กับเราเตอร์ว่าอินเทอร์เฟสใดเป็นฝั่ง NAT inside และอินเทอร์เฟสใดเป็นฝั่ง NAT outside แต่หลังจาก Cisco IOS version 12.3(14)T เป็นต้นมา จะสามารถทำการตั้งค่า NAT โดยที่ไม่ต้องมีการกำหนด NAT inside และ NAT outside อีกต่อไป ด้วยการใช้งานคุณสมบัติ NAT Virtual Interface นั่นเองครับ

            สำหรับใครที่ยังไม่รู้จักกับ NAT ก็ขอให้ติดตามบทความนี้ก่อนนะครับ การตั้งค่า NAT(Network Address Translation) บน CiscoIOS ในการตั้งค่า NAT แบบ NVI นี้ จะไม่ต้องทำการบอกขอบเขตว่าอินเทอร์เฟสใดเป็นเครือข่ายภายในหรือเครือข่ายภายนอกให้กับเราเตอร์อีกต่อไป เพียงแค่กำหนดว่าจะเปิดการทำงานของ NAT บนอินเทอร์เฟสใดบ้าง ด้วยการใช้คำสั่ง "ip nat enable" เท่านั้น แต่ในส่วนการตั้งค่าและใช้งาน NAT ก็ยังคงรูปแบบเดิม ๆ อยู่ ยังไงลองมาดูตัวอย่างการตั้งค่า NAT แบบ NVI ในรูปแบบต่าง ๆ กันเลยดีกว่าครับ
            แต่ก่อนที่จะทำการตั้งค่า NAT ในรูปแบบต่าง ๆ เราจะต้องเปิดการทำงานของ NVI บนแต่ละอินเทอร์เฟสที่มีทราฟิกที่จะทำการ NAT ใช้งานผ่านกันก่อน ด้วยการใช้คำสั่ง "ip nat enable" บนแต่ละอินเทอร์เฟส (ทดแทนการตั้งค่า NAT inside และ NAT outside ในการตั้งค่าแบบเดิม)


ตัวอย่างการตั้งค่า
R1(config)#interface FastEthernet 0/0
R1(config-if)#ip address 10.1.1.254 255.255.255.0
R1(config-if)#ip nat enable
R1(config-if)#exit
R1(config)#interface FastEthernet 0/1
R1(config-if)#ip address 212.122.34.65 255.255.255.240
R1(config-if)#ip nat enable
R1(config-if)#exit

ตัวอย่างการตั้งค่า Static NAT
            Static NAT เป็นการทำ NAT แบบ one-to-one คือหมายเลข private IP address หนึ่งหมายเลขจะแปลงไปเป็นหมายเลข public IP address หนึ่งหมายเลขแบบหนึ่งต่อหนึ่ง โดยทั่วไปจะใช้งานกับเครื่อง Server ที่อยู่ในเครือข่ายภายใน ที่ต้องการเข้าใช้งานจากเครือข่ายภายนอก


R1(config)#ip nat source static 10.1.1.101 212.122.34.66
R1(config)#ip nat source static 10.1.1.102 212.122.34.67
R1(config)#ip nat source static 10.1.1.10 212.122.34.70
R1#show ip nat nvi translations
Pro Source global      Source local       Destin  local      Destin  global
--- 212.122.34.70      10.1.1.10          ---                ---
icmp 212.122.34.66:1   10.1.1.101:1       8.8.8.8:1          8.8.8.8:1
--- 212.122.34.66      10.1.1.101         ---                ---
icmp 212.122.34.67:0   10.1.1.102:0       4.2.2.2:0          4.2.2.2:0
--- 212.122.34.67      10.1.1.102         ---                ---
tcp 208.10.20.30:39251 208.10.20.30:39251 212.122.34.70:80   10.1.1.10:80

จากตัวอย่างด้านบน เป็นการตั้งค่า Static NAT โดยกำหนดให้ทำการแปลง private IP address ไปเป็น public IP address แบบ one-to-one ดังนี้
  • หมายเลข private IP address 10.1.1.101 แปลงไปเป็น public IP address 212.122.34.66
  • หมายเลข private IP address 10.1.1.102 แปลงไปเป็น public IP address 212.122.34.67
  • หมายเลข private IP address 10.1.1.10 แปลงไปเป็น public IP address 212.122.34.70

โดยเมื่อเครื่องภายนอกเครื่องข่ายต้องการติดต่อสื่อสารมายังโฮสต์ภายในเครือข่าย (เช่น ไปยัง web server) จะทำการติดต่อสื่อสารผ่านทางหมายเลข public IP address ที่ได้ทำการ NAT เอาไว้

ตัวอย่างการตั้งค่า Dynamic NAT
            เป็นการแปลงหมายเลข IP Address แบบ many to many คือ private IP Address ของเครื่องภายในเครือข่ายหลาย ๆ เครื่องจะทำการแปลงไปเป็น public IP Address ของเครือข่ายภายนอกหลาย ๆ หมายเลข โดยการแปลงหมายเลข IP Address นั้นจะทำตามลำดับ คือ private IP Address ของเครื่องในเครือข่ายภายในที่มาก่อนก็จะทำการแปลงเป็น public IP Address ของเครือข่ายภายนอกในอันดับแรก ๆ ก่อน โดยถ้ามี IP Address ของเครือข่ายภายนอก 3 IP Address เครื่องในเครือข่ายภายในก็จะสามารถติดต่อสื่อสารกับเครือข่ายภายนอกได้เพียง 3 เครื่องในเวลาหนึ่ง ๆ เท่านั้น
            ในการตั้งค่า dynamic NAT จะต้องทำการสร้าง access-list เพื่อระบุถึงหมายเลข IP address ต้นทางที่ต้องการจะทำ NAT และจะต้องทำการสร้าง pool เพื่อใช้กำหนดถึงหมายเลขของ IP address ที่จะใช้ในการแปลงหมายเลข IP address ไป


R1(config)#access-list 10 permit 10.1.1.0 0.0.0.255
R1(config)#ip nat pool dynamic-pool 212.122.34.66 212.122.34.70 prefix-length 28
R1(config)#ip nat source list 10 pool dynamic-pool
R1#show ip nat nvi translations
Pro Source global      Source local       Destin  local      Destin  global
icmp 212.122.34.66:0   10.1.1.101:0        8.8.8.8:0          8.8.8.8:0
icmp 212.122.34.66:1   10.1.1.101:1        8.8.8.8:1          8.8.8.8:1
--- 212.122.34.66      10.1.1.101         ---                ---
icmp 212.122.34.67:2   10.1.1.102:2       4.2.2.2:2          4.2.2.2:2
icmp 212.122.34.67:3   10.1.1.102:3       4.2.2.2:3          4.2.2.2:3
--- 212.122.34.67      10.1.1.102         ---                ---

            จากตัวอย่างด้านบนเป็นการตั้งค่า dynamic NAT โดยทำการสร้าง access-list หมายเลข 10 เพื่อกำหนดถึง private IP address ที่ต้องการจะทำ NAT แบบ dynamic จากนั้นจะเป็นการสร้าง pool ที่มีชื่อว่า dynamic-pool เพื่อกำหนดหมายเลข public IP address ที่จะทำการแปลงหมายเลข private IP address ไป โดยเมื่อตั้งค่าเสร็จแล้ว private IP address ใดที่จะติดต่อสื่อสารกับเครื่องภายนอกเครื่องข่ายก่อน จะได้รับหมายเลข public IP address หมายเลขแรกไปใช้งาน

ตัวอย่างการตั้งค่า PAT (NAT overload)
            PAT หรือที่เรียกว่า NAT overloading เป็นการแปลงหมายเลข IP Address แบบ many to one คือ private IP Address ของเครื่องภายในเครือข่ายหลาย ๆ เครื่องจะทำการแปลงไปเป็น public IP Address ของเครือข่ายภายนอกเพียง IP Address เดียวเท่านั้น โดยในการแปลงหมายเลข IP Address จะทำการแปลงหมายเลข Port ต้นทางไปด้วย
            ในการตั้งค่า PAT หรือ NAT overload จะต้องทำการสร้าง access-list เพื่อระบุถึงหมายเลข IP address ต้นทางที่ต้องการจะทำ NAT และจะต้องทำการสร้าง pool เพื่อใช้กำหนดถึงหมายเลขของ IP address ที่จะใช้ในการแปลงหมายเลข IP address ไป


R1(config)#access-list 10 permit 10.1.1.0 0.0.0.255
R1(config)#ip nat pool overload-pool 212.122.34.66 212.122.34.66 prefix-length 28
R1(config)#ip nat source list 10 pool overload-pool overload
R1#show ip nat nvi translations
Pro Source global      Source local       Destin  local      Destin  global
icmp 212.122.34.66:3   10.1.1.10:3        4.2.2.2:3          4.2.2.2:3
icmp 212.122.34.66:5   10.1.1.101:5       8.8.8.8:5          8.8.8.8:5
tcp 212.122.34.66:18037 10.1.1.102:18037  208.10.20.30:23    208.10.20.30:23
tcp 212.122.34.66:48643 10.1.1.102:48643  208.10.20.30:23    208.10.20.30:23

            จากตัวอย่างด้านบน เป็นการตั้งค่า PAT (NAT overload) โดยทำการสร้าง access-list หมายเลข 10 เพื่อกำหนดถึงหมายเลข private IP address ที่ต้องการจะทำ NAT และทำการสร้าง pool เพื่อกำหนดถึงหมายเลข public IP address คล้าย ๆ กับการตั้งค่า dynamic NAT เพียงแต่ว่าในการใช้งานคำสั่ง NAT จะมี keyword ว่า “overload” เข้ามาด้วย ก็จะเป็นการทำ PAT โดยทุก ๆ private IP address จะถูกแปลงไปเป็นหมายเลข public IP address เพียง IP address เดียว โดยจะมีการแปลงหมายเลขพอร์ตไปด้วย
            นอกจากนี้ยังสามารถใช้งานหมายเลข public IP address บนอินเทอร์เฟส Fa0/1 ของเราเตอร์ในการ NAT หมายเลข private IP address ออกไปก็ได้ เช่น

R1(config)#access-list 10 permit 10.1.1.0 0.0.0.255
R1(config)#ip nat source list 10 interface fastEthernet 0/1 overload
R1#show ip nat nvi translations
Pro Source global      Source local       Destin  local      Destin  global
icmp 212.122.34.65:2   10.1.1.10:2        4.2.2.2:2          4.2.2.2:2
icmp 212.122.34.65:4   10.1.1.101:4       8.8.8.8:4          8.8.8.8:4
tcp 212.122.34.65:61911 10.1.1.102:61911  208.10.20.30:23    208.10.20.30:23
tcp 212.122.34.65:62002 10.1.1.102:62002  208.10.20.30:23    208.10.20.30:23

ตัวอย่างการตั้งค่า Static PAT
            เป็นการแปลงหมายเลข IP Address แบบ one to one คล้าย ๆ กับการทำ Static NAT แต่จะมีการระบุหมายเลขพอร์ตไปด้วย ในบางครั้ง Static PAT จะเรียกว่า Port Forwarding คือจะทำการแปลงหมายเลขพอร์ตได้ตามที่ต้องการ


R1(config)#ip nat source static tcp 10.1.1.10 80 212.122.34.70 80
R1(config)#ip nat source static tcp 10.1.1.101 20 212.122.34.70 20
R1(config)#ip nat source static tcp 10.1.1.101 21 212.122.34.70 21
R1(config)#ip nat source static tcp 10.1.1.102 23 212.122.34.69 2323
R1#show ip nat nvi translations
Pro Source global      Source local       Destin  local      Destin  global
tcp 8.8.8.8:43455      8.8.8.8:43455      212.122.34.70:80   10.1.1.10:80
tcp 212.122.34.70:80   10.1.1.10:80       ---                ---
tcp 212.122.34.70:20   10.1.1.101:20      ---                ---
tcp 212.122.34.70:21   10.1.1.101:21      ---                ---
tcp 212.122.34.69:2323 10.1.1.102:23      ---                ---
tcp 208.10.20.30:18425 208.10.20.30:18425 212.122.34.69:2323 10.1.1.102:23
tcp 208.10.20.30:21925 208.10.20.30:21925 212.122.34.69:2323 10.1.1.102:23

            จากตัวอย่างด้านบน เป็นการตั้งค่า Static PAT โดยจะคล้ายกับการตั้งค่า Static NAT แต่จะมีการระบุหมายเลขพอร์ตไปด้วย

ข้อดีของการใช้งาน NVI มีดังนี้
  • NAT จะทำงาน per interface ไม่ใช่ per domain (NAT inside,NAT outside) ทำให้สามารถใช้งานได้อย่างมีประสิทธิภาพมากยิ่งขึ้น
  • ไม่ต้องทำการกำหนด domain (NAT inside,NAT outside) อีกต่อไป

ข้อจำกัดในการใช้งาน NVI มีดังนี้
  • ไม่รองรับการใช้งานร่วมกับ route-map
  • ไม่รองรับการทำงานแบบ NAT on-a-stick (NAT โดยใช้ physical interface เดียว)
  • ไม่รองรับการทำงานแบบ NAT TCP Load Distribution
            การทำ NAT แบบ NVI จะเปลี่ยนแนวคิดในการตั้งค่า NAT ไป จากเดิมที่จะต้องมีการกำหนด inside และ outside บนเราเตอร์ ซึ่งจะทำให้มีข้อจำกัดในการใช้งานค่อนข้างมาก โดยเฉพาะอย่างยิ่งในปัจจุบันที่บางครั้งไม่ได้นำ NAT ไปใช้งานเพื่อแปลง private IP address กับ public IP address เพียงอย่างเดียวเท่านั้น โดยอาจจะนำ NAT ไปแปลงหมายเลขที่อยู่ระหว่างระบบ 2 ระบบ ซึ่งจะมีข้อจำกัดมากถ้าหากยังคงใช้งานการ NAT แบบเดิมที่จะต้องมีการกำหนด inside และ outside (ใครเคยทำ NAT จาก outside ด้วยคำสั่ง "ip nat outside" จะทราบ) หรือในกรณีที่มีหลาย ๆ  inside interface และต้องการ NAT ระหว่าง inside to inside ด้วยกัน หรือการทำ NAT U-tern เป็นต้น แต่ด้วยการใช้งาน NAT แบบ NVI จะไม่ต้องมีการกำหนด inside หรือ outside โดยจะทำการ NAT ตาม traffic flow ใน routing table แทน ซึ่งจะทำให้การใช้งาน NAT สามารถทำได้อย่างสะดวกมากยิ่งขึ้น

No comments:

Post a Comment