การใช้งานฟังก์ชัน AWS Site to Site VPN ใน VPC

แนะนำการใช้งานฟังก์ชัน Site-to-Site VPN connections ใน VPC เพื่อให้ Environment ที่เราต้องการใช้งานทางฝั่ง AWS และ On-premises สามารถเชื่อมต่อกันได้

ครั้งนี้จะมาแนะนำเกี่ยวกับการใช้งานฟังก์ชัน Site to Site VPN ใน VPC

AWS Site-to-Site VPN คืออะไร

ตามค่าเริ่มต้น Instance ที่เราเปิดใช้งานใน Amazon VPC จะไม่สามารถสื่อสารกับ On-premise Network (Remote) ของเราเองได้ แต่เราสามารถเปิดใช้งานการเข้าถึงเครือข่ายระยะไกลจาก VPC ของเราโดยสร้างการเชื่อมต่อ AWS Site-to-Site VPN (Site-to-Site VPN) และกำหนดค่าการกำหนดเส้นทางเพื่อส่งผ่านทราฟฟิกผ่านการเชื่อมต่อได้

อ่านข้อมูลเพิ่มเติมได้ที่ลิงก์ด้านล่างนี้

เป้าหมาย

เราไม่สามารถสร้าง Network ของ On-premise ได้ จึงใช้ VPC 1 ตัวแทน On-premise

ครั้งนี้เราจะสร้าง VPC ทางฝั่ง AWS และ On-premises แล้วสร้างและตั้งค่า EC2 Instance (VyOS) และ Site-to-Site VPN connections ใน Main VPC เพื่อเป็น VPN Router ให้กับ Environment ที่เราต้องการใช้งานทางฝั่ง AWS และ On-premises ให้สามารถเชื่อมต่อกันได้ โดย Environment ที่จะใช้ทดสอบสอบการเชื่อมต่อทางฝั่ง AWS และ On-premises ครั้งนี้คือ EC2 Instance Amazon Linux 2

การสร้าง VPC

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

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

สร้าง VPC สำหรับ AWS

Region: Singapore

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-1a: 10.0.0.0/24 (ตัวอย่าง)

DNS options
✅ Enable DNS hostnames
✅ Enable DNS resolution

คลิก Create VPC

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

Region: Singapore

VPC settings
Resources to create: ◎ VPC and more

Name tag auto-generation
✅ Auto-generate: tinnakorn-onp (เมื่อป้อนชื่อแล้วให้สังเกตการเปลี่ยนแปลงด้านขวา)
IPv4 CIDR block: 192.168.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-1a: 192.168.0.0/24 (ตัวอย่าง)

DNS options
✅ Enable DNS hostnames
✅ Enable DNS resolution

คลิก Create VPC

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

เราจะสร้าง EC2 Instance (VyOS) ทางฝั่ง On-premises เพื่อเป็น VPN Router ให้กับ Environment ทางฝั่ง AWS และ On-premises ที่เราต้องการใช้งานให้สามารถเชื่อมต่อกันได้ โดยมีลำดับขั้นตอนที่เกี่ยวข้องกันดังนี้

ก่อนอื่นเลือกรีเจี้ยนให้ตรงกับ VPC ที่สร้างเมื่อสักครู่นี้ ครั้งนี้คือรีเจี้ยน Singapore
แล้วค้นหา ?︎ EC2 แล้วเลือก 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 ตัวเวอร์ชันปัจจุบัน (ณ วันที่อัปเดตบทความ 2024/06/17 คือ VyOS Universal Router for AWS (Standard Support) - Legacy Listing)

แล้วคลิก Subscribe now แล้วรอสักครู่

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

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

ค้นหา t3.medium และเลือก 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, xx, xx.xx.xx.xx/32)" แล้วเปลี่ยน Source type ให้เป็น My IP

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

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

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

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

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

เมื่อ Instance เริ่มต้นระบบเสร็จเรียบร้อยแล้ว จะมีสถานะเป็น :white_check_mark: 2/2 checks passed

แล้วคลิกที่ Instance ID ของเรา ก็จะแสดงหน้าจอแบบนี้

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

ดูวิธีเชื่อมโยง Elastic IP (EIP) ไปยัง EC2 Instance ได้ตามลิงก์บทความด้านล่างนี้

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

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

ข้อควรระวัง: ในส่วนของ การตั้งค่า Data to send to the server ให้ป้อน Auto-login username เป็น ✅ vyos (เนื่องจากไม่ใช่ ❌ubuntu หรือ ❌ec2-user)

