การใช้งานฟังก์ชัน AWS Site to Site VPN ใน VPC
ครั้งนี้จะมาแนะนำเกี่ยวกับการใช้งานฟังก์ชัน 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 ที่เราต้องการใช้งานให้สามารถเชื่อมต่อกันได้ โดยมีลำดับขั้นตอนที่เกี่ยวข้องกันดังนี้
- สร้าง Key Pairs
- สร้าง EC2 Instance (VyOS)
- เชื่อมโยง Elastic IP (EIP) ไปยัง EC2 Instance (VyOS)
- เชื่อมต่อ EC2 Instance (VyOS) ด้วย PuTTY
ก่อนอื่นเลือกรีเจี้ยนให้ตรงกับ VPC ที่สร้างเมื่อสักครู่นี้ ครั้งนี้คือรีเจี้ยน Singapore
แล้วค้นหา ?︎ EC2
แล้วเลือก EC2
แล้วเริ่มทำการสร้าง Key Pairs และ EC2 Instance (VyOS) ตามด้านล่างนี้
สร้าง Key Pairs
เลือก Key Pairs
จากเมนูด้านซ้าย
ใส่ชื่อที่ต้องการในช่อง Name เช่น tinnakorn-onp-vyos
แล้วเลือก .ppk
และคลิก Create key pair
หลังจากสร้าง Key Pair เสร็จแล้ว ไฟล์ .ppk
จะถูกดาวน์โหลดลงที่คอมพิวเตอร์ของเราและชื่อไฟล์จะเปลี่ยนไปตามที่เราได้ตั้งชื่อไว้โดยอัตโนมัติ
สร้าง EC2 Instance (VyOS)
แล้วเลือก Instance
จากเมนูด้านซ้าย
มาที่หัวข้อ 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 แล้ว ให้ป้อน 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 แล้ว ให้ป้อน Name tag เช่น tinnakorn-main-vpn
แล้วในส่วนของช่อง Tags ด้านล่างจะถูกป้อนโดยอัตโนมัติ
แล้วเลือก Virtual private gateway และ Customer gateway ID ที่สร้างจากขั้นตอนที่แล้ว
ส่วน Routing options: Dynamic (requires BGP)
จะใช้เป็นค่าเริ่มต้นตามนี้
แล้วคลิก Create VPN connection
ด้านล่างสุด
แล้วจะแสดงหน้าจอแบบนี้ โดย State จะแสดง Pending
แล้วคลิกเข้าไปที่ VPN ID
ของเรา
แล้วจะแสดง 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
GiBgp2
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
GiBgp2
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
...
- ทำการรัน
ping 192.168.0.100
ใน tinnakorn-main-test - เนื่องจาก 192.168.0.100 ไม่มีอยู่ใน Network ของ Main VPC (10.0.0.0/16) ก็เลยทำการสื่อสารกับ VPN Gateway ที่จัดการ 192.168.0.0/24 ที่ได้ลงทะเบียนไว้ใน Route Table
- VPN Gateway สื่อสารกับ Cutomer Gateway ผ่าน Site-to-site VPN
- เนื่องจาก Customer Gateway ถูกกำหนดใน tinnakorn-onp-vyos ดังนั้น VyOS จะทำการ Routing ไปยัง Network ของ On-premises (192.168.0.0/24)
- ทำการสื่อสารกับ 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 ได้
ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ
บทความที่เกี่ยวข้อง
- Amazon VPC คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS
- What is AWS Site-to-Site VPN? (English)
- การสร้าง VPC Beginner และเชื่อมต่อกับ EC2 Instance
- วิธีเชื่อมโยง Elastic IP (EIP) ไปยัง EC2 Instance
- 【Update】วิธีติดตั้ง Amazon Linux 2 บน EC2 และเชื่อมต่อเซิร์ฟเวอร์ด้วยโปรแกรม PuTTY
- การใช้งาน SSM เชื่อมต่อเข้า EC2 Instance โดยไม่ต้องมี Inbound
- การ Terminate Instance, ลบ Key Pair และลบ Security Group ใน EC2
- วิธีการใช้งาน AWS Client VPN