การตั้งค่า AWS Site-to-Site VPN บน VPC ใน Thailand Region

การตั้งค่า AWS Site-to-Site VPN บน VPC ใน Thailand Region

แนะนำการตั้งค่า AWS Site-to-Site VPN บน VPC ใน Thailand Region เพื่อให้ Environment ฝั่ง AWS และ On-premises สามารถเชื่อมต่อกันได้

ครั้งนี้จะมาแนะนำเกี่ยวกับการตั้งค่า 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 เพื่อให้ทราฟฟิกวิ่งผ่านการเชื่อมต่อนั้น

ดูรายละเอียดเพิ่มเติมได้ที่ลิงก์ด้านล่างนี้
https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html

เป้าหมาย

เนื่องจากเราไม่สามารถสร้าง 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
site_to_site_vpn-th_final

การสร้าง VPC

ดูตัวอย่างการสร้าง VPC ได้ที่ลิงก์บทความด้านล่างนี้ (ลิงก์บทความนี้เป็นแค่ตัวอย่าง ซึ่งมีการตั้งค่าบางส่วนที่แตกต่างกัน แนะนำให้ดูตัวอย่างการสร้าง VPC สำหรับ AWS และ On-premises ตามหัวข้อด้านล่างนี้ประกอบด้วย)

ตัวอย่างตั้งค่าการสร้าง VPC สำหรับ AWS และ On-premises (การสร้าง VPC ครั้งนี้จะสร้างในรี้เจี้ยน Singapore ทั้งหมด)

  • สร้าง VPC สำหรับ AWS
  • สร้าง VPC สำหรับ On-premises

https://dev.classmethod.jp/articles/creating-vpc-for-beginner/

การสร้าง 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
search_ec2-202507

แล้วเริ่มทำการสร้าง Key Pairs และ EC2 Instance (VyOS) ตามด้านล่างนี้

การสร้าง Key Pairs

เลือก Key Pairs จากเมนูด้านซ้าย
menu_key_pair-202507

คลิก Create key pair
button_key_pair-202507

ใส่ชื่อที่ต้องการในช่อง Name เช่น tinnakorn-onp-vyos แล้วเลือก .ppk และคลิก Create key pair
keypair_vyos_1_4_2

หลังจากสร้าง Key Pair เสร็จแล้ว ไฟล์ .ppk จะถูกดาวน์โหลดลงที่คอมพิวเตอร์ของเราและชื่อไฟล์จะเปลี่ยนไปตามที่เราได้ตั้งชื่อไว้โดยอัตโนมัติ

การสร้าง EC2 Instance (VyOS)

เลือก Instance จากเมนูด้านซ้าย
menu_instance-202507

คลิก Launch instances
button_ec2-202507

มาที่หัวข้อ Name and tags
แล้วใส่ชื่อที่ต้องการในช่อง Name เช่น tinnakorn-onp-vyos
ec2_vyos_1_4_2-1

ถัดมาหัวข้อ Application and OS Images (Amazon Machine Image) คือ Instance จะมีเซิร์ฟเวอร์ให้เลือกใช้มากมาย เช่น macOS, Red Hat, SUSE Linux, Ubuntu, Microsoft Windows, Debian เป็นต้น ซึ่งในบทความนี้จะใช้ VyOS ในการติดตั้ง

ค้นหา VyOS + Enter แล้วรอสักครู่
ec2_vyos_1_4_2-2

เลือกแท็บ AWS Marketplace AMIs แล้วรอสักครู่ ก็จะเห็น VyOS แสดงขึ้นมา ให้คลิก Select ตัวเวอร์ชันปัจจุบัน (\color{red}\footnotesize ณ\spaceวันที่อัปเดตบทความ\space2025/07/22 คือ VyOS Universal Router for AWS (Standard Support) - Pay-as-You-Go)
ec2_vyos_1_4_2-3-v2

แล้วคลิก Subscribe now แล้วรอสักครู่
ec2_vyos_1_4_2-4-v2

เมื่อเลือก VyOS เสร็จแล้วจะแสดงหน้าจอแบบนี้
ec2_vyos_1_4_2-5-v2

ถัดมาหัวข้อ Instance type คือ เราสามารถเลือก Type CPU Memory ที่จะนำไปใช้งานได้ตามความต้องการ ไม่ว่าเว็บไซต์จะมีขนาดเล็กหรือขนาดใหญ่ ก็สามารถเลือกขนาดความจุของ CPU Memory ได้ตามความเหมาะสม

ค้นหาและเลือก t3.medium
ก็จะได้สเปค Family: t3 | 2 vCPU | 4 GiB Memory ตามนี้
ec2_vyos_1_4_2-6

