การสร้าง Web Server บน EC2 ที่ไม่มี Public IPv4 โดยใช้ CloudFront VPC Origin
สวัสดีครับ POP จากบริษัท Classmethod (Thailand) ครับ
ครั้งนี้จะมาแนะนำการตั้งค่า Web Server บน EC2 ที่ไม่มี Public IPv4 และสามารถเชื่อมต่อจากสภาพแวดล้อม IPv4 ได้โดยจะใช้งาน EC2 ร่วมกับ CloudFront
หลังจากที่ AWS มีการปรับขึ้นราคาของ IPv4 ทางเราก็อยากจะสร้าง Web Server ที่ไม่ต้องใช้ IPv4 ดูบ้าง
เราสามารถทำได้โดยใช้ฟีเจอร์ VPC Origin ของ CloudFront
นอกจากนี้ EC2 ยังสามารถใช้ IPv6 เพื่อให้สะดวกต่อการเชื่อมต่อผ่าน SSH ได้ด้วย
แผนผังโครงสร้าง (Architecture Diagram)
หมายเหตุ: Web Server มีเพียง IPv6 หากต้องการเชื่อมต่อ SSH จากสภาพแวดล้อมที่ใช้ IPv4 จะไม่สามารถทำได้โดยตรง
จึงจำเป็นต้องมีวิธีการอัปโหลดไฟล์หรือจัดการอื่นๆ เพิ่มเติม
โครงสร้างโดยรวมจะเป็นดังนี้:

การสร้าง VPC
ครั้งนี้เราจะดำเนินการในรีเจี้ยน Singapore
ให้ค้นหาและเลือก VPC

เลือก Your VPCs จากเมนูด้านซ้าย

คลิก Create VPC

ก็จะเข้ามาที่หน้าจอ Create VPC แล้วตั้งค่า VPC settings ดังนี้
・Resources to create: VPC and more
・Name tag auto-generation [✅ Auto-generate]: tinnakorn-test-ipv6-vpc (ป้อนชื่อตามต้องการ แต่ต้องระวัง Prefix ส่วนท้าย เนื่องจากระบบจะเติม -vpc ต่อท้ายให้อัตโนมัติ โดยระหว่างป้อนชื่อให้สังเกตที่หน้าจอด้านขวาด้วย)
・IPv4 CIDR block: 192.168.0.0/16 (ป้อนช่วง Network ที่ต้องการ)
・IPv6 CIDR block: Amazon-provided IPv6 CIDR block
หมายเหตุ: กำหนดช่วงของ Network ที่คุณต้องการกำหนดให้กับ VPC ของคุณ
192.168.0.0/16 หมายถึงช่วงของ IP Address 65536 ตั้งแต่ 192.168.0.0 - 192.168.255.255

・Number of Availability Zones (AZs): 1
・Number of public subnets: 1
・Number of private subnets: 0
・คลิก Customize subnets CIDR blocks
・แล้วกำหนด Public subnet CIDR block in ap-southeast-1a: 192.168.0.0/24 (โปรดกำหนดให้สอดคล้องกับ IPv4 CIDR block)

・Egress only internet gateway: No
・NAT gateways ($): None
・VPC endpoints: None
・DNS options: ✅️ Enable DNS hostnames, ✅️ Enable DNS resolution
・คลิก Create VPC

คลิก View VPC

เมื่อสร้างเสร็จแล้วจะได้หน้าจอแบบนี้

ตรวจสอบข้อมูลที่สร้างขึ้น
เมื่อสร้าง VPC เสร็จแล้ว จะได้สิ่งที่ถูกสร้างขึ้นมาจาก VPC ดังนี้
| Function | ID | 
|---|---|
| VPC | tinnakorn-test-ipv6-vpc | 
| Subnets | tinnakorn-test-ipv6-subnet-public1-ap-southeast-1a | 
| Route Table | tinnakorn-test-ipv6-rtb-public | 
| Internet Gateway | tinnakorn-test-ipv6-igw | 
ทีนี้เรามาตรวจสอบ Subnets, Route tables และ Internet gateways กันครับ
ตรวจสอบ Subnets
คลิก Subnets จากเมนูด้านซ้าย แล้วค้นหาโดยป้อนชื่อเดียวกับ VPC แต่ให้ตัด Prefix -vpc ออกไป แล้วเติม Prefix ของ Subnets ดังนี้
[your_name]-subnet-public1-ap-southeast-1a

