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

ความสับสนส่วนใหญ่มาจากการนำคำว่า dual stack ไปใช้กับดีไซน์ที่เป็น dual stack เพียงจุดเดียว บริการหนึ่งสามารถเป็น dual stack ภายใน เป็น single stack บนที่อยู่ภายนอก และยังทำงานได้อย่างดีเยี่ยมสำหรับไคลเอนต์ สิ่งที่ทำไม่ได้คือการทำงานโดยบังเอิญ

สองตระกูลภายใน หนึ่งเส้นทางภายนอก

การเชื่อมต่อภายนอกคือ IKE บน UDP และต้องการตระกูลที่อยู่หนึ่งตระกูลที่เข้าถึงได้จากที่ใดก็ตามที่ไคลเอนต์อยู่ ที่อยู่ IPv6 ภายในไม่ต้องการผู้ให้บริการที่รองรับ IPv6 เพราะแพ็กเก็ตภายในเป็นเพย์โหลดภายในแพ็กเก็ตภายนอก การติดตั้งที่ทำงานได้จำนวนมากขนส่งคำนำหน้า IPv6 ผ่านลิงก์อัปลิงก์ที่มีเพียง IPv4

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

มอบที่อยู่ให้ไคลเอนต์ในแต่ละตระกูล

การขอทั้งสองตระกูลเป็นคำสั่งบรรทัดเดียวฝั่งไคลเอนต์ หากเกตเวย์มีสิ่งที่จะแจกจ่าย พูลที่มีชื่อช่วยแยกแหล่งที่มาจากเครือข่ายบริการ และคุณสมบัตินี้เองที่ทำให้กฎไฟร์วอลล์อ่านได้แม้ผ่านไปหกเดือน

pools {
  pool4 { addrs = 10.90.0.0/24 }
  pool6 { addrs = fd42:90::/64 }
}
connections {
  private-access {
    version = 2
    pools = pool4, pool6
    local  { auth = pubkey  certs = gateway.pem  id = vpn.example.com }
    remote { auth = pubkey  cacerts = ca.pem  vips = 0.0.0.0, :: }
    children {
      private { local_ts = 10.60.0.0/16, fd42:60::/48  remote_ts = dynamic }
    }
  }
}

ค่าvipsขอที่อยู่จากแต่ละตระกูล และรายการพูลเป็นตัวกำหนดว่าที่อยู่เหล่านั้นมาจากไหน เอกสารของ strongSwan เกี่ยวกับ IP เสมือนครอบคลุมคำขอหลายรายการและการจัดสรรพูล รวมถึงประเด็นที่ว่าไคลเอนต์ที่ขอที่อยู่เฉพาะเป็นเพียงการแสดงความชอบซึ่งผู้ตอบสามารถเพิกถอนได้ อย่าสร้างกฎการเข้าถึงที่ถือว่าไคลเอนต์ได้รับค่าเดิมเสมอ

สร้างคำนำหน้าเฉพาะภายในของคุณเองแทนการคัดลอกตัวอย่าง สององค์กรที่ทั้งคู่fd42::/16นำไปใช้จะพบการชนกันครั้งแรกที่เชื่อมต่อถึงกัน และการวินิจฉัยเรื่องนั้นไม่น่าพอใจ

ตัวเลือกอธิบายปลายทาง ไม่ใช่แหล่งที่มา

ตัวเลือกทราฟฟิกภายในของ SA ลูกบอกว่าเครือข่ายที่ได้รับการป้องกันใดอยู่หลังเกตเวย์ และตัวเลือกระยะไกลอธิบายว่าไคลเอนต์ใช้สิ่งใดเป็นแหล่งที่มาได้ ที่อยู่พูลเสมือนเป็นของฝั่งแหล่งที่มาของนโยบายนั้น การใส่ไว้ในรายการปลายทางเป็นการอ่านการกำหนดค่าที่ผิดพลาดซึ่งพบบ่อย

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

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

DNS และเส้นทางคำตอบเป็นตัวตัดสินว่าจะรู้สึกว่าเสร็จสมบูรณ์หรือไม่

คำตอบของตัวแปลงชื่อเป็นอิสระจากการขนส่งที่ใช้เข้าถึงตัวแปลงชื่อ ชื่อหนึ่งสามารถคืนระเบียน A ระเบียน AAAA หรือทั้งสอง และไคลเอนต์เลือกตามกฎความชอบของตนเองหากบริการภายในเผยแพร่ระเบียน AAAA แต่ไม่มีสิ่งใดกำหนดเส้นทางคำนำหน้านั้น ไคลเอนต์บนเครือข่าย dual-stack จะลองเส้นทาง IPv6 ก่อนและค้างอยู่ตรงนั้นจนกว่าจะล้มเหลว ไม่มีสิ่งใดในการกำหนดค่าอุโมงค์ดูผิดในระหว่างนั้น

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

ตรวจสอบทั้งสองตระกูลก่อนจะบอกว่าเสร็จแล้ว

การกำหนดค่าที่โหลดได้ไม่ใช่การกำหนดค่าที่ทำงานได้ อ่านสถานะที่เดมอนรายงาน ยืนยันการจัดสรรพูล แล้วดูเส้นทางที่ไคลเอนต์ติดตั้งจริง

swanctl --list-sas
swanctl --list-pools
ip -6 addr show scope global
ip -6 route get fd42:60::10

สองคำสั่งแรกแสดง SA ลูกที่สร้างแล้วและพูลใดยังมีที่อยู่ว่าง ทำให้แผนที่ใช้ได้กับไคลเอนต์คนแรกและล้มเหลวกับคนที่สิบมองเห็นได้ สองคำสั่งสุดท้ายแสดงว่าไคลเอนต์ได้รับที่อยู่ IPv6 สากลจากพูลหรือไม่ และทราฟฟิกไปยังคำนำหน้าที่ได้รับการป้องกันจะไปที่ใดจริง เปรียบเทียบที่อยู่ที่จัดสรรกับพูลที่คุณกำหนดค่าไว้ ไม่ใช่กับที่อยู่ที่คุณหวังไว้ หากผู้ตอบเลือกค่าอื่นตามนโยบายของตน เส้นทางและกฎไฟร์วอลล์ยังต้องสอดคล้องกับสิ่งที่เลือก

จากนั้นทดสอบโฮสต์ที่ได้รับการป้องกันหนึ่งเครื่องต่อตระกูล และทดสอบชื่อที่แก้ไขได้ทั้งสอง การทดสอบตระกูลเดียวไม่บอกอะไรเกี่ยวกับอีกครึ่งของแผนที่คุณยังไม่ได้ฝึก และเส้นทางที่ขาดหายมักอยู่ในครึ่งนั้น

บทความที่เกี่ยวข้อง