ถัดมาหัวข้อ Key pair (login)
เลือก Key pair name - required ที่สร้างไว้เมื่อสักครู่นี้ เช่น tinnakorn-onp-vyos
ec2_vyos_1_4_2-7

ถัดมาหัวข้อ Network settings คลิก Edit
ec2_vyos_1_4_2-8

ในส่วนของ VPC ให้ตั้งค่าตามนี้
VPC - required: tinnakorn-onp-vpc
Subnet: เมื่อเลือก VPC แล้ว Subnet จะถูกเลือกโดยอัตโนมัติ
Auto-assign public IP: Enable
ec2_vyos_1_4_2-9

เลื่อนมาที่หัวข้อย่อย 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 ไม่ต้องไปตั้งค่าอะไร
ec2_vyos_1_4_2-10

ต่อไปคลิก Advanced network configuration แล้วป้อน "Primary IP: 192.168.0.10" (ถ้าไม่ได้เลือก VPC ที่เราสร้างขึ้นก่อนหน้านี้ จะไม่มีฟังก์ชันนี้แสดงขึ้นมา)
ec2_vyos_1_4_2-11

ถัดมาหัวข้อ Configure storage คือ เราสามารถเพิ่ม Storage ในส่วนของ Size (GiB) ได้ โดยค่าเริ่มต้นจะเป็น 4 GB ในตัวอย่างนี้จะใช้เป็นค่าเริ่มต้น ก็จะไม่ตั้งค่าใดๆ
ec2_vyos_1_4_2-12

มาที่หัวข้อ Summary ด้านขวา (หากใช้หน้าจอ Scale ใหญ่อาจแสดงด้านล่าง) แล้วคลิก Launch instance
ec2_vyos_1_4_2-13

เมื่อแสดงหน้าจอแบบนี้ ให้เลื่อนลงมาด้านล่างสุดแล้วคลิก View all instances
ec2_vyos_1_4_2-14

ค้นหาชื่อ Instance ของเรา แล้วสังเกตที่ Status Checks จะมีสถานะเป็น Initializing คือ Instance กำลังเริ่มต้นระบบ
ec2_vyos_1_4_2-15

เมื่อ Instance เริ่มต้นระบบเสร็จเรียบร้อยแล้ว จะมีสถานะเป็น ✅️ 3/3 checks passed
ec2_vyos_1_4_2-16

แล้วคลิก Instance ID ของเรา ก็จะแสดงหน้าจอแบบนี้ (ครั้งนี้จะเบลอ Public IPv4 เพื่อลดความสับสนตอนตั้งค่า AWS Site-to-Site VPN เนื่องจากจะใช้เป็น Elastic IP แทน IP แบบสุ่มนี้)
ec2_vyos_1_4_2-17

การเชื่อมโยง Elastic IP (EIP) ไปยัง EC2 Instance (VyOS)

เมื่อเชื่อมโยง EIP เสร็จแล้ว ตรวจสอบ Public IPv4 address ที่หน้าจอ Instance อีกครั้ง
Public IPv4 address ที่ได้รับครั้งนี้คือ 43.208.221.176
ec2_vyos_1_4_2-18

ดูวิธีเชื่อมโยง Elastic IP (EIP) ไปยัง EC2 Instance ได้ตามลิงก์บทความด้านล่างนี้
https://dev.classmethod.jp/articles/how-to-link-eip-to-ec2-instance/

การเชื่อมต่อ EC2 Instance (VyOS) ด้วย PuTTY

อ่านข้อควรระวังและดูวิธีการเชื่อมต่อ EC2 Instance ด้วย PuTTY ตามลิงก์ของหัวข้อย่อยด้านล่างนี้

\color{red}\footnotesize\bold{ข้อควรระวัง:} ในส่วนของ การตั้งค่า Data to send to the server ให้ป้อน Auto-login username เป็น "\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 ได้แล้ว

vyos@ip-192-168-0-10
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 ตามหัวข้อด้านล่างนี้
search_vpc-202507

การสร้าง Virtual private gateways

เลือก Virtual private gateways จากเมนูด้านซ้าย
menu_vpc_vgw-202507

คลิก Create virtual private gateway
button_create_vgw-202507

เมื่อเข้ามาหน้าจอ Create virtual private gateway แล้ว ให้ป้อน Name tag เช่น tinnakorn-main-vgw แล้วในส่วนของช่อง Tags ด้านล่างจะถูกป้อนโดยอัตโนมัติ
แล้วคลิก Create virtual private gateway ด้านล่างสุด
create_vgw-1

เมื่อสร้าง Virtual private gateway แล้ว State จะแสดงเป็น Pending และ VPC attachment state จะแสดงเป็น Detached
ซึ่งเราต้อง Attach Main VPC ที่สร้างก่อนหน้านี้ในนี้ โดยคลิกเข้าไปที่ Virtual private gateway ID ของเรา
create_vgw-2