ตรวจสอบ Route tables
คลิก Route Tables จากเมนูด้านซ้าย แล้วค้นหาโดยป้อนชื่อเดียวกับ VPC แต่ให้ตัด Prefix -vpc ออกไป แล้วเติม Prefix ของ Route tables ดังนี้
[your_name]-rtb-public

ตรวจสอบ Internet gateways
คลิก Internet gateways จากเมนูด้านซ้าย แล้วค้นหาโดยป้อนชื่อเดียวกับ VPC แต่ให้ตัด Prefix -vpc ออกไป แล้วเติม Prefix ของ Internet gateways ดังนี้
[your_name]-igw

ตรวจสอบ Managed prefix lists
เลือก Managed prefix lists จากเมนูด้านซ้าย ก็จะเห็น Prefix list ID อยู่หลายตัว

ซึ่งตัวที่จะใช้มีดังนี้
| Address family | Prefix List ID | Prefix list name | อธิบาย | 
|---|---|---|---|
| IPv6 | pl-000f9420a91cfc3b6 | com.amazonaws.ap-southeast-1.ipv6.ec2-instance-connect | สำหรับเชื่อมต่อ SSH | 
| IPv4 | pl-31a34658 | com.amazonaws.global.cloudfront.origin-facing | สำหรับเชื่อมต่อ HTTP | 
ให้บันทึกเตรียมไว้ เนื่องจากจะต้องใช้ข้อมูลนี้ในภายหลัง

การสร้าง EC2 Instance สำหรับใช้เป็น Web Server
ดูตัวอย่างการสร้าง EC2 Instance ได้ที่ลิงก์ด้านล่างนี้ แต่สำหรับวิธีการกำหนด Network settings ให้คลิกดูที่หัวข้อย่อย ตัวอย่างการสร้าง EC2 Instance และกำหนด Network settings ของบทความนี้ เนื่องจากการกำหนดค่าต่างกัน
นอกจากนี้โปรดสร้าง EC2 Instance สำหรับใช้เป็น Web Server นี้ในรีเจี้ยน Singapore
เมื่ออ่านรายละเอียดด้านบนนี้เสร็จแล้ว มาดำเนินการสร้าง EC2 Instance กัน
ตัวอย่างการสร้าง EC2 Instance และกำหนด Network settings
Region:
SingaporeEC2 Instance
Name and tags
Name:tinnakorn-test-ipv6-ec2(ป้อนชื่อตามต้องการ)Application and OS Images (Amazon Machine Image)
Amazon Machine Image (AMI):Amazon Linux 2023 kernel-6.1 AMI(Default)Instance type
Instance type:t3.micro(Default)Key pair (login)
Key pair name - required:Proceed without a key pair (Not recommended)(ครั้งนี้จะไม่ใช้ Key pair)Network settings (
) \color{red} สำคัญมาก VPC - required:
tinnakorn-test-ipv6-vpc(เลือก VPC IPv6 ที่สร้างก่อนหน้านี้)
Subnet: เมื่อเลือก VPC แล้ว Subnet จะถูกเลือกโดยอัตโนมัติ
Auto-assign public IP:Disable(ปิดการใช้งาน Public IPv4 address)
Auto-assign IPv6 IP:Enable(เปิดการใช้งาน IPv6)
Firewall (security groups)
Create security group
Security group name - required:tinnakorn-test-ipv6-ec2(ตั้งชื่อที่ต้องการ)
Description - required":tinnakorn-test-ipv6-ec2(ป้อนตามต้องการ)
Inbound Security Group Rules
▼ Security group rule 1 (TCP, 22, com.amazonaws.ap-southeast-1.ipv6.ec2-instance-connect)
Type:ssh| Source type:Custom| Source: com.amazonaws.ap-southeast-1.ipv6.ec2-instance-connect →pl-000f9420a91cfc3b6(ssh: ดึงข้อมูลจาก Managed Prefix List)
▼ Security group rule 2 (TCP, 80, com.amazonaws.global.cloudfront.origin-facing)
Type:HTTP| Source type:Custom| Source: com.amazonaws.global.cloudfront.origin-facing →pl-31a34658(HTTP: ดึงข้อมูลจาก Managed Prefix List)
▼ Advanced network configuration
Assign Primary IPv6 IP:Yes() \color{red} สำคัญมาก 
Configure storage
1x8GiBgp3Root volume, 3000 IOPS, Not encrypted (Default)
หลังจากสร้างและเข้ามาที่หน้าจอ EC2 Instance แล้ว จะเห็น IPv6 address ดังนี้
IPv6 address: xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx (IPv6 address นี้จะได้จากการ Random หลังจากสร้าง Instance ครั้งแรก ซึ่งจะไม่เหมือนกับตัวอย่างนี้)
ส่วน Public IPv4 address จะไม่มี เนื่องจากเราตั้งค่าเป็น Disable

