• FortiGate
  • Site-to-site IPsec VPN กับ Subnet ที่ทับซ้อนกัน

  •    ในกรณีนี้คุณสร้าง Route-based IPsec VPN tunnel เช่นเดียวกับการกำหนดค่าทั้งต้นทาง และปลายทาง NAT เพื่ออนุญาตการสื่อสารที่โปร่งใสระหว่างเครือข่ายที่ทับซ้อนกัน (Overlapping) สองเครือข่ายที่อยู่ด้านหลัง FortiGates ที่แตกต่างกัน
    ในตัวอย่างนี้ FortiGate หนึ่งจะถูกเรียกว่า HQ และอื่นๆ เป็น Branch พวกเขาทั้งคู่มี IP 192.168.1.0/24 ที่ใช้เป็นเครือข่ายภายใน (LAN) แต่ LAN ทั้งคู่ต้องสามารถสื่อสารกันผ่าน IPsec tunnel

    1. การวางแผนรูปแบบการกำหนด Address ใหม่
    1.1 => เพื่อให้ Subnet ที่ทับซ้อนกันสามารถสื่อสารผ่าน IPsec tunnel ตามเส้นทางได้ Subnets "เสมือน" ใหม่ (New “virtual” subnets) ที่มีขนาดเท่ากัน จะต้องตัดสินใจ และใช้สำหรับการสื่อสารทั้งหมดระหว่างSubnets ทั้งสองที่ซ้อนทับกัน

      => ในตัวอย่างนี้คุณทำการ Mapping แบบหนึ่งต่อหนึ่ง เครือข่าย HQ 192.168.1.0/24 กับ 10.1.1.0/24 และเครือข่าย 192.168.1.0/24 ของ Branch กับ 10.2.2.0/24 สิ่งนี้จะช่วยให้ HQ client ใช้ Subnet ใหม่ของ Branch เพื่อสื่อสารกับ Branch Client และในทางกลับกัน

    2. กำหนดค่า IPsec VPN บน HQ
    2.1 => ในการสร้าง Tunnel บน HQ, ให้เชื่อมต่อกับ HQ แล้วไปที่ VPN > IPsec Tunnels
      => ในขั้นตอนการตั้งค่า VPN ให้ป้อน “Name” เป็น VPN-to-Branch และตั้งค่า “Template Type” เป็น Custom

    2.2 => ป้อน Branch’s public IP address สำหรับ IP Address (ในตัวอย่างเป็น 172.25.177.46) แล้วเลือก HQ’s WAN interface สำหรับ Interface (ในตัวอย่างเป็น wan1)

    2.3 => ป้อนรหัสรักษาความปลอดภัย (Secure key) สำหรับ Pre-shared Key

    2.4 => พิมพ์ช่วง Address ใหม่ ที่เลือกในขั้นตอนที่ 1 สำหรับ HQ และ Branch’s LAN ใน Local Address และ Remote Address fields (ในตัวอย่างเป็น 10.1.1.0/24 และ 10.2.2.0/24 ตามลำดับ)

    2.5 => เลือกขยาย Advanced และเปิดใช้งาน “Auto-negotiate”

    3. กำหนดค่า Static routes บน HQ
    3.1 => ในการสร้างเส้นทางที่จำเป็น (Necessary routes) บน HQ ให้ไปที่ “Network > Static Routes” และเลือก Create New
    3.2 => ป้อน Subnet ใหม่ที่สร้างในขั้นตอนที่ 1 สำหรับ Branch’s LAN ในส่วน Destination และเลือก VPN tunnel ที่สร้างในขั้นตอนที่ 2 ในส่วน Interface (ในตัวอย่างนี่คือ 10.2.2.0/24 และ VPN-to-Branch)

    3.3 => สร้างเส้นทางเพิ่มเติมด้วยปลายทางเดียวกับเส้นทางก่อนหน้า แต่คราวนี้เปลี่ยน “Administrative Distance” เป็น 200 และ “Interface” เลือกเป็น Blackhole

    4. กำหนดค่า Address objects, Virtual IPs, และ IP Pools บน HQ
    4.1 => ในการ Address objects ที่คุณจะใช้ในภายหลัง ให้ไปที่ “Policy & Objects > Addresses” และเลือก “Create New > Address”
      => ป้อน HQ-original สำหรับ “Name”, Original LAN subnet ของ HQ สำหรับ “Subnet” (ในตัวอย่าง, 192.168.1.0/24), และเลือก LAN-side Interface สำหรับ “Interface” (ในตัวอย่าง, internal)

    4.2 => ทำซ้ำกระบวนการเพื่อสร้าง Address object ใหม่เพิ่มเติม
    => ป้อน Branch-new สำหรับ “Name”, New LAN subnet ของ Branch สำหรับ “Subnet” (ในตัวอย่าง, 10.2.2.0/24), และเลือก Interface VPN สำหรับ “Interface” (ในตัวอย่าง, VPN-to-Branch)

    4.3 => ในการสร้าง IP Pool, ให้ไปที่ “Policy & Objects > IP Pools” และเลือก Create New
      => ป้อน HQ-new สำหรับ “Name” และเลือก Fixed Port Range สำหรับ “Type” สำหรับ “External IP Range” ให้ป้อน Subnet ใหม่สำหรับ HQ (ในตัวอย่าง, 10.1.1.1 - 10.1.1.254) และป้อนSubnet เดิมสำหรับ HQ ในส่วน “Internal IP Range” (ในตัวอย่าง, 192.168.1.1 - 192.168.1.254 )

    4.4 => สุดท้าย, ในการ Virtual IP ให้ไปที่ “Policy & Objects > Virtual IPs” และเลือก “Create New > Virtual IP”
      => ป้อน HQ-new-to-original สำหรับ “Name” และเลือก Interface VPN สำหรับ “Interface” (ในตัวอย่าง, VPN-to-Branch) สำหรับ “External IP Range” ให้ป้อน Subnet ใหม่สำหรับ HQ (ในตัวอย่าง, 10.1.1.1 - 10.1.1.254) และป้อน Subnet เดิมสำหรับ HQ ในส่วน “Internal IP Range” (ในตัวอย่าง, 192.168.1.1 - 192.168.1.254)

    5. กำหนดค่า Firewall policies บน HQ
    5.1 => ในการสร้าง Firewall policies บน HQ ให้ไปที่ “Policy & Objects > IPv4 Policies” และเลือก Create New
      => ป้อน From-HQ-to-Branch สำหรับ “Name”, LAN-side interface บน HQ สำหรับ “Incoming Interface” (ในตัวอย่าง, internal) และ VPN tunnel interface สำหรับ “Outgoing Interface” (ในตัวอย่าง, VPN-to-Branch)
      => สำหรับ “Source” เลือก HQ-original, สำหรับ “Destination” เลือก Branch-new และสำหรับ “Service” เลือก ALL
      => สุดท้าย ให้เปิดใช้งาน “NAT” เลือกใช้ “Dynamic IP Pool” และเลือก HQ-new

    5.2 => ทำซ้ำกระบวนการเพื่อสร้าง IPv4 Policy ใหม่เพิ่มเติม
      => ป้อน From-Branch-to-HQ สำหรับ “Name”, VPN interface สำหรับ “Incoming Interface” (ในตัวอย่าง, VPN-to-Branch) และ LAN-side interface สำหรับ “Outgoing Interface” (ในตัวอย่าง, internal)
      => สำหรับ “Source” เลือก Branch-new, สำหรับ “Destination” เลือก HQ-new-to-original (Virtual IP object ที่คุณสร้างในขั้นตอนที่ 4), และสำหรับ “Service” เลือก ALL
      => หมายเหตุ : สำหรับ Policy นี้ คุณไม่จำเป็นต้องเปิดใช้งาน “NAT”
    6. กำหนดค่า IPsec VPN บน Branch
    6.1 => ในการสร้าง Tunnel บน Branch, ให้เชื่อมต่อกับ Branch และไปที่ “VPN > IPsec Tunnels” และสร้าง Tunnel ใหม่
      => ในขั้นตอนการตั้งค่า VPN, ตั้งค่า “Template Type” เป็น Custom และป้อน VPN-to-HQ สำหรับ “Name”

    6.2 => ป้อน HQ’s public IP address สำหรับ “IP Address” (ในตัวอย่าง, 172.25.176.142) และเลือก Branch’s WAN interface สำหรับ “Interface” (ในตัวอย่าง, wan1)

    6.3 => ป้อนรหัสรักษาความปลอดภัย (Secure key) ที่ตรงกัน สำหรับ “Pre-shared Key”

    6.4 => พิมพ์ช่วง Address ใหม่ ที่เลือกในขั้นตอนที่ 1 สำหรับ Branch และ HQ’s LAN ใน Local Address และ Remote Address (ในตัวอย่างคือ 10.2.2.0/24 และ 10.1.1.0/24 ตามลำดับ)

    6.5 => เลือกขยาย Advanced และเปิดใช้งาน “Auto-negotiate”

    7. กำหนด Static routes บน Branch
    7.1 => ในการสร้างเส้นทางที่จำเป็น (Necessary routes) บน Branch ให้ไปที่ “Network > Static Routes” และเลือก Create New
      => ป้อน Subnet ใหม่ ที่สร้างในขั้นตอนที่ 1 สำหรับ HQ’s LAN ในส่วน “Destination” และเลือก VPN tunnel ที่สร้างในขั้นตอนที่ 6 ในส่วน “Interface” (ในตัวอย่างนี่คือ 10.1.1.0/24 และ VPN-to-HQ)

    7.2 => สร้างเส้นทางเพิ่มเติมด้วยปลายทางเดียวกับเส้นทางก่อนหน้า แต่คราวนี้เปลี่ยน “Administrative Distance” เป็น 200 และเลือก Blackhole ในส่วน “Interface”

    8. กำหนดค่า Address objects, Virtual IPs, และ IP Pools บน Branch
    8.1 => ในการสร้าง Address objects ที่คุณจะใช้ในภายหลัง ให้ไปที่ “Policy & Objects > Addresses” แล้วเลือก “Create New > Address”
      => ป้อน Branch-original สำหรับ “Name”, Original LAN subnet ของ Branch สำหรับ “Subnet” (ในตัวอย่าง, 192.168.1.0/24), และเลือก LAN-side interface สำหรับ “Interface” (ในตัวอย่าง, lan)

    8.2 => ทำซ้ำกระบวนการเพื่อสร้าง Address object ใหม่เพิ่มเติม
      => ป้อน HQ-new สำหรับ “Name”, New LAN subnet ของ HQ สำหรับ “Subnet” (ในตัวอย่าง, 10.1.1.0/24), และเลือก VPN interface สำหรับ “Interface” (ในตัวอย่าง, VPN-to-HQ)

    8.3 => ในการสร้าง IP Pool ให้ไปที่ “Policy & Objects > IP Pools” และเลือก Create New
      => ป้อน Branch-new สำหรับ “Name” และเลือก Fixed Port Range สำหรับ “Type”, สำหรับ “External IP Range” ให้ป้อน Subnet ใหม่สำหรับ Branch (ในตัวอย่าง, 10.2.2.1 - 10.2.2.254) และป้อน subnet เดิมสำหรับ Branch ในส่วน “Internal IP Range” (ในตัวอย่าง, 192.168.1.1 - 192.168.1.254)

    8.4 => สุดท้าย ในการสร้าง Virtual IP ให้ไปที่ “Policy & Objects > Virtual IPs” และเลือก “Create New > Virtual IP”
      => ป้อน Branch-new-to-original สำหรับ “Name” และเลือก VPN interface สำหรับ “Interface” (ในตัวอย่าง, VPN-to-HQ) สำหรับ “External IP Range” ให้ป้อน Subnet ใหม่สำหรับ Branch (ในตัวอย่าง, 10.2.2.1 - 10.2.2.254) และป้อน subnet เดิมสำหรับ Branch ในส่วน “Internal IP Range” (ในตัวอย่าง, 192.168.1.1 - 192.168.1.254)

    9. กำหนดค่า Firewall policy บน Branch
    9.1 => ในการสร้าง Firewall policy บน Branch ให้ไปที่ “Policy & Objects > IPv4 Policies” และเลือก Create New
      => ป้อน From-Branch-to-HQ สำหรับ “Name”, LAN-side interface บน Branch สำหรับ “Incoming Interface” (ในตัวอย่าง, lan) และ VPN tunnel interface สำหรับ “Outgoing Interface” (ในตัวอย่าง, VPN-to-HQ)
      => สำหรับ “Source”, เลือก Branch-original, สำหรับ “Destination” เลือก HQ-new และสำหรับ “Service” เลือก ALL
      => สุดท้าย, ให้เปิดใช้งาน “NAT”, เลือก “Use Dynamic IP Pool” และเลือก Branch-new

    9.2 => ทำซ้ำกระบวนการเพื่อสร้าง IPv4 Policy ใหม่เพิ่มเติม
      => ป้อน From-HQ-to-Branch สำหรับ “Name”, VPN interface สำหรับ “Incoming Interface” (ในตัวอย่าง, VPN-to-HQ), และ LAN-side interface สำหรับ “Outgoing Interface” (ในตัวอย่าง, lan)
      => สำหรับ “Source”, เลือก HQ-new สำหรับ “Destination” เลือก Branch-new-to-original (Virtual IP object ที่คุณสร้างในขั้นตอนที่ 8) และสำหรับ “Service” เลือก ALL
      => หมายเหตุ : สำหรับ Policy นี้คุณไม่จำเป็นต้องเปิดใช้งาน “NAT”

    10. ผลลัพธ์
    => ตอนนี้ IPsec tunnel ควรจะอยู่ทั้งสองด้าน ซึ่งคุณสามารถตรวจสอบภายใต้ “Monitor > IPsec Monitor” หากคุณไม่ได้เปิดใช้งาน Auto-negotiate ในขั้นตอนที่ 2 หรือ 6 ก่อนหน้านี้ คุณอาจต้อง Highlight tunnel และเลือก “Bring Up”

    => จาก PC ในเครือข่าย HQ, ให้ลอง Ping PC บนเครือข่าย Branch โดยใช้ IP ใหม่สำหรับ Branch PC การ Ping ควรจะประสบความสำเร็จ

    => จาก PC ในเครือข่าย Branch, ให้ลอง Ping PC บนเครือข่าย HQ โดยใช้ IP ใหม่สำหรับ HQ PC การ Ping ควรจะประสบความสำเร็จ

    11. คำอธิบาย
    => เมื่อใช้ PC ตัวอย่างสองเครื่องด้านล่าง, Source และ Destination NAT ที่ดำเนินการเพื่ออนุญาตให้ PC สองเครื่องเหล่านี้ใน Subnet ที่ซ้อนทับกัน (Overlapping subnets) สื่อสารกันได้ โดยมีขั้นตอนการทำงานดังนี้

    ขั้นตอนที่ 1 - Ping Request:  HQ Test PC ส่งการ Ping ไปยัง IP Address ใหม่ของ Branch Test PC ที่ 10.2.2.98
    Src IP: 192.168.1.12
    Dst IP: 10.2.2.98

    ขั้นตอนที่ 2 - Source NAT:  HQ FortiGate ได้รับ Ping และหลังจากการค้นหาเส้นทาง, จับคู่ Traffic กับ Firewall policy From-HQ-to-Branch ที่คุณสร้างในขั้นตอนที่ 5
    Src IP: 10.1.1.12
    Dst IP: 10.2.2.98

    ขั้นตอนที่ 3 - Destination NAT:  Branch FortiGate ได้รับ Traffic บน IPsec tunnel และก่อนที่ Policy จะจับคู่, Virtual IP (VIP) ที่คุณสร้างขึ้นจะเรียกว่า Branch-new-to-original จากนั้นจะดำเนินการ Destination NAT (DNAT)
    Src IP: 10.1.1.12
    Dst IP: 192.168.1.98
    หลังจาก DNAT, จะทำการค้นหาเส้นทาง และ Traffic จะ Match กับ From-HQ-to-Branch policy ที่คุณสร้างในขั้นตอนที่ 9

    ขั้นตอนที่ 4 - Ping Reply:  Branch Test PC ได้รับคำขอ Ping จาก HQ Test PC และส่ง Ping ตอบกลับไปที่ 10.1.1.12
    Src IP: 192.168.1.98
    Dst IP: 10.1.1.12
    ตาราง Session บนแต่ละ FortiGate จะจำ SNAT หรือ DNAT ที่ดำเนินการระหว่างขั้นตอนที่ 2 และขั้นตอนที่ 3 และจะดำเนินการ้อนกลับในการตอบกลับ Traffic