คลิก Actions ที่ด้านขวาบน เลือก Attach to VPC
create_vgw-3

ตรงช่อง Available VPCs ให้เลือก VPC ที่สร้างไว้สำหรับใช้กับ AWS ของตัวอย่างนี้คือ tinnakorn-main-vpc แล้วคลิก Attach to VPC
create_vgw-4

เมื่อ Attach แล้ว ให้ดูที่ State จะแสดงเป็น Available โดยมี VPC ถูกเพิ่มขึ้นมาแบบนี้
และในส่วนของ VPC attachment state จะแสดงเป็น Attaching ไม่จำเป็นต้องรอให้ดำเนินการเสร็จ ให้ทำขั้นตอนถัดไปได้เลย
create_vgw-5

การสร้าง Customer Gateways

เลือก Customer gateways จากเมนูด้านซ้าย
menu_vpc_cgw-202507

คลิก Create customer gateway
button_create_cgw-202507

เมื่อเข้ามาที่หน้าจอ Create customer gateway แล้ว ให้ป้อน Name tag เช่น tinnakorn-main-cgw แล้วในส่วนของช่อง Tags ด้านล่างจะถูกป้อนโดยอัตโนมัติ
vpc_cgw_vyos-1

จากนั้นเปิดแท็บเว็บไซต์ใหม่โดยเข้าไปที่หน้าจอ EC2 Instance (VyOS) สำหรับ On-premises ที่สร้างไว้ก่อนหน้านี้ แล้วคัดลอก Public IPv4 address เตรียมไว้
vpc_cgw_vyos-2

แล้วกลับมาหน้าจอ Create customer gateway อีกครั้ง แล้วป้อน Public IPv4 address ลงในช่อง IP address แล้วคลิก Create customer gateway ที่ด้านล่างสุด
vpc_cgw_vyos-3

แล้วจะแสดงหน้าจอแบบนี้ โดย State แสดงเป็น Available และมี IP address แสดงตามที่เราป้อน
vpc_cgw_vyos-4

การสร้าง Site-to-Site VPN connections

เลือก Site-to-Site VPN connections จากเมนูด้านซ้าย
menu_vpn_connect-202507

คลิก Create VPN connection
button_vpn_connect-202507

เมื่อเข้ามาหน้าจอ Create VPN connection แล้ว ให้ป้อน Name tag เช่น tinnakorn-main-vpn แล้วในส่วนของช่อง Tags ด้านล่างจะถูกป้อนโดยอัตโนมัติ
แล้วเลือก Virtual private gateway และ Customer gateway ID ที่สร้างจากขั้นตอนที่แล้ว
ส่วน Routing options: Dynamic (requires BGP) จะใช้เป็นค่าเริ่มต้นตามนี้
แล้วคลิก Create VPN connection ด้านล่างสุด
vpc_vpn_connect_vyos-1

แล้วจะแสดงหน้าจอแบบนี้ โดย State จะแสดง Pending แล้วคลิกเข้าไปที่ VPN ID ของเรา
vpc_vpn_connect_vyos-2

ก็จะแสดงหน้าจอแบบนี้
vpc_vpn_connect_vyos-3

การตั้งค่า 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
vpc_vpn_connect_vyos-3

แล้วจะแสดง POPUP แบบนี้ ให้เลือก Vendor เป็น Vyatta แล้วระบบจะเลือก [Platform, Software, IKE version] ให้อัตโนมัติ แล้วคลิก Download ได้เลย
เมื่อดาวน์โหลดไฟล์เสร็จแล้ว จะได้ไฟล์ vpn-xxxxxxxxxxxxxxxxx.txt อยู่ในอุปกรณ์ของเรา
vpc_vpn_connect_vyos-4

เกี่ยวกับ Tunnel state

ทั้งนี้เนื่องจากในขณะนี้ยังไม่ได้ตั้งค่าฝั่ง VyOS จึงเป็นเรื่องปกติที่ Link จะอยู่ในสถานะ Down ซึ่งสามารถตรวจสอบได้ที่แท็บ Tunnel details ในหน้าจอ VPN connections ของเรา
vpc_vpn_connect_vyos-3-vyos-2

แก้ไขคำสั่งสำหรับใช้งานกับ 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)

\color{red}\footnotesize※เนื่องจากขั้นตอนนี้สำคัญมากๆ\space แนะนำให้ดูรายละเอียดของจุดที่ต้องนำข้อมูลมาใช้แก้ไขอย่างระมัดระวัง

เตรียมข้อมูลที่ใช้ตั้งค่าในไฟล์ 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
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
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 เหมือนกับที่ตรวจสอบจากขั้นตอนที่แล้ว ก็ถือว่าสามารถเชื่อมต่อได้ปกติ
set_vpn_connect_vyos-result

