AWS์์ ํ์ด๋ธ๋ฆฌ๋ ๋คํธ์ํฌ๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด Site-to-Site VPN connection ๊ตฌ์ฑ์ ํด์ผ ํ ์ ์์ต๋๋ค. Site to Site VPN์ VPC์ ์จํ๋ ๋ฏธ์ค ๊ฐ์ ์ฐ๊ฒฐ์ ์ํด ์ฌ์ฉํ๊ณ , IPsec VPN ์ฐ๊ฒฐ์ ์ง์ํฉ๋๋ค.
IPsec ์ฐ๊ฒฐ์ ํ๋ ์ด์
VPC์ ์จํ๋ ๋ฏธ์ค ๊ฐ ์ ์ก์ ์์ด์ Direct Connect๊ฐ์ dedicated connection์ ๊ตฌ์ฑํ์ง ์๋ ์ด์ ํ์ฐ์ ์ผ๋ก Internet์ ๊ฑฐ์ณ ํต์ ํด์ผ ํฉ๋๋ค. ๊ทธ๋ ๊ธฐ์ ๋ฐ์ดํฐ๋ฅผ ์ํธํํ์ฌ ๋คํธ์ํฌ๋ฅผ ํตํด ์ ์ก๋๋ ๋์ ๋ฐ์ดํฐ๊ฐ ๋์ฒญ๋๊ฑฐ๋ ํ์ทจ๋์ง ์๋๋ก ๋ณดํธํด์ผ ํฉ๋๋ค. IPsec์ ๋ฐ์ดํฐ ์ํธํ๋ฅผ ์ง์ํ์ฌ ์์ ํ ๋ฐ์ดํฐ ํต์ ์ด ๊ฐ๋ฅํ๋๋ก ๋์์ค๋๋ค.
์ Site-to-Site VPN์ด์ด์ผ ํ๋๊ฐ
Site-to-Site VPN์ AWS์์ ์ ๊ณตํ๋ ๊ด๋ฆฌํ VPN ์๋น์ค์ ๋๋ค. High Availability๋ฅผ ์ํด ๋ ๊ฐ์ ํฐ๋์ ์ ๊ณตํ์ฌ, ํ๋์ ํฐ๋์ด ๋ค์ด๋์ด๋ ๋ค๋ฅธ ํ๋์ ํฐ๋๋ก ํธ๋ํฝ์ ์ฐ๊ฒฐํ ์ ์๋๋ก ๋์์ค๋๋ค. ๋ํ Site-to-Site VPN์ ์ฌ์ฉํ๋ฉด CloudWatch๋ฅผ ํตํด ๋ชจ๋ํฐ๋ง์ด ๊ฐ๋ฅํ์ฌ ๋ค์ํ ์๋๋ฆฌ์ค์์ ํธ๋ฌ๋ธ์ํ ์ ํ ์ ์๋ค๋ ์ ๋ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ด๋ฆฌํ ์๋น์ค์ด๊ธฐ ๋๋ฌธ์ ๋งค๋ด์ผํ IPsec ๊ตฌ์ฑ๋ณด๋ค ํจ์ฌ ๊ฐํธํ๋ค๋ ์ ๋ ์์ต๋๋ค.
Site-to-Site VPN ์ค์ต ํ๊ฒฝ ๊ตฌ์ถ
AWS Network - Customer Network์ Site-to-Site VPN ์ฐ๊ฒฐ์ ๊ตฌ์ฑํด๋ณด๊ฒ ์ต๋๋ค. ๋ค์์ ์ํด์ ์ค์ Customer Network๊ฐ ํ์ํ์ง๋ง, ์ ํฌ๋ ๋์ฟ ๋ฆฌ์ ์ ์๋ EC2 ์ธ์คํด์ค๋ก Customer Network๋ฅผ ํ๋ด๋ด์ด ๊ตฌ์ฑํด๋ณด๊ฒ ์ต๋๋ค. ๊ธฐ๋ณธ์ ํ๊ฒฝ ๊ตฌ์ฑ์ ๊ฒฝ์ฐ ํ ๋ผํผ ์์ค ์ฝ๋๋ฅผ ๊ณต๊ฐํด ๋์์ผ๋ฏ๋ก ์ด๋ฅผ ํตํด ์์ฝ๊ฒ ๊ตฌ์ฑ ๊ฐ๋ฅํฉ๋๋ค.
Routing Table
AWS Network์ Routing Table์์ ์์ ์ CIDR ๋ฒ์์ธ 10.0.0.0/16์ ๊ฒฝ์ฐ Local์ ํฅํ๋๋ก ํ๊ณ , Customer Network์ CIDR ๋ฒ์์ธ 192.168.0.0/16์ Vritual Private Gateway๋ฅผ ํฅํ๋๋ก ์ค์ ํฉ๋๋ค.
Customer Network์ Routing Table์์ ์์ ์ CIDR ๋ฒ์์ธ 192.168.0.0/16์ ๊ฒฝ์ฐ Local์ ํฅํ๋๋ก ํ๊ณ , ๊ทธ ์ธ์ ๋ชจ๋ ๋ฒ์ 0.0.0.0/0์ ๋ํด์ Internet Gateway๋ฅผ ํฅํ๋๋ก ์ค์ ํฉ๋๋ค. Customer Network์ EC2-VPN์ ์จํ๋ ๋ฏธ์ค ํ๊ฒฝ์ ์๋ํฌ์ธํธ์ธ Customer Router๋ฅผ ๋ํ๋ ๋๋ค. ์ด๋ ์ธํฐ๋ท์ ๊ฑฐ์น๋๋ก ๋ผ์ฐํ ์ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.
Security Group
EC2-A์์๋ 192.168.0.0/16์ ICMP ํ๋กํ ์ฝ์ ํ์ฉํ์ฌ, Ping ํ ์คํธ๋ฅผ ๊ฐ๋ฅํ๋๋ก ๊ตฌ์ฑํฉ๋๋ค.
ํ ๋ผํผ์ผ๋ก ๋ฆฌ์์ค ๊ตฌ์ฑํ๊ธฐ
๋ ํฌ์งํ ๋ฆฌ ์์ค ํ์ผ์ ์ด์ฉํ์ฌ ๊ฐ๋จํ ์ค์ต ํ๊ฒฝ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ๊ทธ ์ ์ aws configure
๋ช
๋ น์ด๋ก ๋ฆฌ์์ค๋ฅผ ์์ฑํ ํ๊ฒฝ์ ์ ์ํฉ๋๋ค. ํ๋กํ ์ค์ ๊ณผ ๊ด๋ จํ ๋ฐฉ๋ฒ์ ๋ํด์๋ ๋ค์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ธ์.
aws configure --profile s2s
profile
์ต์
์ ์ง์ ํ์ฌ s2s
ํ๋กํ์ ์์ธ์ค ํค ๊ฐ์ ์
๋ ฅํฉ๋๋ค. ํ๋กํ ์ง์ ํ ๋ค์๊ณผ ๊ฐ์ด ์คํํฉ๋๋ค:
terraform init
terraform apply
์ ์์ ์ผ๋ก ์คํํ์๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ํ ์ ์์ต๋๋ค.
ํ ๋ผํผ์ผ๋ก ํ๊ฒฝ ๊ตฌ์ฑ์ ํ๊ณ ์ถ์ง ์๊ณ , ์ง์ ๋ฆฌ์์ค๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด ๊ทธ๋ ๊ฒ ํ์ ๋ ์ข์ต๋๋ค. ์๋จ ์ด๋ฏธ์ง๋ฅผ ํ ๋๋ก ๋ฆฌ์์ค๋ฅผ ์์ฑํ์๋ฉด ๋ฉ๋๋ค.
Site-to-Site VPN ์ฐ๊ฒฐ ๋ฆฌ์์ค๋ฅผ ์ ์ํ๋ ๋ธ๋ญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
# Site to Site VPN Connection
resource "aws_vpn_connection" "aws_vpn_connection" {
provider = aws.seoul
vpn_gateway_id = aws_vpn_gateway.aws_vpn_gateway.id
customer_gateway_id = aws_customer_gateway.aws_customer_gateway.id
type = "ipsec.1"
static_routes_only = true
local_ipv4_network_cidr = aws_vpc.customer_vpc.cidr_block
remote_ipv4_network_cidr = aws_vpc.aws_vpc.cidr_block
tags = {
Name = "${var.project_name}-${var.environment_aws}-vpn"
}
}
# VPN Connection Route
resource "aws_vpn_connection_route" "aws_vpn_connection_route" {
provider = aws.seoul
destination_cidr_block = aws_vpc.customer_vpc.cidr_block
vpn_connection_id = aws_vpn_connection.aws_vpn_connection.id
}
์ฌ๊ธฐ์ static_routes_only ๋ฅผ false๋ก ์ง์ ํ๋ฉด BGP๋ฅผ ์ด์ฉํ dynamic routing์ด ๊ฐ๋ฅํ๋๋ก ๊ตฌ์ฑํด์ผ ํฉ๋๋ค. ์ฆ, Customer Gateway์์ BGP๋ฅผ ์ง์ํด์ผ ํ๋ฏ๋ก, ํด๋น ์ค์ต์์ static_routes_only๋ฅผ true ๋ก ์ค์ ํ์ต๋๋ค.
local_ipv4_network_cidr
์ aws_vpc์ cidr๋ก ์คํดํ ์ ์์ต๋๋ค. ์ด์ ์ฃผ์ํด์ผ ํฉ๋๋ค.
Site to Site VPN ์ค์ ํ, AWS ์ฝ์์ ํตํด Customer VPC์ EC2์ ์ฌ์ฉํ VPN Configuration File์ ๋ค์ด๋ก๋ํฉ๋๋ค. ์ด ๋ Vendor๋ฅผ Openswan์ผ๋ก ์ ํํฉ๋๋ค. (Libreswan์ Openswan์ ํฌํฌ์ ๋๋ค)
Configuration File ์์
์ด์ EC2์์ Libreswan์ ๊ตฌ์ฑํฉ์๋ค. AWS ๋งค๋์ง๋จผํธ ์ฝ์์์ Tokyo ๋ฆฌ์ ์ EC2(Customer EC2)๋ก Instance Connect๋ฅผ ํตํด ์ ์ํฉ๋๋ค.
Amazon Linux 2023๋ถํฐ๋ Openswan์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์, ์ถ๊ฐ์ ์ธ ์ค์ ์ด ํ์ํฉ๋๋ค. ๋จผ์ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ์์ฑํ๊ณ Libreswan์ ์ค์นํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ EC2์ ์ ์ํ๋ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ํตํด repo ํ์ผ์ ์์ฑํด์ค๋๋ค.
sudo vi /etc/yum.repos.d/fedora.repo
๊ทธ ํ ํ์ผ์์ ๋ค์์ ๋ด์ฉ์ ๋ถ์ฌ๋ฃ์ต๋๋ค:
[fedora]
name=Fedora 36 - $basearch
#baseurl=http://download.example/pub/fedora/linux/releases/36/Everything/$basearch/os/
metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-36&arch=$basearch
enabled=0
countme=1
metadata_expire=7d
repo_gpgcheck=0
type=rpm
gpgcheck=1
gpgkey=https://getfedora.org/static/fedora.gpg
skip_if_unavailable=False
๋ถ์ฌ๋ฃ์๋ค๋ฉด ์ ์ฅ ํ ๋์ต๋๋ค. (!wq
๋ช
๋ น์ด๋ ZZ
๋ฅผ ํตํด ์ ์ฅ ํ ์ข
๋ฃ๋ฅผ ํ ์ ์์ต๋๋ค)
์ ์ฅํ๋ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ํตํด Libreswan์ ์ค์นํฉ๋๋ค.
sudo dnf --enablerepo=fedora install libreswan -y
์ค์น๊ฐ ์๋ฃ๋ ๋ชจ์ต
Libreswan์ ์ค์น๋ฅผ ๋ง์ณค๋ค๋ฉด, systemctl configuration file์ ์์ ํฉ๋๋ค.
sudo vi /etc/sysctl.conf
ํด๋น ํ์ผ ํ๋จ์ ๋ค์์ ๋ช ๋ น์ด๋ฅผ ์ถ๊ฐํ๊ณ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ์ฅํ๊ณ ๋์ต๋๋ค.
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.accept_source_route = 0
๊ทธ ํ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ์ํฉ๋๋ค.
sudo sysctl -p
๋ค์์ผ๋ก, /etc/ipsec.conf ํ์ผ์ ์ด์ด include /etc/ipsec.d/*.conf
์ํธ๋ฆฌ๊ฐ ์๋์ง ํ์ธํฉ๋๋ค.
sudo vi /etc/ipsec.conf
๋ง์ง๋ง์ค์ ์ ๋๋ก ์ค์ ๋์ด ์๋ ๊ฒ์ ํ์ธํ์์ผ๋ฏ๋ก ์ถ๊ฐ์ ์์ ์ด ํ์ํ์ง ์์ต๋๋ค. ๋ง์ฝ #๋ก ์ฃผ์ ์ฒ๋ฆฌ๋์ด ์๋ค๋ฉด ์ฃผ์์ ํด์ ํฉ๋๋ค.
์ด์ ๋ฏธ๋ฆฌ ๋ค์ด๋ฐ์๋ VPN Configuration File์ ์คํ ์ ๋ฐ๋ผ๊ฐ๋๋ค. 4๋ฒ๋ถํฐ ๋ณด๊ฒ ์ต๋๋ค.
- Create a new file at /etc/ipsec.d/aws.conf if doesn't already exist:
sudo vi /etc/ipsec.d/aws.conf
๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ ๋ถ์ฌ๋ฃ์ต๋๋ค. (๋ณธ์ธ์ configuration file ์์ ๋ด์ฉ์ ์ง์ด๋ฃ์ต๋๋ค)
conn Tunnel1
authby=secret
auto=start
left=%defaultroute
leftid=18.176.25.8
right=3.37.114.133
type=tunnel
ikelifetime=8h
keylife=1h
phase2alg=aes128-sha1;modp1024
ike=aes128-sha1;modp1024
auth=esp
keyingtries=%forever
keyexchange=ike
leftsubnet=<LOCAL NETWORK>
rightsubnet=<REMOTE NETWORK>
dpddelay=10
dpdtimeout=30
dpdaction=restart_by_peer
๋ช๊ฐ์ง ๋ฐ๊ฟ์ผ ํ ์ ์ด ์์ต๋๋ค.
auth=esp
๋ผ์ธ์ ์ญ์ ํฉ๋๋ค. ์ด๊ฑด Libreswan์์ ์ง์ํ์ง ์์ต๋๋ค.phase2alg
์aes_gcm
๊ฐ์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค.ike
์aes256-sha1
๊ฐ์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค.LOCAL NETWORK
๋ Customer Network์ CIDR ๊ฐ์ ์ ๋ ฅํฉ๋๋ค. (192.168.0.0/16)REMOTE NETWORK
๋ AWS Network์ CIDR ๊ฐ์ ์ ๋ ฅํฉ๋๋ค. (10.0.0.0/16)
conn Tunnel1
authby=secret
auto=start
left=%defaultroute
leftid=18.176.25.8
right=3.37.114.133
type=tunnel
ikelifetime=8h
keylife=1h
phase2alg=aes_gcm
ike=aes256-sha1
keyingtries=%forever
keyexchange=ike
leftsubnet=192.168.0.0/16
rightsubnet=10.0.0.0/16
dpddelay=10
dpdtimeout=30
dpdaction=restart_by_peer
๋ชจ๋ ๋ณ๊ฒฝํ์๋ค๋ฉด ์ ์ฅ ํ ๋์ต๋๋ค.
- Create a new file at /etc/ipsec.d/aws.secrets if it doesn't already exist:
sudo vi /etc/ipsec.d/aws.secrets
ํ์ผ ์์ ์ํธ๋ฆฌ๋ฅผ ์ง์ด๋ฃ์ต๋๋ค. (๋ณธ์ธ์ configuration file ์์ ๋ด์ฉ์ ์ง์ด๋ฃ์ต๋๋ค)
18.176.25.8 3.37.114.133: PSK "Ns2Of1Wv24955RX7jjFyhzpsXfN4MsKw"
์ฌ๊ธฐ๊น์ง ๋ง์ณค๋ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ํตํด ipsec ์๋น์ค๋ฅผ ์์ํฉ๋๋ค!
sudo systemctl start ipsec.service
๋ค์ ๋ช ๋ น์ด๋ฅผ ํตํด status๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
sudo systemctl status ipsec.service
ํฐ๋์ด ์์ฑ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๋ก๊ทธ๊ฐ ์ถ๋ ฅ๋๋ค๋ฉด ipsec ํฐ๋์ด ์ ์์ ์ผ๋ก ์ฐ๊ฒฐ๋์์์ ๋ํ๋ ๋๋ค.
AWS ๋งค๋์ง๋จผํธ ์ฝ์์์๋ ํฐ๋์ด UP์ธ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก Tokyo ๋ฆฌ์ ์ Customer Network ์์ ์๋ EC2์์ AWS Network์ private ip๋ก ์ ์์ด ๊ฐ๋ฅํ์ง ํ์ธํฉ๋๋ค.
ping <private-ip>
ํธ๋ฌ๋ธ์ํ
ํฐ๋์ด UP ์ํ๋ก ๋ฐ๋์ง ์๋ ๊ฒฝ์ฐ, sudo systemctl status ipsec.service
๋ฅผ ํตํด ๋ก๊ทธ๋ฅผ ํ์ธํฉ๋๋ค.
-
IKE_AUTH response rejected Child SA with TS_UNACCEPTABLE, no connection named "Tunnel1โ
- ์ด ๊ฒฝ์ฐ aws.conf ํ์ผ์ ์
๋ ฅํ ์๊ณ ๋ฆฌ์ฆ ์ ํ์ ๋ฌธ์ ๊ฐ ์์ ํ๋ฅ ์ด ๋์ต๋๋ค. ์ฌ๋ฐ๋ฅธ ์๊ณ ๋ฆฌ์ฆ ์กฐํฉ์ ์ฌ์ฉํ์๋์ง ๊ฒํ ํ๊ณ
sudo systemctl restart ipsec.service
๋ช ๋ น์ด๋ฅผ ํตํด ๋ค์ ์คํํด๋ณด์ธ์. journalctl -xe | grep pluto
๋ช ๋ น์ด๋ฅผ ํตํด ๋ ์์ธํ ๋ก๊ทธ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
- ์ ์ ๊ฒฝ์ฐ์๋ ํด๋น ๋ช ๋ น์ด๋ฅผ ํตํด โmodp1024โ๋ฅผ ์ง์ํ์ง ์๋ ๊ฒ์ ํ์ ํ์ต๋๋ค.
- ์ด ๊ฒฝ์ฐ aws.conf ํ์ผ์ ์
๋ ฅํ ์๊ณ ๋ฆฌ์ฆ ์ ํ์ ๋ฌธ์ ๊ฐ ์์ ํ๋ฅ ์ด ๋์ต๋๋ค. ์ฌ๋ฐ๋ฅธ ์๊ณ ๋ฆฌ์ฆ ์กฐํฉ์ ์ฌ์ฉํ์๋์ง ๊ฒํ ํ๊ณ
-
(๋ฆฌ์์ค๋ฅผ ์ง์ ๊ตฌ์ฑํ์ ๊ฒฝ์ฐ) ํฐ๋์ด UP์ด์ง๋ง Ping์ด ์คํจํ๋ ๊ฒฝ์ฐ
- AWS Network์ EC2์ ํ ๋น๋์ด ์๋ Security Group์ด Customer Network VPC์ CIDR์ ๋ํด ICMP IPv4 All traffic๋ฅผ ํ์ฉํ๋์ง ํ์ธํฉ๋๋ค.
- AWS Network์ Routing Table์ ํ์ธํฉ๋๋ค. Customer Network VPC์ CIDR ๋ฒ์๋ Virtual Private Gateway๋ฅผ ํฅํ๋๋ก ์ค์ ๋์ด ์์ด์ผ ํฉ๋๋ค.
- Customer Network์ Routing Table์ ํ์ธํฉ๋๋ค. 0.0.0.0/0 ๋ฒ์์ ๋ํด Internet Gateway๋ฅผ ํฅํ๋๋ก ์ค์ ๋์ด ์์ด์ผ ํฉ๋๋ค.
- VPC Flow log๋ฅผ ํ์ฑํ ํ์ฌ ๋์ฑ ์์ธํ ํธ๋ฌ๋ธ ์ํ ์ด ๊ฐ๋ฅํฉ๋๋ค.
AWS Site to Site VPN - Libreswan ์ฐ๊ฒฐ ์ค์ต์ ์๋ฃํ์ต๋๋ค. ์ค์ต์ ์๋ฃํ์ จ๋ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ํตํด ๋ฆฌ์์ค๋ฅผ ์ญ์ ํฉ๋๋ค:
terraform destroy