ดูตัวอย่างตามหัวข้อย่อยที่นี่: การ Connect to EC2 by PuTTY

ถ้าหากเชื่อมต่อได้แล้วจะแสดงหน้าจอแบบนี้ โดยมี Using username vyos ก็คือเราสามารถ Login เข้ามายัง vyos ได้แล้ว

vyos@ip-192-168-0-10:~

Using username "vyos".
Authenticating with public key "tinnakorn-onp-vyos"
Welcome to VyOS!

Check out project news at https://blog.vyos.io
and feel free to report bugs at https://phabricator.vyos.net

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 ใน Main VPC โดยประกอบไปด้วยหัวข้อตามด้านล่างนี้

ก่อนอื่นให้แลือกรีเจี้ยน Singapore แล้วเข้าไปที่ 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 จะแสดง Detached ซึ่งเราต้องทำการ Attach Main VPC ที่สร้างก่อนหน้านี้ในนี้ โดยคลิกเข้าไปที่ Virtual private gateway ID ของเรา

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

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

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

สร้าง 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 ของเรา

คลิก Download configuration

แล้วจะแสดง POPUP แบบนี้ ให้เลือก Vendor เป็น Vyatta แล้วคลิก Download
เมื่อดาวน์โหลดไฟล์เสร็จแล้ว จะได้ไฟล์ชื่อว่า vpn-xxxxxxxxxx อยู่ในอุปกรณ์ของเรา

การตั้งค่าและเชื่อมต่อ VyOS

เราจะมาตั้งค่าไฟล์ vpn-xxxxxxxxxx ที่ดาวน์โหลดมาจากขั้นตอนที่แล้ว แล้วทำการเชื่อมต่อกับ VyOS

ตั้งค่าไฟล์ VPN

เปิดไฟล์ vpn-xxxxxxxxxx ที่ดาวน์โหลดมาจากขั้นตอนที่แล้ว โดยให้เปิดไฟล์ในโปรแกรม Notepad++ หรือในโปรแกรมอื่นที่เรากำลังใช้งานอยู่ก็ได้ ! แต่แนะนำให้มีเลขบอกบรรทัดด้วย เพื่อทำให้ง่ายต่อการจัดการคำสั่งต่างๆในไฟล์นี้

แล้วเมื่อเปิดไฟล์ขึ้นมาแล้วจะแสดงหน้าจอแบบนี้

จากนี้ไปจะเป็นการตั้งค่าไฟล์ vpn-xxxxxxxxxx (ไฟล์ VPN)

ก่อนอื่นให้ไปที่หน้าจอ EC2 Instance (VyOS) สำหรับ On-premises ที่สร้างไว้ก่อนหน้านี้ แล้วคัดลอก Private IPv4 addresses เตรียมไว้

แล้วกลับมาที่หน้าจอไฟล์ VPN แล้วเลื่อนมาที่บรรทัด 44 จะเห็นว่า local-address เป็น Public IPv4 address ของ EC2 Instance (VyOS) สำหรับ On-premises
ทีนี้ให้ลบ Public IPv4 address ออก แล้วป้อน Private IPv4 addresses ที่คัดลอกมาจากขั้นตอนที่แล้ว ก็จะแสดงหน้าจอแบบนี้
44 | set vpn ipsec site-to-site peer [IP address] local-address '192.168.0.10'

ต่อไปเลื่อนลงมาที่บรรทัด 101 แล้วป้อนคำว่า address-family ipv4-unicast ต่อจาก "IP Address" ก็จะแสดงหน้าจอแบบนี้
101 | set protocols bgp 65000 neighbor [IP address] address-family ipv4-unicast soft-reconfiguration 'inbound'

ต่อไปบรรทัด 109 ให้ป้อนคำว่า address-family ipv4-unicast ต่อจาก "65000" แล้ว
แล้วลบ "0.0.0.0/0" ออก แล้วป้อน 192.168.0.0/24 ลงไปแทนที่ ก็จะแสดงหน้าจอแบบนี้ (192.168.0.0/24 เป็นข้อมูล Subnet Network (CIDR) ของ On-premises)
109 | set protocols bgp 65000 address-family ipv4-unicast network 192.168.0.0/24