การตั้งค่า Route table

เลือก Route tables จากเมนูด้านซ้าย
menu_route_table-202507

Route table ฝั่ง Main VPC Public subnet

ติ๊ก Route table name ตัวที่เป็น Main VPC Public subnet
แล้วเลือกแท็บ Route Propagation และคลิก Edit route propagation
set_route_tables-1

แล้วติ๊ก Enable ตรงคอลัมน์ Propagation แล้วคลิก Save
set_route_tables-2

เลื่อนลงมาด้านล่างจะเห็นว่า 192.168.0.0/24 ถูกเพิ่มขึ้นมาแล้ว โดยมี Status=Active
set_route_tables-3

Route table ฝั่ง On-premises VPC Public subnet

ต่อไปเลือก Route tables จากเมนูด้านซ้ายอีกครั้ง แล้วติ๊ก Route table name ตัวที่เป็น On-premises แล้วเลือกแท็บ Routes แล้วคลิก Edit routes
set_route_tables_on-1

คลิก 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)
set_route_tables_on-2

เลื่อนลงมาด้านล่างจะเห็นว่า 10.0.0.0/16 ถูกเพิ่มขึ้นมาแล้ว โดยมี Status=Active
set_route_tables_on-3

การตั้งค่าให้ VyOS ทำหน้าที่เป็น Router

การตั้งค่านี้จะปิด Source/Destination Check เพื่อให้ Instance สามารถส่งต่อ Traffic ได้เหมือน Router

เข้าไปที่หน้าจอ EC2 Instance (VyOS) แล้วเลือก Actions เลือก Networking และเลือก Change source/destination check
set_vyos_to_router-1

ติ๊ก Stop ที่ Source / destination checking แล้วคลิก Save
set_vyos_to_router-2

การสร้าง IAM Role สำหรับ EC2 Instance ฝั่ง AWS

ก่อนอื่นให้สร้าง IAM Role เพื่อให้สิทธิ์ SSM กับ EC2 ทางฝั่ง AWS ก่อน
ดูตัวอย่างได้ที่ลิงก์และหัวข้อ ตัวอย่างการสร้าง Role สำหรับ EC2 Instance (AWS) ด้านล่างนี้
https://dev.classmethod.jp/articles/using-ssm-connect-to-ec2-instance-v2/

ตัวอย่างการสร้าง 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

https://dev.classmethod.jp/articles/how-to-install-amazon-linux-2023-on-ec2-in-thailand-region/

การสร้าง 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
1x 8 GiB gp3 Root volume, 3000 IOPS, Not encrypted (Default)

คลิก Advanced details เพื่อขยายหน้าจอ
IAM instance profile: ec2-ssm-managed-instance-core (เลือก Role ที่สร้างไว้ก่อนหน้านี้)
ec2_instance_vpc_aws-iam_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
1x 8 GiB gp3 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
test_ping_aws_onpre-1

แล้วคลิก Connect ในแท็บ Session Manager
test_ping_aws_onpre-2

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

จากนั้นรันคำสั่ง 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

site_to_site_vpn-th_final

  1. เริ่มต้นจากการ ping ไปยัง 192.168.0.100 จาก EC2 Instance ชื่อ tinnakorn-main-test ที่อยู่ในฝั่ง AWS
  2. เนื่องจาก IP ปลายทาง 192.168.0.100 ไม่อยู่ใน CIDR block ของ Main VPC (10.0.0.0/16)
    ระบบจึงส่ง traffic ไปยัง VPN Gateway ตามเส้นทางที่กำหนดไว้ใน Route Table สำหรับ 192.168.0.0/24
  3. VPN Gateway จะเชื่อมต่อกับ Customer Gateway ผ่าน Site-to-Site VPN
  4. Customer Gateway ถูกผูกไว้กับ EC2 Instance tinnakorn-onp-vyos ซึ่งทำหน้าที่เป็น VPN Router
    โดย VyOS จะทำการ routing traffic ไปยัง Network ของฝั่ง On-Premises (192.168.0.0/24)
  5. สุดท้าย traffic จะถูกส่งไปยัง EC2 Instance 192.168.0.100 ที่อยู่ในฝั่ง On-Premises ได้สำเร็จ

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

ผมได้เขียนบทความแยกไว้แล้ว โปรดดูวิธีการลบ AWS Resource ที่สร้างขึ้นในบทความนี้ได้ที่ลิงก์ด้านล่างนี้
https://dev.classmethod.jp/articles/delete-aws-site-to-site-vpn-vpc-thailand-region/

สรุป

บทความนี้แสดงตัวอย่างการตั้งค่า 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) ครับ !

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

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.