วิธีการใช้ Client VPN ในการ Name Resolver ให้กับ Resource records ใน Private hosted zone (AWS)

การทำให้ Client VPN เข้าถึง Private hosted zone ได้โดยการตั้งค่า Route 53 Resolver inbound endpoint และเปิดการตั้งค่าใน Client VPN ให้สามารถใช้งาน DNS Server ได้
2024.03.26

สวัสดีครับ ต้า ครับ
วันนี้เราจะมาทำการทดลองกันครับ

แต่ก่อนอื่นที่เราจะทำการทดลอง ผมจะขออธิบายเกี่ยวกับที่มาที่ไป, สิ่งที่อยากทำ, แล้วก็ Service ที่เกี่ยวข้องในบทความนี้กันก่อนครับ

ที่มาที่ไป

โดยก่อนอื่นเรามาทำความเข้าใจเกี่ยวกับ Private hosted zone ใน Route 53 กันก่อนครับ
AWS จะมี Service ที่มีชื่อว่า Route 53 ซึ่งใช้ในการจัดการเกี่ยวกับ Domain หรือ Host zone ต่างๆ ครับ
โดยถ้าจะให้ยกอย่างให้เห็นภาพว่าเอาไว้ทำอะไร ผมเคยเขียนบทความที่ได้ลองซื้อ Domain จริงๆมาจาก Route 53 แล้วสามารถตรวจสอบได้จากบทความต่อไปนี้ด้วยครับ

(กลับเข้าเรื่อง)
สำหรับการสร้าง hosted zone จะมีอยู่ 2 แบบ คือ Public และ Private ครับ
โดยในแต่ละชนิดจะมีความสามารถที่ต่างกันครับ

Public: ใช้สำหรับให้สาธารณะ อุปกรณ์ต่างๆที่ใช้ Public internet ที่อยู่ภายนอก AWS จะสามารถตรวจพบ Hosted zone นี้ได้
Private: ใช้สำหรับภายในวง VPC หรือภายใน AWS โดยที่อุปกรณ์ต่างๆที่อยู่ภายนอก AWS จะไม่สามารถตรวจพบ หรือ เข้าถึง private hosted zone ได้

สำหรับใครที่ยังไม่เห็นภาพของ Private Hosted zone สามารถตรวจสอบเพิ่มเติมจากบทความต่อไปนี้ได้ครับ

จากหัวข้อด้านบนนี้ ผมเขียนไว้ว่า Private คนภายนอกจะไม่สามารถเข้าถึงได้ก็จริง แต่ก็มีวิธีการอยู่ที่จะให้คนภายนอก VPC หรือ AWS เข้าถึงได้โดยการใช้ VPN ครับ
และนั่นก็คือสิ่งที่ผมอยากจะทำในบทความนี้ครับ

สิ่งที่อยากทำ

สิ่งที่ผมอยากทำก็คือใช้ Client VPN ในการเข้าถึง Private hosted zone ใน AWS ครับ
ตามภาพโครงสร้างต่อไปนี้ครับ
https://devio2023-media.developers.io/wp-content/uploads/2024/03/re1.png

ผมจะใช้ Client VPN ในการสวมรอยเข้ามาอยู่ในวง VPC ซึ่งการทำแบบนี้จะทำให้เราสามารถ Name resolution Private IP ในวง VPC ได้
แต่การทำแค่นี้จะไม่สามารถทำ Name resolution DNS Server ของ private hosted zone ใน Route 53 ได้ครับ
โดยการที่จะให้ Client VPN สามารถใช้งาน private hosted zone ได้ จำเป็นต้องใช้ Route 53 Resolver inbound endpoint (ตามในภาพ) เข้ามาช่วยในการเชื่อมต่อเข้าถึง private hosted zone ครับ

ลงมือทำ

สร้าง Client VPN

https://devio2023-media.developers.io/wp-content/uploads/2024/03/re3.png
ในขั้นตอนแรกเราต้องสร้าง VPC และ Client VPN โดยเราสามารถอ้างอิงวิธีการสร้างได้จากบทความด้านล่างต่อไปนี้ได้ครับ

โดยรายละเอียดของ VPC ในบทความนี้จะมีดังต่อไปนี้

  • CIDR ของ VPC คือ 10.111.0.0/16
  • CIDR ของ Public subnet คือ 10.111.0.0/24
  • เปิดการตั้งค่า DNS hostnames และ DNS resolution (ตามภาพด้านล่าง)

https://devio2023-media.developers.io/wp-content/uploads/2024/03/re2.png

  • Client CIDR ของ Client VPN คือ 10.112.0.0/22