ต่อไปเลื่อนลงมาที่บรรทัด 138 แล้วเปลี่ยน Public IPv4 address ให้เป็น Private IPv4 addresses ของ EC2 Instance (VyOS) สำหรับ On-premises ก็จะแสดงหน้าจอแบบนี้
138 | set vpn ipsec site-to-site peer [IP address] local-address '192.168.0.10'

ต่อไปเลื่อนไปที่บรรทัด 195 แล้วป้อนคำว่า address-family ipv4-unicast ต่อจาก "IP Address" ก็จะแสดงหน้าจอแบบนี้
195 | set protocols bgp 65000 neighbor [IP address] address-family ipv4-unicast soft-reconfiguration 'inbound'

ต่อไปบรรทัด 203 ให้ป้อนคำว่า address-family ipv4-unicast ต่อจาก "65000" แล้ว
แล้วลบ "0.0.0.0/0" ออก แล้วป้อน 192.168.0.0/24 ลงไปแทนที่ ก็จะแสดงหน้าจอแบบนี้
203 | set protocols bgp 65000 address-family ipv4-unicast network 192.168.0.0/24

เมื่อตั้งค่าเสร็จแล้ว ให้ตรวจสอบความถูกต้องในการตั้งค่าอีกครั้ง
แล้วแนะนำให้ลบ Comment ออกทั้งหมด เพื่อให้ง่ายต่อการนำ Command เหล่านี้ไปใช้ตั้งค่าใน EC2 Instance (VyOS)
วิธีการลบคือให้ลบบรรทัดที่มี ! ออกทั้งหมด แต่ส่วนที่ต้องระวังคือ คำที่ขึ้นต้นด้วย Set ไม่ต้องลบ เพราะเป็น Command ที่ต้องใช้ Run ใน PuTTY ของ EC2 Instance (VyOS)

เมื่อลบ Comment ออกหมดแล้วก็ให้ Save แล้วจะแสดงหน้าจอแบบนี้

ตั้งค่าและเชื่อมต่อ VyOS

ก่อนรันคำสั่งให้เปิดหน้าจอ PuTTY ของ VyOS ที่เราเชื่อมต่อไว้ก่อนหน้านี้ แล้วเริ่มรันคำสั่งตามนี้

รันคำสั่งโหมดการตั้งค่าใน PuTTY ของ VyOS ตามนี้

configure

Output (example): แล้วจะแสดงหน้าจอแบบนี้

vyos@ip-192-168-0-10:~

vyos@ip-192-168-0-10:~$ configure
[edit]
vyos@ip-192-168-0-10#


สำคัญ: คัดลอกและวางคำสั่งที่แก้ไขในไฟล์ vpn-xxxxxxxxxx ทั้งหมดลงใน PuTTY

ตามด้วยใช้การตั้งค่าตามคำสั่งในไฟล์ VPN ที่รันไปทั้งหมด แล้วทำการบันทึกตามคำสั่งด้านล่างนี้

commit
save

Output (example): แล้วจะแสดงหน้าจอแบบนี้

vyos@ip-192-168-0-10:~

vyos@ip-192-168-0-10# commit
No configuration changes to commit
[edit]
vyos@ip-192-168-0-10# save
Saving configuration to '/config/config.boot'...
Done
[edit]
vyos@ip-192-168-0-10#


ออกจากโหมดการตั้งค่า

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, D - SHARP,
       F - PBR, f - OpenFabric,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup

S>* 0.0.0.0/0 [210/0] via 192.168.0.1, eth0, weight 1, 01:18:19
B>* 10.0.0.0/16 [20/100] via 169.254.125.81, vti0, weight 1, 00:10:55
C>* 169.254.125.80/30 is directly connected, vti0, 00:18:07
C>* 169.254.164.168/30 is directly connected, vti1, 00:18:07
C>* 192.168.0.0/24 is directly connected, eth0, 01:18:20
vyos@ip-192-168-0-10:~$


แสดงรายละเอียดข้อมูล bgp ตามคำสั่งด้านล่างนี้

show ip bgp

Output (example): แล้วจะแสดงหน้าจอแบบนี้

vyos@ip-192-168-0-10:~

vyos@ip-192-168-0-10:~$ show ip bgp
BGP table version is 4, 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

   Network          Next Hop            Metric LocPrf Weight Path
*  10.0.0.0/16      169.254.164.169        200             0 64512 i
*>                  169.254.125.81         100             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:~$


แล้วเข้าไปที่ "VPC > Site-to-Site VPN connections > Tunnel details" ถ้า Tunnel state เป็น Status=Up ก็ถือว่าสามารถเชื่อมต่อได้ปกติ

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

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

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