การเชื่อมต่อไปยัง EC2 ผ่าน EC2 Instance Connect
เข้ามาที่หน้าจอ EC2 Instance แล้วเลือก Connect

แล้วดำเนินการ EC2 Instance Connect ดังนี้
・เลือกแท็บ EC2 Instance Connect
・เลือก IPv6 address
・ป้อน Username เป็น root
・คลิก Connect

หากเชื่อมต่อสำเร็จจะแสดงหน้าจอแบบนี้

การติดตั้ง ตั้งค่า และทดสอบ Apache
รันคำสั่งตามนี้ใน Terminal บน EC2 Instance Connect ดังนี้
คำสั่ง Update server ให้เป็นปัจจุบัน
yum update -y
คำสั่งติดตั้ง Apache
yum install httpd -y
คำสั่งเริ่มต้นระบบ Apache
systemctl start httpd
คำสั่งสร้างไฟล์สำหรับทดสอบการเตรียม Server (ครั้งนี้คือไฟล์ index.html)
・ขั้นตอนนี้คือการสร้างไฟล์ "index.html" แบบง่ายๆ เพื่อทดสอบว่า server ให้บริการไฟล์จากโฟลเดอร์ /var/www/html ได้
・ถ้าไม่มีไฟล์นี้ เวลาเรียก wget http://127.0.0.1/ ก็จะไม่มี response กลับมา
echo "<html><body>test ipv6" > /var/www/html/index.html
คำสั่งตรวจสอบว่าสามารถดูไฟล์ html ที่สร้างจากขั้นตอนที่แล้วได้หรือไม่
wget http://127.0.0.1/
Output (example)
ซึ่งหากแสดงผลลัพธ์แบบนี้ ถือว่าการทดสอบสำเร็จ (ครั้งนี้คือไฟล์ index.html)
・127.0.0.1 คือ loopback address (IPv4) ของเครื่องตัวเอง หมายถึงการให้ server ตอบกลับ request ภายในเครื่อง เพื่อเช็กว่า web service ทำงานหรือไม่
・ถ้า server ตอบกลับด้วย 200 OK แสดงว่า web server ทำงานและสามารถให้บริการหน้าเว็บได้ถูกต้อง
[root@ip-xx-xx-xx-xx ~]# wget http://127.0.0.1/
--2025-10-15 05:58:54--  http://127.0.0.1/
Connecting to 127.0.0.1:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 22 [text/html]
Saving to: ‘index.html’
index.html                                100%[====================================================================================>]      22  --.-KB/s    in 0s      
2025-10-15 05:58:54 (4.02 MB/s) - ‘index.html’ saved [22/22]
[root@ip-xx-xx-xx-xx ~]#
คำสั่งลบไฟล์ index.html ที่ wget โหลดมาเก็บใน directory ปัจจุบัน (ครั้งนี้คือ /root ซึ่งถ้าอยู่ใน path root สามารถรันคำสั่งนี้ลบได้เลย)
rm -rf index.html
คำสั่งเปิดดูไฟล์ log การเข้าใช้งาน access log ของเว็บเซิร์ฟเวอร์ Apache (httpd) โดยใช้โปรแกรม less
less /var/log/httpd/access_log
Output (example)
จะเห็นว่ามีบันทึกการเข้าใช้งานเว็บ access log ของ Apache บน EC2 นี้ โดยสามารถเช็กได้ว่าใครเข้ามา ขอหน้าเว็บอะไร และได้รับการตอบกลับแบบไหน
127.0.0.1 - - [15/Oct/2025:05:58:54 +0000] "GET / HTTP/1.1" 200 22 "-" "Wget/1.21.3"
/var/log/httpd/access_log (END)
ดูตัวอย่างการตั้งค่าเกี่ยวกับ IPv6 ได้ที่ลิงก์ด้านล่างนี้
4ステップでWebサーバをIPv6に対応させる方法 (ภาษาญี่ปุ่น)
สร้าง VPC Origin ใน CloudFront
ก่อนอื่นไปที่หน้าจอ EC2 Instance แล้วคัดลอก Instance ARN เตรียมไว้