https://devio2023-media.developers.io/wp-content/uploads/2024/03/re6.png

ตั้งค่าให้ Client VPN สามารถเข้าถึง DNS Server ใน AWS ได้

*หากเราไม่ทำการเปิดใช้งานหัวข้อต่อไปนี้จะทำให้ Client VPN หา DNS servers ใน AWS ไม่เจอ

https://devio2023-media.developers.io/wp-content/uploads/2024/03/re7.png

เลือก Action แล้วเลือก Modify client VPN endpoint

https://devio2023-media.developers.io/wp-content/uploads/2024/03/re8.png

เปิดหัวข้อ Enable DNS servers
ในช่อง DNS server 1 IP address ให้ใส่ ระยะ CIDR ของ VPC +2
เช่น ในบทความนี้ใช้ 10.111.0.0/16 ในช่อง DNS server 1 IP address ให้ใส่ 10.111.0.2 (มาจาก 10.111.0.0 + 2)

หลังจากนั้น เลื่อนมาล่างสุด กด Modify client VPN endpoint

สร้าง EC2

https://devio2023-media.developers.io/wp-content/uploads/2024/03/re4.png
สร้าง EC2 ที่ติดตั้ง Apache + มีหน้า test.php อ้างอิงตามบทความต่อไปนี้

โดยมีรายละเอียดต่อไปนี้

  • ไม่มี Public IP (เพื่อพิสูจน์ว่า เราเชื่อมต่อโดยใช้ Private IP เท่านั้น) ((แต่จะใช้ Public IP ก็ได้ เพื่อความสะดวกในการติดตั้ง PHP + Apache))
  • ตั้งค่า Private IP เป็น 10.111.0.111 (เพื่อความเข้าใจง่าย)
  • เปิด Security Group inbound rule: HTTP 0.0.0.0 (ทดสอบการเข้าถึงผ่าน browser)

https://devio2023-media.developers.io/wp-content/uploads/2024/03/re9.png
https://devio2023-media.developers.io/wp-content/uploads/2024/03/re10.png

*หมายเหตุ: หากทำการตั้งค่าเหมือนผมให้ใส่ Elastic IP กับ EC2 หลังจากนี้เพื่อการติดตั้ง PHP + Apache ผ่านอินเทอร์เน็ตได้ง่ายๆ (ติดตั้งเสร็จแล้วค่อยลบ Elastic IP ออก)

หลังจากการสร้าง EC2 แล้วให้เราเปิด Client VPN แล้วทำการเข้า EC2 ผ่าน Private IP(ในกรณีนี้คือ 10.111.0.111) หากได้ผลลัพท์ตามภาพด้านล่างถือว่าโอเค ไปทำขั้นตอนต่อไปได้ครับ
(ใครไม่ได้ แล้วใช้ Cloudflare WARP ลองปิด Cloudflare WARP ดูก่อนครับ)

https://devio2023-media.developers.io/wp-content/uploads/2024/03/re11.png

สร้าง Private hosted zone

https://devio2023-media.developers.io/wp-content/uploads/2024/03/re5.png
ไปที่ Route 53 Console
ไปที่ Hosted zones
ไปที่ Create hosted zone

https://devio2023-media.developers.io/wp-content/uploads/2024/03/r12.png

ตั้งชื่อที่ Hosted zone ที่เราต้องการ (ในกรณีของบทความนี้คือ ec2.private)
เลือก Private hosted zone
เลือก Region และ VPC ที่เราสร้างขึ้น
แล้วกด Create hosted zone

https://devio2023-media.developers.io/wp-content/uploads/2024/03/r13.png

เข้าไปที่ Hosted zone ที่เราสร้างขึ้น
กด Create Record

https://devio2023-media.developers.io/wp-content/uploads/2024/03/r14.png

Record name: my เลือกเป็น Type: A Record
Value: ให้ใส่เป็น Private IP ของ EC2(ในกรณีนี้คือ 10.111.0.111)
กด Create records

https://devio2023-media.developers.io/wp-content/uploads/2024/03/r15.png

ถ้าได้ตามภาพด้านล่างแบบนี้คือ OK

https://devio2023-media.developers.io/wp-content/uploads/2024/03/r16.png

สร้าง Route 53 Resolver inbound endpoint

https://devio2023-media.developers.io/wp-content/uploads/2024/03/re1.png
ไปที่ Amazon Route 53 Resolver Console
เลือก Region ที่เราใช้งานอยู่(ในกรณีของบทความนี้คือ Singapore region)

เลือก Configure endpoints

https://devio2023-media.developers.io/wp-content/uploads/2024/03/r17.png

