150 likes | 351 Views
แปลงไอพีบน เฮดเดอร์ ด้วย. Network Address. Translation. 13. ความจำเป็นที่ต้องแปลงที่อยู่ไอพี หลักการทำงาน และเขต Inside/Outside การตั้งค่า การระบุอินเตอร์เฟสฝั่ง Inside/Outside การกำหนดขอบเขตข้อมูลจากฝั่ง Inside ที่จะแปลงออกไป
E N D
แปลงไอพีบนเฮดเดอร์ด้วยแปลงไอพีบนเฮดเดอร์ด้วย Network Address Translation 13
ความจำเป็นที่ต้องแปลงที่อยู่ไอพีความจำเป็นที่ต้องแปลงที่อยู่ไอพี • หลักการทำงาน และเขต Inside/Outside • การตั้งค่า • การระบุอินเตอร์เฟสฝั่ง Inside/Outside • การกำหนดขอบเขตข้อมูลจากฝั่ง Inside ที่จะแปลงออกไป • การระบุกลุ่มที่อยู่ไอพีที่จะแปลงเป็นเมื่อส่งออกฝั่ง Outside • คำสั่งเปิดใช้การแปลงที่อยู่ไอพี 13-1
Private IP และการเชื่อมต่ออินเตอร์เน็ต • จากการกำหนดช่วงที่อยู่ไอพีส่วนตัว (Private IP) ซึ่งใช้ซ้ำกันได้บน LAN แต่ละองค์กร เพื่อเป็นหนทางประหยัด IPv4 • เพื่อป้องกันความวุ่นวายบนอินเตอร์เน็ต ISP จึงป้องกันไม่ให้แพ๊กเก็ตที่ระบุที่อยู่ไอพีต้นทางเป็น Private IP ออกมาสู่อินเตอร์เน็ต • เราท์เตอร์จึงมีฟีเจอร์สำหรับแปลงที่อยู่ ไอพีบน Header ของแพ๊กเก็ตที่สื่อสารระหว่าง LAN (เขต Inside) กับอินเตอร์เน็ต (เขต Outside) เรียก NAT (Network Address Translation) Inside ไม่รับ Private IP 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 ISP LAN ต้องแปลง ไอพีต้นทาง Outside 13-2
หลักการทำงาน Network Address Translation Inside Outside S0 Fa0/0 Local Addresses Global Addresses Global Addresses Local Addresses นิยามขอบเขต ฟีเจอร์ NAT แบ่งฝั่งของเราท์เตอร์เป็น 2 ฝั่ง ได้แก่ ฝั่งด้านใน (Inside)และฝั่งด้านนอก (Outside) โดยแยกฝั่งด้วยอินเตอร์เฟส นิยามชนิดที่อยู่ • ทุก Node ในแต่ละฝั่ง จะมีที่อยู่ 2 แบบ ได้แก่ • Local: เป็นที่อยู่สำหรับสื่อสารภายในฝั่งตัวเอง • Global: เป็นที่อยู่สำหรับสื่อสารข้ามฝั่ง 13-3
หลักการทำงาน Network Address Translation • หน้าที่ของฟีเจอร์ NAT ก็คือ การแปลงที่อยู่ไอพีบนแพ๊กเก็ตระหว่าง Local-Global • ดูที่อยู่ไอพีที่แต่ละชนิดได้จากคำสั่ง show ipnat translation บนโหมดอีนาเบิล Router# show ipnat translation Pro Inside global Inside local Outside local Outside global udp21.87.1.32:4057 192.168.0.10:4057 203.174.2.10:53 203.174.2.10:53 tcp21.87.1.32:5055 192.168.0.10:5055 58.174.90.2:80 58.174.90.2:80 tcp21.87.1.32:7309 192.168.0.15:7309 121.1.8.234:80 121.1.8.234:80 ฝั่ง Inside มีการแปลงที่อยู่ ฝั่ง Outside ไม่แปลงที่อยู่ • ในการใช้งานสำหรับองค์กรทั่วไป ที่ต้องการให้เครื่องลูกข่ายภายใน LAN สื่อสารออกมาฝั่งอินเตอร์เน็ตได้ จึงเลือกนำ NAT เฉพาะฝั่ง Local • เรียกการทำ NAT ฝั่งตัวเองนี้ว่า “NAT inside” 13-4
การตั้งค่า NAT Inside Inside Outside • จากนิยามที่เกี่ยวข้องกับการทำ NAT inside .ในการตั้งค่าจึงต้องระบุองค์ประกอบให้ครบ 5 ส่วนดังต่อไปนี้ • ระบุอินเตอร์เฟสที่เป็นฝั่ง “inside” • ระบุอินเตอร์เฟสที่เป็นฝั่ง “outside” • ระบุกลุ่มไอพีที่ใช้อยู่ในฝั่งตนเอง (Local Address) ที่ต้องการทำ NAT • ระบุกลุ่มไอพีที่แปลงเป็น เพื่อใช้สื่อสารกับฝั่งภายนอกได้ (Global Address) • ใส่คำสั่งให้เราท์เตอร์ทำ NAT ที่ฝั่ง “inside” 1 2 S0 Fa0/0 3 Local Addresses Global Addresses 4 5 ipnat“inside” 13-5
กำหนดฝั่ง Inside/Outside Fa0/0 S0 Src. IP • เราจำเป็นต้องกำหนดฝั่งบนอินเตอร์เฟส เพื่อให้ NAT รู้ทิศทางการแปลงไอพี • ใช้คำสั่ง “ipnat inside” บนโหมดคอนฟิกอินเตอร์เฟสที่เป็นฝั่ง LAN เช่น • Router(config)# interface fa0/0 • Router(config-if)# ipnat inside • ใช้คำสั่ง “ipnat outside” บนโหมดคอนฟิกอินเตอร์เฟสที่เป็นฝั่งออกอินเตอร์เน็ตเช่น • Router(config)# interface S0 • Router(config-if)# ipnat outside Inside Src. IP Outside 192.168.x.x 52.78.0.2 ไปฝั่ง Outside NAT Fa0/0 Des. IP S0 Des. IP S0 Fa0/0 52.78.0.2 192.168.x.x มาจาก Outside NAT Local Addresses 1 2 Global Addresses 13-6
กำหนดกลุ่มที่อยู่ Local Address • การกำหนดกลุ่มที่อยู่ Local Address ที่จะแปลงที่อยู่ไอพีเป็น Global ก็คือ การระบุเงื่อนไข (Access List) ของแพ๊กเก็ตข้อมูลที่จะเข้าอินเตอร์เฟสฝั่ง Inside ที่จะให้ทำ NAT เปลี่ยนที่อยู่ไอพีต้นทาง (Source IP address) นั่นเอง (แล้วจึงนำ ACL no. ไปใช้กำกับคำสั่งเปิดการ NAT อีกที) • จึงใช้การกำหนด Access List แบบ Standard (ตามหลักการ เพราะต้องการกรองข้อมูลที่จะออกไปใช้ NAT ไม่ใช่กรองข้อมูลที่จะเข้าเราท์เตอร์) เช่น • ต้องการให้เครื่องทั้งหมดในวงแลน 192.168.1.0/24 ต้องทำ NAT ออกอินเตอร์เน็ต • access-list 1 permit 192.168.1.0 0.0.0.255 • ต้องการให้เครื่องทั้งหมดในวงแลน 192.168.10.192/27 ยกเว้นเครื่องไอพี 192.168.10.220 - .223 ต้องทำ NAT ออกอินเตอร์เน็ต • access-list 2 deny 192.168.10.220 0.0.0.3 • access-list 2 permit 192.168.10.192 0.0.0.31 13-7
กำหนดกลุ่มที่อยู่ Global Address • กลุ่มที่อยู่ที่ใช้เป็น Inside Global ซึ่งเป็นที่อยู่ที่สามารถออกอินเตอร์เน็ตได้ จะต้องได้รับการจัดสรรจากผู้ให้บริการอินเตอร์เน็ต (ISP) • โดยจากมุมมอง ISP ถือว่า เครือข่าย LAN ของเรา กำลังใช้เครือข่าย (หรือไอพี) แบบ Public ที่เขาจ่ายให้ ไม่สนใจว่าเราใช้ Private IP เป็นอะไร • ดังนั้น เราต้องกำหนดกลุ่มที่อยู่ (Pool) ที่จะใช้เป็น Inside Global ตามที่ ISP กำหนด ทั้งรายชื่อไอพี และ Subnet Mask เรามองคุณเป็นเครือข่าย Global Inside Global Network (from ISP) ISP 58.12.109.8/29 LAN ISP Route 58.12.109.8/29 Outside 13-8
กำหนดกลุ่มที่อยู่ Global Address การตั้งค่า • ใช้คำสั่ง ipnat pool ตามด้วยชื่อกลุ่มที่อยู่อ้างอิงตามต้องการ และกลุ่มไอพี/mask ที่ ISP กำหนดให้ ในโหมดโกลบัลคอนฟิก เรามองคุณเป็นเครือข่าย Global Inside Global Network (from ISP) ISP Router(config)# ipnat pool (ชื่อ Pool)(ไอพีเริ่มต้น) (ไอพีสุดท้าย) netmask(Subnet Mask ที่ ISP กำหนด) 58.12.109.8/29 LAN ตัวอย่าง ISP • ISP จัดสรรกลุ่มไอพีตั้งแต่ 203.17.4.193 – 203.17.4.194/30 Route 58.12.109.8/29 Outside Router(config)# ipnat pool Ranet203.17.4.193203.17.4.194netmask255.255.255.252 13-9 คำแนะนำ: ถ้าโจทย์ไม่กำหนดซับเน็ตมาให้ ให้ตั้งค่าโดยใช้เครือข่ายที่แคบที่สุด
คำสั่งเปิดการทำ NAT Inside • ใช้คำสั่งต่อไปนี้บนโหมดโกลบัลคอนฟิก เพื่อเปิดการทำ NAT บนอินเตอร์เฟสฝั่ง Inside ตาม Local และ Global Address ที่เราตั้งค่ารอไว้ Router(config)# ipnat inside source list (ACL no.) pool (ชื่อ Pool) overload • โดยที่ ACL no.คือ เลขอ้างอิงของ Access-list ที่เราตั้งค่าไว้จำกัดกลุ่มแพ๊กเก็ตที่จะใช้ เป็น Local Address • ชื่อ Poolคือ ชื่อกลุ่มไอพี (Pool) ที่เราตั้งค่าไปด้วยคำสั่ง ipnat pool (ชื่อ Pool) เพื่อใช้เป็น Global Address ตัวอย่าง • ต้องการทำ NAT inside ที่ใช้ ACL no.10 เป็นที่อยู่ Local และ Pool Ranetเป็นที่อยู่ Global 13-10 Router(config)# ipnat inside source list 10 pool Ranetoverload
การใช้เลข Port ช่วย Port Address Translation Inside Local Inside Global 192.168.0.10:4032 192.168.0.11:5008 192.168.0.12:4703 192.168.0.13:1152 192.168.0.14:9034 52.74.109.81:4032 52.74.109.81:5008 52.74.109.81:4703 52.74.109.81:1152 52.74.109.81:9034 NAT-PT Trans. “Overload” • เนื่องจาก ISP มักจัดสรร Global Address มาให้เพียงไม่กี่ไอพี ย่อมไม่เพียงพอต่อการแปลง Local Address ที่มีโฮสใช้จำนวนมาก • จึงมีวิธีการแปลง โดยใช้เลขพอร์ทเข้าช่วย เนื่องจากจะทำให้ Global Address 1 ตัว แทน Local Address ได้หลายตัวดังภาพ เรียกความสามารถนี้ว่า PAT หรือ NAT-PT (Port Translation) • คำสั่งที่ให้ทำ PAT คือการต่อท้ายคำสั่ง NAT inside ด้วย “Overload” 13-11 Router(config)# ipnat inside source list 10 pool Ranetoverload
ตัวอย่างการใช้ • บริษัทราเน็ท ได้รับ IP address จาก ISP มาใช้ 6 หมายเลข ตั้งแต่ 58.7.42.137 - .142 จงตั้งค่า NAT ให้เครื่องโฮสภายใน LAN ที่มีไอพีเฉพาะ 192.168.14.225 - .251 สามารถออกมาใช้อินเตอร์เน็ตได้ IP: 203.17.206.78/30 ISP IP: 203.17.206.79/30 S0 Router(config)# interface S0 Router(config-if)# ipnat outside Router(config-if)# interface Fa0 Router(config-if)# ipnat inside Router(config-if)# exit Router(config)# access-list 1 deny 192.168.14.252 0.0.0.3 Router(config)# access-list 1 permit 192.168.14.224 0.0.0.31 Router(config)# ipnat pool RanetPool 58.7.42.137 58.7.42.142 netmask 255.255.255.248 Router(config)# ipnat inside source list 1 pool RanetPool overload Ranet-R LAN Fa0 Global Network: 58.7.42.136/29 Local Network: 192.168.14.224/27 13-12 ทวนสอบโดย Ping ไปยังเราท์เตอร์ของ ISP จากเครื่องโฮสในแลน
การ NAT ออกอินเตอร์เฟส • ถ้าเราซื้อบริการอินเตอร์เน็ตจาก ISP แต่ไม่ได้ซื้อ Global IP ตายตัวมาด้วย ISP จะสุ่มตั้งค่า IP address ชั่วคราวให้ที่ขาฝั่ง Outside ของเราท์เตอร์เราแทนเพียงตัวเดียว • เช่น การที่ให้เราตั้งค่า IP address negotiated ที่อินเตอร์เฟสฝั่ง Outside เพื่อให้ PPP server จ่ายไอพีมาให้อินเตอร์เฟสของเรา เป็นต้น • ดังนั้น การ NAT inside จะต้องใช้ Global IP ที่ ISP ตั้งค่าให้อินเตอร์เฟสของเรา ซึ่งไม่สามารถกำหนด Global Address ตายตัวได้ จึงต้องตั้งค่าเป็นชื่ออินเตอร์เฟสแทนชื่อกลุ่มไอพี (Pool) ดังนี้ IP: 203.17.206.78/30 ISP IP address negotiated S0 Ranet-R LAN Fa0 Local Network: 192.168.14.224/27 Router(config)# ipnat inside source list (ACL no.) interface (ชื่ออินเตอร์เฟส) overload 13-13 เช่น Router(config)# ipnat inside source list 1 interface S0 overload
การ Forward Port NAT inside Static • บางครั้ง เราต้องการให้การจับคู่กันระหว่าง Local Address+Portกับ Global Address+Port ตายตัว • เช่น ต้องการให้ผู้ที่เชื่อมต่อมายัง Global IP 203.87.2.37 Port 80 ให้แปลงที่อยู่ปลายทางมาเป็นไอพีของเว็บเซิร์ฟเวอร์ภายใน 192.168.0.100 Port 80 ตลอด • เราสามารถใช้คำสั่ง ipnat inside source static สร้างการจับคู่ Local/Global address แบบตายตัว (Static) ได้ ดังนี้ Router(config)# ipnat inside source static (tcp/udp) (Local add.) (Local Port) (Global add.) (Global Port) • เช่น จากตัวอย่างด้านบน พิมพ์คำสั่งได้ว่า: 13-14 Router(config)# ipnat inside source static tcp 192.168.0.100 80 203.87.2.37 80