ให้ติ๊ก Enable ตรงคอลัมน์ Propagation แล้วคลิก Save

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

ต่อไปให้เลือก 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

เข้าไปที่หน้าจอ EC2 Instance (VyOS) แล้วเลือก Actions เลือก Networking และเลือก Change source/destination check (ต้องตั้งค่า source/destination check เพื่อให้ Instance ทำงานเป็น Router ได้)

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

การสร้าง EC2 และทดสอบการเชื่อมต่อ

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

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

ก่อนอื่นให้สร้าง IAM Role เพื่อให้สิทธิ์ SSM กับ EC2 ทางฝั่ง AWS
รายละเอียดเกี่ยวกับการเชื่อมต่อ EC2 ด้วย SSM ดูที่ลิงก์บทความและหัวข้อ "สร้าง 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 Instance สำหรับ AWS

Region: Singapore

※Launch instances
Name and tags
Name: tinnakorn-main-test (ตั้งชื่อที่ต้องการ)

Application and OS Images (Amazon Machine Image)
Amazon Machine Image (AMI): Amazon Linux 2023 AMI

Instance type
Instance type: t3a.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)
Security group name - required: tinnakorn-main-test (ตั้งชื่อที่ต้องการ)
Description - required: tinnakorn-main-test (ป้อนตามต้องการ)
Inbound security groups rules
คลิก Remove (ครั้งนี้จะไม่ตั้งค่า Security group rule)

Configure storage
1x: 8 GiB gp2 Root volume (Default)

คลิก Advanced details เพื่อขยายหน้าจอ แล้วเลือก Role ที่เราสร้างไว้ก่อนหน้านี้
IAM instance profile: ec2-ssm-managed-instance-core

สร้าง EC2 Instance สำหรับ On-premises

Region: Singapore

※Launch instances
Name and tags
Name: tinnakorn-onp-test (ตั้งชื่อที่ต้องการ)

Application and OS Images (Amazon Machine Image)
Amazon Machine Image (AMI): Amazon Linux 2023 AMI

Instance type
Instance type: t3a.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
Firewall (security groups)
Security group name - required: tinnakorn-onp-test (ตั้งชื่อที่ต้องการ)
Description - required: tinnakorn-onp-test (ป้อนตามต้องการ)
Inbound security groups rules
▼ Security group rule 1 (xxx, xxx, xx.x.x.x/xx)
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 gp2 Root volume (Default)

ทดสอบการเชื่อมต่อ

ตรวจสอบว่า EC2 Instance (AWS) ใน Main VPC สามารถ ping ไปถึง 192.168.0.100 ที่เป็น EC2 Instance (On-premises) ได้หรือไม่

หลังจากที่ EC2 Instance ทางฝั่ง AWS และ On-premises เริ่มต้นระบบเสร็จแล้ว ให้เข้าไปที่หน้าจอ EC2 Instance ของ AWS แล้วคลิก Connect

เลือกแท็บ Session Manager แล้วคลิก Connect

แล้วจะแสดงหน้าจอแบบนี้


จากนั้นให้รันคำสั่ง ping ตามนี้

ping 192.168.0.100

Output (example): ถ้า ping มีการดำเนินการไปเรื่อยๆแบบนี้ก็ถือว่าการเชื่อมต่อสำเร็จ

vyos@ip-192-168-0-10:~

h-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=3.50 ms
64 bytes from 192.168.0.100: icmp_seq=2 ttl=126 time=2.28 ms
64 bytes from 192.168.0.100: icmp_seq=3 ttl=126 time=3.24 ms
64 bytes from 192.168.0.100: icmp_seq=4 ttl=126 time=2.15 ms
64 bytes from 192.168.0.100: icmp_seq=5 ttl=126 time=2.21 ms
64 bytes from 192.168.0.100: icmp_seq=6 ttl=126 time=2.41 ms
64 bytes from 192.168.0.100: icmp_seq=7 ttl=126 time=2.46 ms
64 bytes from 192.168.0.100: icmp_seq=8 ttl=126 time=2.21 ms
64 bytes from 192.168.0.100: icmp_seq=9 ttl=126 time=2.15 ms
64 bytes from 192.168.0.100: icmp_seq=10 ttl=126 time=3.57 ms
...

  1. ทำการรัน ping 192.168.0.100 ใน tinnakorn-main-test
  2. เนื่องจาก 192.168.0.100 ไม่มีอยู่ใน Network ของ Main VPC (10.0.0.0/16) ก็เลยทำการสื่อสารกับ VPN Gateway ที่จัดการ 192.168.0.0/24 ที่ได้ลงทะเบียนไว้ใน Route Table
  3. VPN Gateway สื่อสารกับ Cutomer Gateway ผ่าน Site-to-site VPN
  4. เนื่องจาก Customer Gateway ถูกกำหนดใน tinnakorn-onp-vyos ดังนั้น VyOS จะทำการ Routing ไปยัง Network ของ On-premises (192.168.0.0/24)
  5. ทำการสื่อสารกับ 192.168.0.100 ที่มีอยู่ใน Network ของ On-premises

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