เลือก Inbound only
กด Next

https://devio2023-media.developers.io/wp-content/uploads/2024/03/r18.png

ตั้งค่าต่อไปนี้
Endpoint name: ใส่ชื่อที่เราต้องการ (ในกรณีของบทความนี้คือ test-re-inbound)
VPC in the Region: ap-southeast-1 (Singapore): เลือก VPC ที่เราสร้างขึ้น
Security group for this endpoint: เลือก Default Security Group Endpoint Type: IPv4

https://devio2023-media.developers.io/wp-content/uploads/2024/03/r19.png

IP addresses: เลือก Availability Zone และ Subnet ที่เราสร้างขึ้น

*หมายเหตุ: AWS จะบังคับให้เราใช้ 2 IP addresses เพื่อความ Availability ซึ่งทางที่ดี เราควรจะเลือก Availability Zone ที่แตกต่างกัน แต่เนื่องจาก บทความนี้ทำขึ้นเพื่อการทดสอบ เราจึงเลือก Availability Zone และ Subnet เดียวกัน เพื่อความเข้าใจง่าย

https://devio2023-media.developers.io/wp-content/uploads/2024/03/r20.png

กด Next
กด Submit

เมื่อขึ้นตามภาพด้านล่าง ถือว่าเสร็จแล้วครับ

https://devio2023-media.developers.io/wp-content/uploads/2024/03/r21.png

หลังจากนั้น ให้เราทำการเปิด Client VPN
เมื่อเราลองเข้าเว็บไซต์ไปยัง http://my.ec2.private/ จะพบว่าเราสามารถเข้าใช้งานได้แล้ว

https://devio2023-media.developers.io/wp-content/uploads/2024/03/r22.png

นอกจากนี้ หากเราไปในหน้า http://my.ec2.private/test.php จะเห็นว่าที่มาของเว็บไซต์นี้คือ 10.111.0.111 ซึ่งเป็น ec2 ที่เราสร้างขึ้นครับ

https://devio2023-media.developers.io/wp-content/uploads/2024/03/r23.png

หลังจากนั้นเมื่อเราใช้ dig หรือ lookup เพื่อ name resolver ดูก็จะได้ผลลัพท์ว่าเจอ URL ของเรา

$ dig my.ec2.private

; <<>> DiG 9.18.12-0ubuntu0.22.04.1-Ubuntu <<>> my.ec2.private
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4089
;; flags: qr rd ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;my.ec2.private.                        IN      A

;; ANSWER SECTION:
my.ec2.private.         0       IN      A       10.111.0.111

;; Query time: 90 msec
;; SERVER: 172.26.128.1#53(172.26.128.1) (UDP)
;; WHEN: Fri Mar 08 17:05:01 +07 2024
;; MSG SIZE  rcvd: 62

และเพื่อเป็นการตรวจสอบให้แน่ใจ เราลองทำการปิด Client VPN แล้วทำอย่างเดิมดู จะเห็นได้ว่า http://my.ec2.private/ ของเราไม่สามารถเข้าใช้งานได้ และทำการ dig ก็จะไม่เจอผลลัพทเหมือนเดิมแล้ว

https://devio2023-media.developers.io/wp-content/uploads/2024/03/r24.png

การลบ Resource ที่สร้างขึ้นมาในบทความนี้

วิธีการลบ Resource ต่างๆที่สร้างขึ้นบทความนี้สามารถอ้างอิงลำดับได้จากภาพต่อไปได้เลยครับ

Inbound endpoints

https://devio2023-media.developers.io/wp-content/uploads/2024/03/r25.png

Record

https://devio2023-media.developers.io/wp-content/uploads/2024/03/r26.png

Hosted zone

https://devio2023-media.developers.io/wp-content/uploads/2024/03/r27.png

Elastic IP(หากได้สร้าง)

https://devio2023-media.developers.io/wp-content/uploads/2024/03/r28.png

EC2

https://devio2023-media.developers.io/wp-content/uploads/2024/03/r29.png

สำหรับวิธีการลบ Resource ที่เกี่ยวกับ Client VPN ไม่ได้พาทำในบทความนี้สามารถอ้างอิงวิธีลบได้จากบทความต่อไปนี้

สรุป

ก็จบกันไปแล้วสำหรับวิธีการทำยังไงให้ Client VPN เข้าถึง Private hosted zone (AWS) หวังว่าบทความนี้จะเป็นประโยชน์สำหรับผู้ที่ใช้ Client VPN กันอยู่นะครับ
แล้วเจอกันในบทความต่อไปครับ

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