ไปที่ช่อง Search แล้วค้นหาและเลือก CloudFront

เลือก VPC origins จากเมนูด้านซ้าย แล้วคลิก Create VPC origin

แล้วตั้งค่าหน้าจอ Create VPC origin ดังนี้
・Name: tinnakorn-test-ipv6-vpc-origin (ป้อนชื่อที่ต้องการ)
・Origin ARN: arn:aws:ec2:ap-southeast-1:[aws-account-id]:instance/[instance-id]
・Protocol: HTTP only → [HTTP port: 80]
・คลิก Create VPC origin

แล้วรอจนกว่า Status จะเปลี่ยนจาก "Deploying" เป็น Deployed (ใช้เวลาประมาณ 10 นาที)
แล้วค่อยดำเนินการสร้าง Distribution ในขั้นตอนถัดไป

สร้าง Distribution ใน CloudFront
เลือก Distributions จากเมนูด้านซ้าย แล้วคลิก Create distribution

แล้วเริ่มสร้าง Distribution ดังนี้
Step 1: Get started
・Distribution name: tinnakorn-test-ipv6-cf
・Description - optional: tinnakorn-test-ipv6-cf
・คลิก Next

Step 2: Specify origin
Origin type
・VPC origin
Origin
・VPC origin: คลิก Browse VPC origins

ค้นหาและเลือก VPC origin ที่สร้างจากขั้นตอนที่แล้ว และคลิก Choose

แล้วในส่วนของ Origin จะแสดงดังนี้
・VPC origin: ip-xx-xx-xx-xx.ap-southeast-1.compute.internal
・VPC origin ID: ip-xx-xx-xx-xx.ap-southeast-1.compute.internal-xxxxxxxxxxx
ส่วน "Origin settings" และ "Cache settings" ในหัวข้อ Settings จะใช้เป็นค่าเริ่มต้นสำหรับ VPC origin ทั้งหมด ก็จะไม่ตั้งค่าอะไร ดังนั้นคลิก Next ได้เลย

Step 3: Enable security (ชื่อหัวข้อ)
Enable security
・Web Application Firewall (WAF): Do not enable security protections (หากต้องการเพิ่มความปลอดภัยแนะนำให้เปิดใช้งาน)
・คลิก Next

ดูรายละเอียดเพิ่มเติมเกี่ยวกับ WAF ได้ที่ลิงก์ด้านล่างนี้
Step 4: Review and create
ตรวจสอบการตั้งค่าตั้งแต่ Step 1 - Step 3 แล้วคลิก Create distribution
เมื่อสร้างเสร็จแล้วจะแสดงหน้าจอแบบนี้ แล้วรอระบบเริ่มต้นสักครู่จนกว่าจะ Deploy เสร็จสิ้น

การตรวจสอบการทำงานของ Server
มาที่หน้าจอ CloudFront แล้วคลิกไอคอนคัดลอกที่ Distribution domain name เตรียมไว้

แล้วนำ Distribution domain name มาเปิดบนเว็บเบราว์เซอร์ ก็จะแสดงหน้าจอเว็บไซต์แบบนี้
https://xxxxxxxxxxxxxx.cloudfront.net

การกำหนด Hostname โดยใช้ Route53
สามารถกำหนด Hostname ได้โดยใช้ Route53 โดยดูวิธีการได้จากบทความด้านล่างนี้
สรุป
ทางเราตั้งใจจะทดสอบฟีเจอร์ CloudFront ที่รองรับ IPv6 Origin แต่การเชื่อมต่อไปยัง IPv6 Origin ของ EC2 ไม่สำเร็จ
ดังนั้นจึงเปลี่ยนมาใช้ VPC Origin ซึ่งทำงานได้ดี และได้นำมาแบ่งปันในบทความนี้
นอกจากนี้ ณ เดือนตุลาคม 2025 พบว่าใน Thailand Region ยังไม่สามารถใช้งานได้ เนื่องจากฟีเจอร์ VPC Origin ยังไม่รองรับใน Thailand Region
ดูรายละเอียดเพิ่มเติมได้ที่ AWS Documentation ด้านล่างนี้
Supported AWS Regions for VPC origins
การใช้ IPv6 Origin มีข้อดีคือสามารถลดค่าใช้จ่ายได้โดยไม่ต้องใช้ IPv4 บน EC2