การลบ Resource ใน Service ต่างๆ ถ้าเราไม่รู้ลำดับของการลบ Resource ก็จะทำให้เกิด Error ในขณะลบ หรือไม่สามารถลบได้นั่นเอง เช่น ถ้าทำการลบ Security Group ที่กำลังเชื่อมต่ออยู่กับ EC2 โดยที่ไม่ Terminate EC2 ก่อน ก็จะไม่สามารถลบ Security Group ได้ เป็นต้น ดังนั้นแนะนำให้ลบตามขั้นตอนที่ผมเรียงไว้ได้เลยครับ

การลบ Resource ที่ได้สร้างขึ้นใน Service ต่างๆ

ลบเรียงตามขั้นตอนดังนี้ (ตัวเลขที่ระบุหมายถึงจำนวนที่สร้างขึ้นมา):

  • Amazon EC2
    • Instances (3)
    • Key pairs (1)
    • Security Groups (3)
    • Elastic IPs (1)
  • Amazon VPC
    • Site-to-Site VPN connections (1)
    • Customer gateways (1)
    • Virtual private gateways (1)
    • Your VPCs (2)
  • AWS Identity and Access Management (IAM)
    • Roles (1)

การลบ Resource ใน Amazon EC2

การ Terminate Instance, ลบ Key pairs และ Security Groups

ดูตัวอย่างการลบได้ที่ลิงก์ด้านล่างนี้

การลบ Elastic IPs

เข้าไปที่ Service EC2 > Elastic IPs คลิก Actions แล้วเลือก Release Elastic IP addresses แล้วยืนยันการลบตามคำแนะนำ

การลบ Resource ใน Amazon VPC

การลบ Site-to-Site VPN connections

เข้าไปที่ Service VPC > Site-to-Site VPN connections เลือกตัวที่ต้องการลบ คลิก Actions แล้วเลือก Delete VPN connection แล้วยืนยันการลบตามคำแนะนำ

การลบ Customer gateways

เข้าไปที่ Service VPC > Customer gateways เลือกตัวที่ต้องการลบ คลิก Actions แล้วเลือก Delete customer gateway แล้วยืนยันการลบตามคำแนะนำ

การลบ Virtual private gateways

เข้าไปที่ Service VPC > Customer gateways เลือกตัวที่ต้องการลบ คลิก Actions แล้วเลือก Detach from VPC

เมื่อมี POPUP แสดงขึ้นมา ให้คลิก Detach virtual private gateway แล้วรอ State=Detaching สักครู่

เมื่อเป็น State=Detached แล้ว ให้เลือกตัวที่ต้องการลบอีกครั้ง แล้วคลิก Actions แล้วเลือก Delete virtual private gateway แล้วยืนยันการลบตามคำแนะนำ

การลบ Your VPCs

เข้าไปที่ Service VPC > Your VPCs เลือกตัวที่ต้องการลบ คลิก Actions แล้วเลือก Delete VPC แล้วยืนยันการลบตามคำแนะนำ (การลบนี้ไม่สามารถลบพร้อมกันได้ ต้องลบทีละตัว)

การลบ AWS Identity and Access Management (IAM)

เข้าไปที่ Service IAM > Roles ค้นหาและเลือกตัวที่ต้องการลบ คลิก Delete แล้วยืนยันการลบตามคำแนะนำ

สรุป

  • สามารถใช้การเชื่อมต่อ VPN ที่ปลอดภัยกับเครือข่ายใน On-premises โดยใช้ AWS Site-to-Site VPN ได้
  • สามารถใช้เมื่อต้องการปรับใช้แอปพลิเคชันทางธุรกิจใน AWS และสื่อสารอย่างปลอดภัยจากใน On-premises ได้

ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ

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