การตั้งค่า AWS Site-to-Site VPN บน VPC ใน Thailand Region
ครั้งนี้จะมาแนะนำเกี่ยวกับการตั้งค่า AWS Site-to-Site VPN บน VPC ใน Thailand Region
AWS Site-to-Site VPN คืออะไร?
โดยปกติแล้ว Instance ที่คุณเปิดใช้งานภายใน Amazon VPC จะไม่สามารถสื่อสารกับเครือข่ายภายใน (เช่น AWS Cloud) และอุปกรณ์ภายนอกได้โดยตรง — ตัวอย่างเช่น อาจเป็น Site หรืออุปกรณ์ On-Premises คุณสามารถเปิดให้ VPC ของคุณเข้าถึงอุปกรณ์ภายนอกเหล่านั้นได้ โดยการสร้างการเชื่อมต่อ AWS Site-to-Site VPN (Site-to-Site VPN) และตั้งค่า Routing เพื่อให้ทราฟฟิกวิ่งผ่านการเชื่อมต่อนั้น
ดูรายละเอียดเพิ่มเติมได้ที่ลิงก์ด้านล่างนี้
เป้าหมาย
เนื่องจากเราไม่สามารถสร้าง Network ของฝั่ง On-Premises ได้จริง จึงใช้ VPC หนึ่งตัวจำลองเป็นฝั่ง On-Premises แทน
ในบทความนี้เราจะสร้าง VPC ทั้งฝั่ง AWS และฝั่ง On-Premises (จำลอง)
จากนั้นจะสร้าง EC2 Instance ที่ติดตั้ง VyOS ภายใน VPC ฝั่ง On-Premises เพื่อทำหน้าที่เป็น VPN Router
และสร้าง AWS Site-to-Site VPN connection ใน VPC ฝั่ง AWS
พร้อมตั้งค่า Routing เพื่อให้ทั้งสองฝั่งสามารถเชื่อมต่อกันได้ผ่าน VPN tunnel
การสร้าง VPC
ดูตัวอย่างการสร้าง VPC ได้ที่ลิงก์บทความด้านล่างนี้ (ลิงก์บทความนี้เป็นแค่ตัวอย่าง ซึ่งมีการตั้งค่าบางส่วนที่แตกต่างกัน แนะนำให้ดูตัวอย่างการสร้าง VPC สำหรับ AWS และ On-premises ตามหัวข้อด้านล่างนี้ประกอบด้วย)
ตัวอย่างตั้งค่าการสร้าง VPC สำหรับ AWS และ On-premises (การสร้าง VPC ครั้งนี้จะสร้างในรี้เจี้ยน Singapore ทั้งหมด)
- สร้าง VPC สำหรับ AWS
- สร้าง VPC สำหรับ On-premises
การสร้าง VPC สำหรับ AWS
Region:
Thailand
VPC settings
Resources to create:◎ VPC and more
Name tag auto-generation
✅ Auto-generate:tinnakorn-main
(เมื่อป้อนชื่อแล้วให้สังเกตการเปลี่ยนแปลงด้านขวา)
IPv4 CIDR block:10.0.0.0/16
(Default)Number of Availability Zones (AZs):
1
Number of public subnets:1
Number of private subnets:0
▼ Customize subnets CIDR blocks (คลิกหัวข้อนี้ก่อนแล้วจะเห็นช่องสำหรับป้อน IP)
Public subnet CIDR block in ap-southeast-7a:10.0.0.0/24
(ตัวอย่าง)NAT gateways ($):
None
VPC endpoints:None
DNS options
✅ Enable DNS hostnames
✅ Enable DNS resolutionคลิก
Create VPC
การสร้าง VPC สำหรับ On-premises
Region:
Thailand
VPC settings
Resources to create:◎ VPC and more
Name tag auto-generation
✅ Auto-generate:tinnakorn-onp
(เมื่อป้อนชื่อแล้วให้สังเกตการเปลี่ยนแปลงด้านขวา)
IPv4 CIDR block:192.168.0.0/16
(ตัวอย่าง)Number of Availability Zones (AZs):
1
Number of public subnets:1
Number of private subnets:0
▼ Customize subnets CIDR blocks (คลิกหัวข้อนี้ก่อนแล้วจะเห็นช่องสำหรับป้อน IP)
Public subnet CIDR block in ap-southeast-7a:192.168.0.0/24
(ตัวอย่าง)NAT gateways ($):
None
VPC endpoints:None
DNS options
✅ Enable DNS hostnames
✅ Enable DNS resolutionคลิก
Create VPC
การสร้าง EC2 Instance (VyOS)
ครั้งนี้จะสร้าง EC2 Instance ที่ติดตั้ง VyOS เวอร์ชัน 1.4.3 ในฝั่ง On-Premises เพื่อทำหน้าที่เป็น VPN Router สำหรับเชื่อมต่อระบบระหว่างฝั่ง AWS และ On-Premises
- สร้าง Key Pairs
- สร้าง EC2 Instance (VyOS)
- เชื่อมโยง Elastic IP (EIP) ไปยัง EC2 Instance (VyOS)
- เชื่อมต่อ EC2 Instance (VyOS) ด้วย PuTTY
ก่อนอื่นเลือกรีเจี้ยนให้ตรงกับ VPC ที่สร้างเมื่อสักครู่นี้ ครั้งนี้คือรีเจี้ยน Thailand
แล้วค้นหาและเลือก EC2
แล้วเริ่มทำการสร้าง Key Pairs และ EC2 Instance (VyOS) ตามด้านล่างนี้
การสร้าง Key Pairs
เลือก Key Pairs
จากเมนูด้านซ้าย
คลิก Create key pair
ใส่ชื่อที่ต้องการในช่อง Name เช่น tinnakorn-onp-vyos
แล้วเลือก .ppk
และคลิก Create key pair
หลังจากสร้าง Key Pair เสร็จแล้ว ไฟล์ .ppk
จะถูกดาวน์โหลดลงที่คอมพิวเตอร์ของเราและชื่อไฟล์จะเปลี่ยนไปตามที่เราได้ตั้งชื่อไว้โดยอัตโนมัติ
การสร้าง EC2 Instance (VyOS)
เลือก Instance
จากเมนูด้านซ้าย
คลิก Launch instances
มาที่หัวข้อ Name and tags
แล้วใส่ชื่อที่ต้องการในช่อง Name เช่น tinnakorn-onp-vyos
ถัดมาหัวข้อ Application and OS Images (Amazon Machine Image) คือ Instance จะมีเซิร์ฟเวอร์ให้เลือกใช้มากมาย เช่น macOS, Red Hat, SUSE Linux, Ubuntu, Microsoft Windows, Debian เป็นต้น ซึ่งในบทความนี้จะใช้ VyOS
ในการติดตั้ง
ค้นหา VyOS
+ Enter แล้วรอสักครู่
เลือกแท็บ AWS Marketplace AMIs
แล้วรอสักครู่ ก็จะเห็น VyOS แสดงขึ้นมา ให้คลิก Select ตัวเวอร์ชันปัจจุบัน (VyOS Universal Router for AWS (Standard Support) - Pay-as-You-Go
)
แล้วคลิก Subscribe now
แล้วรอสักครู่
เมื่อเลือก VyOS เสร็จแล้วจะแสดงหน้าจอแบบนี้
ถัดมาหัวข้อ Instance type คือ เราสามารถเลือก Type CPU Memory ที่จะนำไปใช้งานได้ตามความต้องการ ไม่ว่าเว็บไซต์จะมีขนาดเล็กหรือขนาดใหญ่ ก็สามารถเลือกขนาดความจุของ CPU Memory ได้ตามความเหมาะสม
ค้นหาและเลือก t3.medium
ก็จะได้สเปค Family: t3 | 2 vCPU | 4 GiB Memory
ตามนี้
ถัดมาหัวข้อ Key pair (login)
เลือก Key pair name - required ที่สร้างไว้เมื่อสักครู่นี้ เช่น tinnakorn-onp-vyos
ถัดมาหัวข้อ Network settings คลิก Edit
ในส่วนของ VPC ให้ตั้งค่าตามนี้
VPC - required: tinnakorn-onp-vpc
Subnet: เมื่อเลือก VPC แล้ว Subnet จะถูกเลือกโดยอัตโนมัติ
Auto-assign public IP: Enable
เลื่อนมาที่หัวข้อย่อย Firewall (security groups)
จากนั้นเปลี่ยนชื่อ Security group name และ Description - required ตามต้องการ เช่น tinnakorn-onp-vyos
ถัดมาหัวข้อ Inbound security groups rules คือ การตั้งค่า My IP เพื่อจำกัดการเชื่อมต่อ SSH จากทุกตำแหน่ง ซึ่งในส่วนนี้จะทำให้สามารถเชื่อมต่อ SSH จาก My IP (ที่อยู่ IP ปัจจุบันของคุณ) ได้เท่านั้น
ดูที่ "Security group rule 1 (TCP, 22, xx.xx.xx.xx/32)" แล้วเปลี่ยน Source type ให้เป็น My IP
※ส่วน Protocol: UDP, Port range: 500 และ 4500
ไม่ต้องไปตั้งค่าอะไร
ต่อไปคลิก Advanced network configuration
แล้วป้อน "Primary IP: 192.168.0.10
" (ถ้าไม่ได้เลือก VPC ที่เราสร้างขึ้นก่อนหน้านี้ จะไม่มีฟังก์ชันนี้แสดงขึ้นมา)
ถัดมาหัวข้อ Configure storage คือ เราสามารถเพิ่ม Storage ในส่วนของ Size (GiB) ได้ โดยค่าเริ่มต้นจะเป็น 4 GB ในตัวอย่างนี้จะใช้เป็นค่าเริ่มต้น ก็จะไม่ตั้งค่าใดๆ
มาที่หัวข้อ Summary ด้านขวา (หากใช้หน้าจอ Scale ใหญ่อาจแสดงด้านล่าง) แล้วคลิก Launch instance
เมื่อแสดงหน้าจอแบบนี้ ให้เลื่อนลงมาด้านล่างสุดแล้วคลิก View all instances
ค้นหาชื่อ Instance ของเรา แล้วสังเกตที่ Status Checks จะมีสถานะเป็น Initializing
คือ Instance กำลังเริ่มต้นระบบ
เมื่อ Instance เริ่มต้นระบบเสร็จเรียบร้อยแล้ว จะมีสถานะเป็น ✅️ 3/3 checks passed
แล้วคลิก Instance ID ของเรา ก็จะแสดงหน้าจอแบบนี้ (ครั้งนี้จะเบลอ Public IPv4 เพื่อลดความสับสนตอนตั้งค่า AWS Site-to-Site VPN เนื่องจากจะใช้เป็น Elastic IP แทน IP แบบสุ่มนี้)
การเชื่อมโยง Elastic IP (EIP) ไปยัง EC2 Instance (VyOS)
เมื่อเชื่อมโยง EIP เสร็จแล้ว ตรวจสอบ Public IPv4 address ที่หน้าจอ Instance อีกครั้ง
Public IPv4 address ที่ได้รับครั้งนี้คือ 43.208.221.176
ดูวิธีเชื่อมโยง Elastic IP (EIP) ไปยัง EC2 Instance ได้ตามลิงก์บทความด้านล่างนี้
การเชื่อมต่อ EC2 Instance (VyOS) ด้วย PuTTY
อ่านข้อควรระวังและดูวิธีการเชื่อมต่อ EC2 Instance ด้วย PuTTY ตามลิงก์ของหัวข้อย่อยด้านล่างนี้
ในส่วนของ การตั้งค่า Data to send to the server ให้ป้อน Auto-login username เป็น " \color{red}\footnotesize\bold{ข้อควรระวัง:} " ( \color{green}\footnotesize\bold{✅\space vyos} ) \color{red}\footnotesize เนื่องจากไม่ใช่\space \text{\textquotedblleft}\bold{❌ubuntu}\text{\textquotedblright}\space หรือ\space \text{\textquotedblleft}\bold{❌ec2-user}\text{\textquotedblright} ดูตัวอย่างตามหัวข้อย่อยที่นี่: การ Connect to EC2 by PuTTY (ตัวอย่างนี้จะเป็นวิธีการของ Ubuntu)
หากเชื่อมต่อได้แล้วจะแสดงหน้าจอโดยมี Using username vyos
แบบนี้ ก็คือเราสามารถ Login เข้ามายัง vyos ได้แล้ว
Using username "vyos".
Authenticating with public key "tinnakorn-onp-vyos"
Welcome to VyOS!
┌── ┐
. VyOS 1.4.3
└ ──┘ sagitta
* Documentation: https://docs.vyos.io/en/sagitta
* Project news: https://blog.vyos.io
* Bug reports: https://vyos.dev
You can change this banner using "set system login banner post-login" command.
VyOS is a free software distribution that includes multiple components,
you can check individual component licenses under /usr/share/doc/*/copyright
vyos@ip-192-168-0-10:~$
การสร้าง Site-to-Site VPN connections ใน Main VPC
ในขั้นตอนนี้จะสร้างระบบ Site-to-Site VPN connections ดังนี้
- การสร้าง Virtual private gateways
- การสร้าง Customer Gateways
- การสร้าง Site-to-Site VPN connections
ก่อนอื่นให้แลือกรีเจี้ยน Thailand
แล้วเข้าไปที่ Service VPC โดยค้นหาและเลือก VPC
และสร้างระบบ Site-to-Site VPN connections ใน Main VPC ตามหัวข้อด้านล่างนี้
การสร้าง Virtual private gateways
เลือก Virtual private gateways
จากเมนูด้านซ้าย
คลิก Create virtual private gateway
เมื่อเข้ามาหน้าจอ Create virtual private gateway แล้ว ให้ป้อน Name tag เช่น tinnakorn-main-vgw
แล้วในส่วนของช่อง Tags ด้านล่างจะถูกป้อนโดยอัตโนมัติ
แล้วคลิก Create virtual private gateway
ด้านล่างสุด
เมื่อสร้าง Virtual private gateway แล้ว State จะแสดงเป็น Pending
และ VPC attachment state จะแสดงเป็น Detached
ซึ่งเราต้อง Attach Main VPC ที่สร้างก่อนหน้านี้ในนี้ โดยคลิกเข้าไปที่ Virtual private gateway ID
ของเรา
คลิก Actions
ที่ด้านขวาบน เลือก Attach to VPC
ตรงช่อง Available VPCs ให้เลือก VPC ที่สร้างไว้สำหรับใช้กับ AWS ของตัวอย่างนี้คือ tinnakorn-main-vpc
แล้วคลิก Attach to VPC
เมื่อ Attach แล้ว ให้ดูที่ State จะแสดงเป็น Available
โดยมี VPC ถูกเพิ่มขึ้นมาแบบนี้
และในส่วนของ VPC attachment state จะแสดงเป็น Attaching
ไม่จำเป็นต้องรอให้ดำเนินการเสร็จ ให้ทำขั้นตอนถัดไปได้เลย
การสร้าง Customer Gateways
เลือก Customer gateways
จากเมนูด้านซ้าย
คลิก Create customer gateway
เมื่อเข้ามาที่หน้าจอ Create customer gateway แล้ว ให้ป้อน Name tag เช่น tinnakorn-main-cgw
แล้วในส่วนของช่อง Tags ด้านล่างจะถูกป้อนโดยอัตโนมัติ
จากนั้นเปิดแท็บเว็บไซต์ใหม่โดยเข้าไปที่หน้าจอ EC2 Instance (VyOS) สำหรับ On-premises ที่สร้างไว้ก่อนหน้านี้ แล้วคัดลอก ❐
Public IPv4 address เตรียมไว้
แล้วกลับมาหน้าจอ Create customer gateway อีกครั้ง แล้วป้อน Public IPv4 address ลงในช่อง IP address แล้วคลิก Create customer gateway
ที่ด้านล่างสุด
แล้วจะแสดงหน้าจอแบบนี้ โดย State แสดงเป็น Available
และมี IP address แสดงตามที่เราป้อน
การสร้าง Site-to-Site VPN connections
เลือก Site-to-Site VPN connections
จากเมนูด้านซ้าย
คลิก Create VPN connection
เมื่อเข้ามาหน้าจอ Create VPN connection แล้ว ให้ป้อน Name tag เช่น tinnakorn-main-vpn
แล้วในส่วนของช่อง Tags ด้านล่างจะถูกป้อนโดยอัตโนมัติ
แล้วเลือก Virtual private gateway และ Customer gateway ID ที่สร้างจากขั้นตอนที่แล้ว
ส่วน Routing options: Dynamic (requires BGP)
จะใช้เป็นค่าเริ่มต้นตามนี้
แล้วคลิก Create VPN connection
ด้านล่างสุด
แล้วจะแสดงหน้าจอแบบนี้ โดย State จะแสดง Pending
แล้วคลิกเข้าไปที่ VPN ID
ของเรา
ก็จะแสดงหน้าจอแบบนี้
การตั้งค่า VyOS
เราจะนำการตั้งค่า Site-to-Site VPN ที่สร้างไว้บน AWS Console ไปใช้กับ VyOS ฝั่ง On-Premises
ใน VyOS เวอร์ชัน 1.4 จำเป็นต้องแก้ไขคำสั่งค่อนข้างเยอะ จึงแนะนำให้นำข้อมูลบางส่วนจากไฟล์ configuration ที่ดาวน์โหลดมาจาก VPN connections บน AWS มาปรับใช้กับคำสั่งที่จะแนะนำให้ในหัวข้อ แก้ไขคำสั่งสำหรับใช้งานกับ VyOS 1.4 ดังนั้นโปรดระมัดระวังในการแก้ไขคำสั่ง
การดาวน์โหลดไฟล์การตั้งค่าฝั่ง VyOS
คลิก Download configuration
ในหน้าจอ VPN connections บน AWS Console
แล้วจะแสดง POPUP แบบนี้ ให้เลือก Vendor เป็น Vyatta
แล้วระบบจะเลือก [Platform
, Software
, IKE version
] ให้อัตโนมัติ แล้วคลิก Download
ได้เลย
เมื่อดาวน์โหลดไฟล์เสร็จแล้ว จะได้ไฟล์ vpn-xxxxxxxxxxxxxxxxx.txt
อยู่ในอุปกรณ์ของเรา
เกี่ยวกับ Tunnel state
ทั้งนี้เนื่องจากในขณะนี้ยังไม่ได้ตั้งค่าฝั่ง VyOS จึงเป็นเรื่องปกติที่ Link จะอยู่ในสถานะ Down ซึ่งสามารถตรวจสอบได้ที่แท็บ Tunnel details ในหน้าจอ VPN connections ของเรา
แก้ไขคำสั่งสำหรับใช้งานกับ VyOS 1.4
หลังจากที่ดาวน์โหลดไฟล์การตั้งค่า (เช่น vpn-xxxxxxxxxxxxxxxxx.txt) จาก VPN connections บน AWS Console (ไฟล์ VPN) มาแล้ว ให้เปิดไฟล์ด้วยโปรแกรมแก้ไขข้อความ เช่น Notepad
ภายในไฟล์จะมีการตั้งค่าของ IPSec Tunnel ทั้ง 2 ชุด (IPSec Tunnel #1 และ IPSec Tunnel #2) โดยแต่ละชุดจะประกอบด้วย 4 ส่วนหลัก ได้แก่:
- #1: Internet Key Exchange (IKE) Configuration (การตั้งค่า IKE)
- #2: IPSec Configuration (การตั้งค่า IPSec)
- #3: Tunnel Interface Configuration (การตั้งค่า Virtual Tunnel Interface (vti) สำหรับฝั่ง Customer Gateway)
- #4: Border Gateway Protocol (BGP) Configuration (การตั้งค่า BGP)
เตรียมข้อมูลที่ใช้ตั้งค่าในไฟล์ VPN สำหรับตั้งค่า Vyos
ข้อมูลที่ใช้ตั้งค่าในไฟล์ VPN สำหรับตั้งค่า Vyos ด้านล่างนี้เป็นของบทความนี้เท่านั้น
ข้อมูลที่ใช้ | รายละเอียดข้อมูลที่ใช้ | แหล่งที่ตรวจสอบ |
---|---|---|
Outside IP address ของ Tunnel 1 | 43.209.60.174 | หน้าจอ VPN connections |
Outside IP address ของ Tunnel 2 | 43.209.62.85 | หน้าจอ VPN connections |
Private IPv4 addresses ของ Vyos | 192.168.0.10 | หน้าจอ EC2 Instance (Vyos) |
Public Subnet IPv4 CIDR | 192.168.0.0/24 | หน้าจอ Subnets ในบริการ VPC ของ On-premises |
※ใน Tunnel 1 และ Tunnel 2 จะมีคำสั่งที่ซ้ำกัน ให้แก้ไขและรันคำสั่งไปทั้งหมดนี้เลย
IPSec Tunnel #1
คัดลอกคำสั่งของ "IPSec Tunnel #1" และนำข้อมูลจากไฟล์ VPN มาป้อนใน []
ตามที่เขียนแนะนำไว้
#1: Internet Key Exchange (IKE) Configuration
set vpn ipsec ike-group AWS lifetime '28800'
set vpn ipsec ike-group AWS proposal 1 dh-group '2'
set vpn ipsec ike-group AWS proposal 1 encryption 'aes128'
set vpn ipsec ike-group AWS proposal 1 hash 'sha1'
set vpn ipsec authentication psk tunnel1 id '[Outside IP address ของ Tunnel 1]'
set vpn ipsec authentication psk tunnel1 secret '[ตรวจสอบ pre-shared-secret ที่บรรทัด 41]'
set vpn ipsec site-to-site peer tunnel1 authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer tunnel1 authentication remote-id '[Outside IP address ของ Tunnel 1]'
set vpn ipsec site-to-site peer tunnel1 description 'VPC tunnel 1'
set vpn ipsec site-to-site peer tunnel1 ike-group 'AWS'
set vpn ipsec site-to-site peer tunnel1 local-address '[Private IPv4 ของ Vyos]'
set vpn ipsec site-to-site peer tunnel1 remote-address '[Outside IP address ของ Tunnel 1]'
set vpn ipsec site-to-site peer tunnel1 vti bind 'vti0'
set vpn ipsec site-to-site peer tunnel1 vti esp-group 'AWS'
#2: IPSec Configuration
set vpn ipsec interface eth0
set vpn ipsec option disable-route-autoinstall
set vpn ipsec esp-group AWS lifetime '3600'
set vpn ipsec esp-group AWS mode 'tunnel'
set vpn ipsec esp-group AWS pfs 'enable'
set vpn ipsec esp-group AWS proposal 1 encryption 'aes128'
set vpn ipsec esp-group AWS proposal 1 hash 'sha1'
set vpn ipsec ike-group AWS dead-peer-detection action 'restart'
set vpn ipsec ike-group AWS dead-peer-detection interval '15'
set vpn ipsec ike-group AWS dead-peer-detection timeout '30'
set vpn ipsec ike-group AWS key-exchange 'ikev2'
#3: Tunnel Interface Configuration
set interfaces vti vti0 address '[ตรวจสอบ IP ที่บรรทัด 78]'
set interfaces vti vti0 description 'VPC tunnel 1'
set interfaces vti vti0 mtu '1436'
#4: Border Gateway Protocol (BGP) Configuration
set protocols bgp system-as 65000
set protocols bgp neighbor [ตรวจสอบ IP ที่บรรทัด 100] remote-as '64512'
set protocols bgp neighbor [ตรวจสอบ IP ที่บรรทัด 101] address-family ipv4-unicast soft-reconfiguration 'inbound'
set protocols bgp neighbor [ตรวจสอบ IP ที่บรรทัด 102] timers holdtime '30'
set protocols bgp neighbor [ตรวจสอบ IP ที่บรรทัด 103] timers keepalive '10'
set protocols bgp address-family ipv4-unicast network [Public Subnet IPv4 CIDR ของ On-Premise]
IPSec Tunnel #2
คัดลอกคำสั่งของ "IPSec Tunnel #2" และนำข้อมูลจากไฟล์ VPN มาป้อนใน []
ตามที่เขียนแนะนำไว้
#1: Internet Key Exchange (IKE) Configuration
set vpn ipsec authentication psk tunnel2 id '[Outside IP address ของ Tunnel 2]'
set vpn ipsec authentication psk tunnel2 secret '[ตรวจสอบ pre-shared-secret ที่บรรทัด 135]'
set vpn ipsec ike-group AWS lifetime '28800'
set vpn ipsec ike-group AWS proposal 1 dh-group '2'
set vpn ipsec ike-group AWS proposal 1 encryption 'aes128'
set vpn ipsec ike-group AWS proposal 1 hash 'sha1'
set vpn ipsec site-to-site peer tunnel2 authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer tunnel2 authentication remote-id '[Outside IP address ของ Tunnel 2]'
set vpn ipsec site-to-site peer tunnel2 description 'VPC tunnel 2'
set vpn ipsec site-to-site peer tunnel2 ike-group 'AWS'
set vpn ipsec site-to-site peer tunnel2 local-address '[Private IPv4 ของ Vyos]'
set vpn ipsec site-to-site peer tunnel2 remote-address '[Outside IP address ของ Tunnel 2]'
set vpn ipsec site-to-site peer tunnel2 vti bind 'vti1'
set vpn ipsec site-to-site peer tunnel2 vti esp-group 'AWS'
#2: IPSec Configuration
set vpn ipsec interface eth0
set vpn ipsec option disable-route-autoinstall
set vpn ipsec esp-group AWS lifetime '3600'
set vpn ipsec esp-group AWS mode 'tunnel'
set vpn ipsec esp-group AWS pfs 'enable'
set vpn ipsec esp-group AWS proposal 1 encryption 'aes128'
set vpn ipsec esp-group AWS proposal 1 hash 'sha1'
set vpn ipsec ike-group AWS dead-peer-detection action 'restart'
set vpn ipsec ike-group AWS dead-peer-detection interval '15'
set vpn ipsec ike-group AWS dead-peer-detection timeout '30'
#3: Tunnel Interface Configuration
set interfaces vti vti1 address '[ตรวจสอบ IP ที่บรรทัด 172]'
set interfaces vti vti1 description 'VPC tunnel 2'
set interfaces vti vti1 mtu '1436'
#4: Border Gateway Protocol (BGP) Configuration
set protocols bgp system-as 65000
set protocols bgp neighbor [ตรวจสอบ IP ที่บรรทัด 194] remote-as '64512'
set protocols bgp neighbor [ตรวจสอบ IP ที่บรรทัด 195] address-family ipv4-unicast soft-reconfiguration 'inbound'
set protocols bgp neighbor [ตรวจสอบ IP ที่บรรทัด 196] timers holdtime '30'
set protocols bgp neighbor [ตรวจสอบ IP ที่บรรทัด 197] timers keepalive '10'
set protocols bgp address-family ipv4-unicast network [Public Subnet IPv4 CIDR ของ On-Premise]
เมื่อแก้ไขคำสั่งเสร็จแล้ว ให้ลบ Comment [#1 - #4] ทั้ง 2 Tunnel ออกเพื่อจะรันคำสั่งในครั้งเดียว ก็จะได้คำสั่งรูปเบบเช่นเดียวกับหัวข้อ ตัวอย่างคำสั่งที่แก้ไขแล้ว ด้านล่างนี้
ตัวอย่างคำสั่งที่แก้ไขแล้ว
ตัวอย่างคำสั่งที่แก้ไขแล้วนี้ จะใช้ข้อมูลที่ได้สร้างขึ้นในบทความนี้ทั้งหมด โดยลบ Comment [#1 - #4] ทั้ง 2 Tunnel และพร้อมที่จะนำไปใช้งานจริงแล้ว
คลิกดูตัวอย่างคำสั่งของบทความครั้งนี้
set vpn ipsec ike-group AWS lifetime '28800'
set vpn ipsec ike-group AWS proposal 1 dh-group '2'
set vpn ipsec ike-group AWS proposal 1 encryption 'aes128'
set vpn ipsec ike-group AWS proposal 1 hash 'sha1'
set vpn ipsec authentication psk tunnel1 id '43.209.60.174'
set vpn ipsec authentication psk tunnel1 secret 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
set vpn ipsec site-to-site peer tunnel1 authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer tunnel1 authentication remote-id '43.209.60.174'
set vpn ipsec site-to-site peer tunnel1 description 'VPC tunnel 1'
set vpn ipsec site-to-site peer tunnel1 ike-group 'AWS'
set vpn ipsec site-to-site peer tunnel1 local-address '192.168.0.10'
set vpn ipsec site-to-site peer tunnel1 remote-address '43.209.60.174'
set vpn ipsec site-to-site peer tunnel1 vti bind 'vti0'
set vpn ipsec site-to-site peer tunnel1 vti esp-group 'AWS'
set vpn ipsec interface eth0
set vpn ipsec option disable-route-autoinstall
set vpn ipsec esp-group AWS lifetime '3600'
set vpn ipsec esp-group AWS mode 'tunnel'
set vpn ipsec esp-group AWS pfs 'enable'
set vpn ipsec esp-group AWS proposal 1 encryption 'aes128'
set vpn ipsec esp-group AWS proposal 1 hash 'sha1'
set vpn ipsec ike-group AWS dead-peer-detection action 'restart'
set vpn ipsec ike-group AWS dead-peer-detection interval '15'
set vpn ipsec ike-group AWS dead-peer-detection timeout '30'
set vpn ipsec ike-group AWS key-exchange 'ikev2'
set interfaces vti vti0 address '169.254.243.182/30'
set interfaces vti vti0 description 'VPC tunnel 1'
set interfaces vti vti0 mtu '1436'
set protocols bgp system-as 65000
set protocols bgp neighbor 169.254.243.181 remote-as '64512'
set protocols bgp neighbor 169.254.243.181 address-family ipv4-unicast soft-reconfiguration 'inbound'
set protocols bgp neighbor 169.254.243.181 timers holdtime '30'
set protocols bgp neighbor 169.254.243.181 timers keepalive '10'
set protocols bgp address-family ipv4-unicast network 192.168.0.0/24
set vpn ipsec authentication psk tunnel2 id '43.209.62.85'
set vpn ipsec authentication psk tunnel2 secret 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
set vpn ipsec ike-group AWS lifetime '28800'
set vpn ipsec ike-group AWS proposal 1 dh-group '2'
set vpn ipsec ike-group AWS proposal 1 encryption 'aes128'
set vpn ipsec ike-group AWS proposal 1 hash 'sha1'
set vpn ipsec site-to-site peer tunnel2 authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer tunnel2 authentication remote-id '43.209.62.85'
set vpn ipsec site-to-site peer tunnel2 description 'VPC tunnel 2'
set vpn ipsec site-to-site peer tunnel2 ike-group 'AWS'
set vpn ipsec site-to-site peer tunnel2 local-address '192.168.0.10'
set vpn ipsec site-to-site peer tunnel2 remote-address '43.209.62.85'
set vpn ipsec site-to-site peer tunnel2 vti bind 'vti1'
set vpn ipsec site-to-site peer tunnel2 vti esp-group 'AWS'
set vpn ipsec interface eth0
set vpn ipsec option disable-route-autoinstall
set vpn ipsec esp-group AWS lifetime '3600'
set vpn ipsec esp-group AWS mode 'tunnel'
set vpn ipsec esp-group AWS pfs 'enable'
set vpn ipsec esp-group AWS proposal 1 encryption 'aes128'
set vpn ipsec esp-group AWS proposal 1 hash 'sha1'
set vpn ipsec ike-group AWS dead-peer-detection action 'restart'
set vpn ipsec ike-group AWS dead-peer-detection interval '15'
set vpn ipsec ike-group AWS dead-peer-detection timeout '30'
set interfaces vti vti1 address '169.254.125.226/30'
set interfaces vti vti1 description 'VPC tunnel 2'
set interfaces vti vti1 mtu '1436'
set protocols bgp system-as 65000
set protocols bgp neighbor 169.254.125.225 remote-as '64512'
set protocols bgp neighbor 169.254.125.225 address-family ipv4-unicast soft-reconfiguration 'inbound'
set protocols bgp neighbor 169.254.125.225 timers holdtime '30'
set protocols bgp neighbor 169.254.125.225 timers keepalive '10'
set protocols bgp address-family ipv4-unicast network 192.168.0.0/24
รันคำสั่งที่แก้ไขแล้ว
กลับมาที่หน้าจอ PuTTY ที่ Login เตรียมไว้ตอนแรก แล้วรันคำสั่งตามนี้
※โปรดดู $
และ #
ก่อนรันคำสั่ง เนื่องจากเป็นโหมดที่ต่างกัน
・$
= นอก config
・#
= ใน config
คำสั่งเข้าไปยังระบบ config ($
)
conf
จากนั้นรันคำสั่งบันทึกการตั้งค่า (#
)
commit
save
แล้วออกจากโหมดการตั้งค่า (#
)
exit
ทำการโหลด bgp ของ Router ใหม่ด้วยคำสั่งด้านล่างนี้
reset ip bgp all
ตรวจสอบ bgp ที่ได้รับการปรับใช้แล้วตามคำสั่งด้านล่างนี้ (อาจต้องใช้เวลาในการรีเซต router bgp สักครู่ หากการแสดงผลยังไม่แสดง "B>
" ให้รออีกสักครู่ แล้วรันคำสั่งนี้ใหม่อีกครั้ง)
show ip route
Output (example): แล้วตรวจสอบข้อมูล Main VPC ในส่วนแสดงผลที่ระบุว่า "B>"
vyos@ip-192-168-0-10:~$ show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP,
O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR,
f - OpenFabric,
> - selected route, * - FIB route, q - queued, r - rejected, b - backup
t - trapped, o - offload failure
S>* 0.0.0.0/0 [210/0] via 192.168.0.1, eth0, weight 1, 01:29:07
B>* 10.0.0.0/16 [20/100] via 169.254.243.181, vti0, weight 1, 00:09:52
C>* 169.254.125.224/30 is directly connected, vti1, 00:12:43
C>* 169.254.243.180/30 is directly connected, vti0, 00:12:42
C>* 192.168.0.0/24 is directly connected, eth0, 01:29:07
vyos@ip-192-168-0-10:~$
ตรวจสอบรายละเอียดข้อมูล bgp ตามคำสั่งด้านล่างนี้
show ip bgp
Output (example): แล้วจะแสดงข้อมูลแบบนี้
vyos@ip-192-168-0-10:~$ show ip bgp
BGP table version is 6, local router ID is 192.168.0.10, vrf id 0
Default local pref 100, local AS 65000
Status codes: s suppressed, d damped, h history, * valid, > best, = multipath,
i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
* 10.0.0.0/16 169.254.243.181 100 0 64512 i
* 169.254.125.225 200 0 64512 i
*> 192.168.0.0/24 0.0.0.0 0 32768 i
Displayed 2 routes and 3 total paths
vyos@ip-192-168-0-10:~$
ต่อไปรันคำสั่งตรวจสอบสถานะของการเชื่อมต่อ VPN แบบ IPSec ที่กำหนดไว้ในระบบ
show vpn ipsec connections
Output (example): ผลลัพธ์นี้ใช้สำหรับตรวจสอบสถานะของ IPSec VPN ที่กำหนดไว้ในระบบ โดยหากการเชื่อมต่อทำงานปกติจะเห็นสถานะของ tunnel เป็น up
ทั้งฝั่ง IKEv2 และ IPSec นอกจากนี้ยังสามารถตรวจสอบประเภทของการเข้ารหัสได้จากคอลัมน์ Proposal
vyos@ip-192-168-0-10:~$ show vpn ipsec connections
Connection State Type Remote address Local TS Remote TS Local id Remote id Proposal
------------ ------- ------ ---------------- ---------- ----------- ---------- ------------- ----------------------------------
tunnel1 up IKEv2 43.209.60.174 - - 43.209.60.174 AES_CBC/128/HMAC_SHA1_96/MODP_1024
tunnel1-vti up IPsec 43.209.60.174 0.0.0.0/0 0.0.0.0/0 43.209.60.174 AES_CBC/128/HMAC_SHA1_96/None
::/0 ::/0
tunnel2 up IKEv2 43.209.62.85 - - 43.209.62.85 AES_CBC/128/HMAC_SHA1_96/MODP_1024
tunnel2-vti up IPsec 43.209.62.85 0.0.0.0/0 0.0.0.0/0 43.209.62.85 AES_CBC/128/HMAC_SHA1_96/None
::/0 ::/0
vyos@ip-192-168-0-10:~$
แล้วเข้าไปที่ "VPC > Site-to-Site VPN connections > Tunnel details" ถ้า Tunnel state เป็น Status=Up
เหมือนกับที่ตรวจสอบจากขั้นตอนที่แล้ว ก็ถือว่าสามารถเชื่อมต่อได้ปกติ
การตั้งค่า Route table
เลือก Route tables
จากเมนูด้านซ้าย
Route table ฝั่ง Main VPC Public subnet
ติ๊ก ✅
Route table name ตัวที่เป็น Main VPC Public subnet
แล้วเลือกแท็บ Route Propagation
และคลิก Edit route propagation
แล้วติ๊ก ✅
Enable ตรงคอลัมน์ Propagation แล้วคลิก Save
เลื่อนลงมาด้านล่างจะเห็นว่า 192.168.0.0/24
ถูกเพิ่มขึ้นมาแล้ว โดยมี Status=Active
Route table ฝั่ง On-premises VPC Public subnet
ต่อไปเลือก Route tables
จากเมนูด้านซ้ายอีกครั้ง แล้วติ๊ก ✅
Route table name ตัวที่เป็น On-premises แล้วเลือกแท็บ Routes
แล้วคลิก Edit routes
คลิก Add route
แล้วป้อน Destination=10.0.0.0/16
และให้คลิกที่ช่อง Target แล้วเลือก Instance
จะเห็นว่ามี EC2 Instance (VyOS) แสดงขึ้นมา ให้เลือกได้เลย แล้วคลิก Save changes
(10.0.0.0/16 เป็นข้อมูล Network (CIDR) ของ Main VPC ซึ่งเราจะทำการเพิ่มเข้าไปใน Route Table เพื่อใช้สำหรับการเชื่อมต่อระหว่าง Main VPC กับ On-premises)
เลื่อนลงมาด้านล่างจะเห็นว่า 10.0.0.0/16
ถูกเพิ่มขึ้นมาแล้ว โดยมี Status=Active
การตั้งค่าให้ VyOS ทำหน้าที่เป็น Router
การตั้งค่านี้จะปิด Source/Destination Check เพื่อให้ Instance สามารถส่งต่อ Traffic ได้เหมือน Router
เข้าไปที่หน้าจอ EC2 Instance (VyOS) แล้วเลือก Actions
เลือก Networking
และเลือก Change source/destination check
ติ๊ก ✅
Stop ที่ Source / destination checking แล้วคลิก Save
การสร้าง IAM Role สำหรับ EC2 Instance ฝั่ง AWS
ก่อนอื่นให้สร้าง IAM Role เพื่อให้สิทธิ์ SSM กับ EC2 ทางฝั่ง AWS ก่อน
ดูตัวอย่างได้ที่ลิงก์และหัวข้อ ตัวอย่างการสร้าง Role สำหรับ EC2 Instance (AWS) ด้านล่างนี้
ตัวอย่างการสร้าง Role สำหรับ EC2 Instance (AWS)
เข้ามาที่ Service
Identity and Access Management (IAM)
เลือกRoles
จากเมนูด้านซ้าย คลิกCreate role
Step 1 - Select trusted entity:
Trusted entity type:AWS service
Use case: ◉EC2
คลิกNext
Step 2 - Add permissions:
Permissions policies
Policy name: ค้นหาและติ๊ก✅ AmazonSSMManagedInstanceCore
คลิกNext
Step 3 - Name, review, and create:
Role details
Role Name:ec2-ssm-managed-instance-core
(ชื่ออะไรก็ได้)
เลื่อนลงมาด้านล่างสุด คลิกCreate role
การสร้าง EC2 Instancre สำหรับทดสอบการเชื่อมต่อ
ดูตัวอย่างการสร้าง Amazon Linux 2023 ได้ที่ลิงก์บทความด้านล่างนี้ เนื่องจากลิงก์บทความด้านล่างนี้เป็นแค่ตัวอย่าง ซึ่งมีการตั้งค่าบางส่วนที่แตกต่างกัน แนะนำให้ดูตัวอย่างตั้งค่าการสร้าง Amazon Linux 2023 ใน EC2 สำหรับ AWS และ On-premises ตามหัวข้อด้านล่างนี้ประกอบด้วย
ตัวอย่างตั้งค่าการสร้าง Amazon Linux 2023 ใน EC2 สำหรับ AWS และ On-premises มีดังนี้ (การสร้าง EC2 Instance ครั้งนี้จะสร้างในรี้เจี้ยน Thailand ทั้งหมด)
- การสร้าง EC2 Instance สำหรับ AWS
- การสร้าง EC2 Instance สำหรับ On-premises
การสร้าง EC2 Instance สำหรับ AWS
Region:
Thailand
(ต้องสร้าง EC2 Instance ใน Region เดียวกับ VPC)EC2 Instance
Name and tags
Name:tinnakorn-main-test
(ตั้งชื่อตามต้องการโดยให้สอดคล้องกับฝั่ง AWS)Application and OS Images (Amazon Machine Image)
Amazon Machine Image (AMI):Amazon Linux 2023 AMI
Instance type
Instance type:t3.nano
(เลือกสเปคตามต้องการ ครั้งนี้จะเลือกต่ำสุดเนื่องจากใช้แค่ทดสอบ)Key pair (login)
Key pair name - required:Proceed without a key pair (Not recommended)
(ครั้งนี้จะไม่ใช้ Key pair)Network settings
VPC - required:tinnakorn-main-vpc
(เลือก VPC สำหรับ AWS ที่สร้างก่อนหน้านี้)
Subnet: เมื่อเลือก VPC แล้ว Subnet จะถูกเลือกโดยอัตโนมัติ
Auto-assign public IP:Enable
Firewall (security groups)
Create security group
Security group name - required:tinnakorn-main-test
(ตั้งชื่อที่ต้องการ)
Description - required":tinnakorn-main-test
(ป้อนตามต้องการ)
คลิกRemove
(ครั้งนี้จะไม่ตั้งค่า Security group rule)Configure storage
1x8
GiBgp3
Root volume, 3000 IOPS, Not encrypted (Default)คลิก
Advanced details
เพื่อขยายหน้าจอ
IAM instance profile:ec2-ssm-managed-instance-core
(เลือก Role ที่สร้างไว้ก่อนหน้านี้)
การสร้าง EC2 Instance สำหรับ On-premises
Region:
Thailand
(ต้องสร้าง EC2 Instance ใน Region เดียวกับ VPC)EC2 Instance
Name and tags
Name:tinnakorn-onp-test
(ตั้งชื่อตามต้องการโดยให้สอดคล้องกับฝั่ง On-premises)Application and OS Images (Amazon Machine Image)
Amazon Machine Image (AMI):Amazon Linux 2023 AMI
Instance type
Instance type:t3.nano
(เลือกสเปคตามต้องการ ครั้งนี้จะเลือกต่ำสุดเนื่องจากใช้แค่ทดสอบ)Key pair (login)
Key pair name - required:Proceed without a key pair (Not recommended)
(ครั้งนี้จะไม่ใช้ Key pair)Network settings
VPC - required:tinnakorn-onp-vpc
(เลือก VPC สำหรับ On-premises ที่สร้างก่อนหน้านี้)
Subnet: เมื่อเลือก VPC แล้ว Subnet จะถูกเลือกโดยอัตโนมัติ
Auto-assign public IP:Disable
(Instance ของ On-premises นี้จะปิด Public subnet)
Firewall (security groups)
Create security group
Security group name - required:tinnakorn-onp-test
(ตั้งชื่อที่ต้องการ)
Description - required":tinnakorn-onp-test
(ป้อนตามต้องการ)
Inbound Security Group Rules
▼ Security group rule 1 (All, All, 10.0.0.0/16)
Type:All Traffic
| Source type:Custom
| Source:10.0.0.0/16
▼ Advanced network configuration
Primary IP:192.168.0.100
Configure storage
1x8
GiBgp3
Root volume, 3000 IOPS, Not encrypted (Default)
ทดสอบการเชื่อมต่อ
ตรวจสอบว่า EC2 Instance (AWS) ใน Main VPC สามารถ ping ไปถึง 192.168.0.100
ที่เป็น EC2 Instance (On-premises) ได้หรือไม่
หลังจากที่ EC2 Instance ฝั่ง AWS และ On-premises เริ่มต้นระบบเสร็จแล้ว ให้เข้าไปที่หน้าจอ EC2 Instance ของ AWS แล้วคลิก Connect
แล้วคลิก Connect
ในแท็บ Session Manager
หากเชื่อมต่อสำเร็จจะแสดงหน้าจอแบบนี้
จากนั้นรันคำสั่ง ping ตามนี้
ping 192.168.0.100
Output (example): ถ้า ping มีการดำเนินการไปเรื่อยๆแบบนี้ก็ถือว่าการเชื่อมต่อสำเร็จ
sh-5.2$ ping 192.168.0.100
PING 192.168.0.100 (192.168.0.100) 56(84) bytes of data.
64 bytes from 192.168.0.100: icmp_seq=1 ttl=126 time=1.49 ms
64 bytes from 192.168.0.100: icmp_seq=2 ttl=126 time=1.16 ms
64 bytes from 192.168.0.100: icmp_seq=3 ttl=126 time=1.12 ms
64 bytes from 192.168.0.100: icmp_seq=4 ttl=126 time=1.19 ms
64 bytes from 192.168.0.100: icmp_seq=5 ttl=126 time=1.12 ms
64 bytes from 192.168.0.100: icmp_seq=6 ttl=126 time=1.14 ms
64 bytes from 192.168.0.100: icmp_seq=7 ttl=126 time=1.16 ms
64 bytes from 192.168.0.100: icmp_seq=8 ttl=126 time=1.15 ms
64 bytes from 192.168.0.100: icmp_seq=9 ttl=126 time=1.13 ms
64 bytes from 192.168.0.100: icmp_seq=10 ttl=126 time=1.20 ms
...
ภาพรวมการทำงานของ AWS Site-to-Site VPN บน VPC ระหว่าง AWS และ On-premises
- เริ่มต้นจากการ ping ไปยัง
192.168.0.100
จาก EC2 Instance ชื่อtinnakorn-main-test
ที่อยู่ในฝั่ง AWS - เนื่องจาก IP ปลายทาง
192.168.0.100
ไม่อยู่ใน CIDR block ของ Main VPC (10.0.0.0/16
)
ระบบจึงส่ง traffic ไปยัง VPN Gateway ตามเส้นทางที่กำหนดไว้ใน Route Table สำหรับ192.168.0.0/24
- VPN Gateway จะเชื่อมต่อกับ Customer Gateway ผ่าน Site-to-Site VPN
- Customer Gateway ถูกผูกไว้กับ EC2 Instance
tinnakorn-onp-vyos
ซึ่งทำหน้าที่เป็น VPN Router
โดย VyOS จะทำการ routing traffic ไปยัง Network ของฝั่ง On-Premises (192.168.0.0/24
) - สุดท้าย traffic จะถูกส่งไปยัง EC2 Instance
192.168.0.100
ที่อยู่ในฝั่ง On-Premises ได้สำเร็จ
การลบ AWS Resource ที่สร้างขึ้นในบทความนี้
ผมได้เขียนบทความแยกไว้แล้ว โปรดดูวิธีการลบ AWS Resource ที่สร้างขึ้นในบทความนี้ได้ที่ลิงก์ด้านล่างนี้
สรุป
บทความนี้แสดงตัวอย่างการตั้งค่า AWS Site-to-Site VPN เพื่อเชื่อมต่อ VPC กับเครือข่าย On-Premises โดยใช้ VyOS บน EC2 ซึ่งช่วยให้สามารถจำลองการเชื่อมต่อแบบ Hybrid Cloud ได้อย่างปลอดภัยและมีประสิทธิภาพ
สรุปสิ่งที่จะได้จากบทความนี้:
- เรียนรู้การตั้งค่า VPN Gateway และ Customer Gateway บน AWS
- เข้าใจการใช้ VyOS เป็น VPN Router ฝั่ง On-Premises
- ตั้งค่า Routing และ BGP เพื่อให้เครือข่ายทั้งสองฝั่งเชื่อมต่อกันได้
- ทดสอบการเชื่อมต่อด้วยการ ping ข้าม VPC
ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ
POP (Tinnakorn Maneewong) จากบริษัท Classmethod (Thailand) ครับ !
บทความที่เกี่ยวข้อง
- การสร้าง VPC Beginner และเชื่อมต่อกับ EC2 Instance
- วิธีเชื่อมโยง Elastic IP (EIP) ไปยัง EC2 Instance
- วิธีการเปิดใช้งาน EC2 บน AWS Thailand Region (Amazon Linux 2023, PuTTY)
- [Update] การใช้งาน SSM Role เชื่อมต่อเข้า AWS EC2 Instance โดยไม่ต้องมี Inbound rules
- การ Terminate Instance, ลบ Key Pair และลบ Security Group ใน EC2
- วิธีการใช้งาน AWS Client VPN