본문 바로가기
AWS Cloud School 8기/서버가상화_클라우드 이미지

Site-to-Site VPN

by YUNZEE 2025. 2. 17.
728x90

📌 Site-to-Site VPN (사이트 간 VPN)

개념

- 이론적으로, 물리적으로 떨어져 있는 사설 네트워크끼리는 통신이 안됨, 하지만 tunneling을 통해 Overlay network 구성시 같은 지역(내부)에 있는 것처럼 간주할 수 있음.

- 회사 지점(본사-지사 등) 간에 VPN을 연결하여 하나의 네트워크처럼 동작하게 만드는 방식

→ 지점 간의 네트워크를 안전하게 연결하여 내부 시스템을 공유

특징

  • 각 지점(회사 본사와 지사 등)에 VPN 장비(VyOS, Cisco, Fortinet 등)를 설치하여 자동으로 연결
  • 직원들이 VPN을 따로 실행할 필요 없음 (네트워크 자체가 연결됨)
  • 각 지점의 네트워크 대역이 다름 (예: 본사: 192.168.1.0/24, 지사: 192.168.2.0/24)
  • 네트워크 트래픽이 자동으로 VPN 터널을 통해 전달됨
  • 보안이 강력하고, 대규모 기업에 적합

예시

📍 본사와 지사가 네트워크를 공유하는 경우

  • 본사(192.168.1.0/24)와 지사(192.168.2.0/24)를 VPN으로 연결
  • 지사 직원이 본사의 내부 서버(예: ERP, DB 서버 등)에 자동으로 접근 가능
  • 마치 한 회사 내부망처럼 동작
실습)
두 개의 VyOS를 구성할 예정.
 각각 system GW와 ssh 접속되게 만들어보세요.

vyos1
 2 core 2GB 5GB
eth0 - 211.183.3.10/24
vm이름 - vyos1

vyos2
 2 core 2GB 5GB
eth0 - 211.183.3.20/24
vm이름 - vyos2

# 본사(vyos1)에 vmnet5 인터페이스 추가

# 지사(vyos2)에 vmnet6 인터페이스 추가

 

vyos@vyos1# set int eth eth1 add 10.20.30.250/24

vyos@vyos2# set int eth eth1 add 10.20.31.250/24

# 본사와 지사에서 각각 내부로 규정할 대역의 인터페이스 추가.

 

10.20.30.0/24 대역에 서버를 한대 두고(wp) IP를 10.20.30.80/24로 구성

 

10.20.31.0/24 대역에 서버를 한대 두고(dbdbd) IP를 10.20.31.33/24로 구성

# 테스트 용도로 사용할 서버를 각 대역에 한 대씩 두자

 

VPN 구성하면 가끔 제대로 했는데도 안되는 경우가 있습니다. 그런 경우에는 지웠다가 다시 하시면 됩니다.

 

<head>

ESP = 무결성, 암호화/ VPN 트래픽을 암호화하고 무결성을 보장하는 프로토콜임

vyos@vyos1# set vpn ipsec esp-group head-esp compression disable 

# 무결성 확인 및 암호화 방식은 esp로 할 것이며 해당 설정의 이름은 head-esp

  • VPN 패킷에 대한 데이터 압축을 비활성화함
  • 일반적으로 성능 및 보안상 비활성화하는 것이 좋음.
  • IPsec(Internet Protocol Security)은 네트워크 계층에서 데이터를 암호화하고 보호하는 프로토콜

 

vyos@vyos1# set vpn ipsec esp-group head-esp lifetime 1800

# esp 정책을 유지할 기간은 30분이다.(1800)

 

vyos@vyos1# set vpn ipsec esp-group head-esp mode tunnel

# 터널 모드를 사용하여 두 네트워크 간 IP 패킷을 암호화

  • 터널 모드는 VPN을 통해 전체 패킷을 보호.
  • 일반적으로 Site-to-Site VPN에서 사용됨.

vyos@vyos1# set vpn ipsec esp-group head-esp pfs enable

# pfs = perfect key exchange 방식

    • PFS는 매번 다른 키를 생성하여 보안을 강화하는 방식.
    • 해킹 시 과거 트래픽 복호화 방지. 

vyos@vyos1# set vpn ipsec esp-group head-esp proposal 1 encryption aes256

# 암호화는 aes256을 사용. vpn을 구성할 상대와 맞춰줘야 한다.

AES-256: 강력한 암호화 알고리즘.

 

vyos@vyos1# set vpn ipsec esp-group head-esp proposal 1 hash sha256

# 해쉬함수 = 무결성 검증 = 원본 데이터 복원이 불가능하지만, 적어도 변조가 되지 않았다는 사실을 알 수 있음.

SHA-256: 데이터 변조 방지 무결성 검증.


IKE = 터널링 구성/ VPN 연결을 설정하는 프로토콜

 

vyos@vyos1# set vpn ipsec ike-group head-ike ikev2-reauth no

# ike(Internet Key Exchange) 중에 version2가 아니라

 

vyos@vyos1# set vpn ipsec ike-group head-ike key-exchange ikev1

# version 1 로 하겠음.

 

vyos@vyos1# set vpn ipsec ike-group head-ike lifetime 1800

# 정책 유지 시간 30분

 

vyos@vyos1# set vpn ipsec ike-group head-ike proposal 1 encryption aes256

# 암호화 aes256

 

vyos@vyos1# set vpn ipsec ike-group head-ike proposal 1 hash sha256

# 무결성 검증 sha256

 

vyos@vyos1# set vpn ipsec ipsec-interfaces int eth0

# vpn을 연결한 외부 인터페이스

  •  VPN 트래픽을 처리할 네트워크 인터페이스 지정 (eth0)

Site-to-Site VPN 피어(상대방) 설정

vyos@vyos1# set vpn ipsec site-to-site peer 211.183.3.20 authentication mode pre-shared-secret

# 인증 방식은 사전공유키(Pre-Shared Key, PSK)

 

vyos@vyos1# set vpn ipsec site-to-site peer 211.183.3.20 authentication pre-shared-secret aws8

# 사전공유키는 aws8로 하겠음.

 

vyos@vyos1# set vpn ipsec site-to-site peer 211.183.3.20 ike-group head-ike

# 아까 정의해놓은 ike-group의 이름은 head-ike

 

vyos@vyos1# set vpn ipsec site-to-site peer 211.183.3.20 local-address 211.183.3.10

# vpn을 구성할 나의 외부 ip는 211.183.3.10


터널 설정

vyos@vyos1# set vpn ipsec site-to-site peer 211.183.3.20 tunnel 0 allow-nat-networks disable

# nat된 네트워크를 허용할지 특정하지 않겠음. = 모든 주소 변환된 트래픽을 허용하겠음. = nat-traversal 같은 기능.

 

vyos@vyos1# set vpn ipsec site-to-site peer 211.183.3.20 tunnel 0 esp-group head-esp

# tunnel 0에서 사용할 esp-group은 아까 구성해 놓은 head-esp

 

vyos@vyos1# set vpn ipsec site-to-site peer 211.183.3.20 tunnel 0 local prefix 10.20.30.0/24

# vpn을 구성할 나의 내부 네트워크는 10.20.30.0/24

 

vyos@vyos1# set vpn ipsec site-to-site peer 211.183.3.20 tunnel 0 remote prefix 10.20.31.0/24

# vpn을 구성할 상대 내부 네트워크는 10.20.30.0/24

 

vyos@vyos1# run sh vpn ipsec sa

# vpn 구성 확인.

<branch>

branch-esp

branch-ike

 

vyos@vyos2# set vpn ipsec esp-group branch-esp compression disable

vyos@vyos2# set vpn ipsec esp-group branch-esp lifetime 1800

vyos@vyos2# set vpn ipsec esp-group branch-esp mode tunnel  

vyos@vyos2# set vpn ipsec esp-group branch-esp pfs enable 

vyos@vyos2# set vpn ipsec esp-group branch-esp proposal 1 encryption aes256

vyos@vyos2# set vpn ipsec esp-group branch-esp proposal 1 hash sha256

 

vyos@vyos2# set vpn ipsec ike-group branch-ike lifetime 1800

vyos@vyos2# set vpn ipsec ike-group branch-ike proposal 1 encryption aes256

vyos@vyos2# set vpn ipsec ike-group branch-ike proposal 1 hash sha256

vyos@vyos2# set vpn ipsec ike-group branch-ike ikev2-reauth no

vyos@vyos2# set vpn ipsec ike-group branch-ike key-exchange ikev1

 

vyos@vyos2# set vpn ipsec site-to-site peer 211.183.3.10 local-address 211.183.3.20

vyos@vyos2# set vpn ipsec site-to-site peer 211.183.3.10 tunnel 0 allow-nat-networks disable

 

vyos@vyos2# set vpn ipsec site-to-site peer 211.183.3.10 tunnel 0 esp-group branch-esp

vyos@vyos2# set vpn ipsec site-to-site peer 211.183.3.10 tunnel 0 local prefix 10.20.31.0/24

vyos@vyos2# set vpn ipsec site-to-site peer 211.183.3.10 tunnel 0 remote prefix 10.20.30.0/24



vyos@vyos2# set vpn ipsec site-to-site peer 211.183.3.10 authentication mode pre-shared-secret

vyos@vyos2# set vpn ipsec site-to-site peer 211.183.3.10 authentication pre-shared-secret aws8

 

vyos@vyos2# set vpn ipsec site-to-site peer 211.183.3.10 ike-group branch-ike

vyos@vyos2# set vpn ipsec ipsec-interfaces int eth0

- 양쪽 다 해서 "up"된 걸 확인할 수 있음

 

터널링이 된 걸 확인할 수 있음

- 통신이 잘 되는 것을 확인할 수 있음.

 

자율과제)
나는 wp서버가 외부(8.8.8.8)로 통신이 됐으면 좋겠다. 그리하여 PAT를 구성했다. 하지만 PAT후에 외부로는 통신이 되는데 vpn을 구성한 dbdbd와는 통신이 안된다. PAT 해제 후에는 다시 dbdbd와 통신이 잘 된다.
- 왜그럴까?
- 해결하려면 어떻게 해야 할까?

정리)
1. wp 서버(WP) → 외부 인터넷(8.8.8.8) 통신을 허용하려고 PAT(포트 주소 변환) 적용
2. PAT 적용 후:
- WP 서버 → 외부 인터넷(8.8.8.8) ✅ (통신 가능)
- WP 서버 → VPN을 통해 연결된 dbdbd ❌ (통신 불가능)
3. PAT 해제 후:
- WP 서버 → VPN을 통해 연결된 dbdbd ✅ (통신 가능)

# 통신을 하면, 두 개의 케이스가 존재

 

1. 실제외부와 통신하는 경우

2. 원래는 외부에 있지만, 논리적으로는 내 옆에 있는 것처럼 여겨지는 dbdb와 통신.

 

=> 실질적으로 둘 다 ‘외부’ 통신이기 때문에 PAT가 발생한다. 근데 논리적으로 dbdb는 나와 같은 내부네트워크에 있는 것처럼 여겨지기 때문에 이 트래픽은 PAT가 되면 안 됨

 

PAT 정책

1. 목적지가 10.20.31.0/24인 경우에는 PAT을 안 함.

2. 그 이외에는 PAT가 되게 함.

# 두 트래픽이 전부 PAT가 되어버려서, 10.20.31.33과는 통신이 안 되는 상황

 

10.20.31.0/24와 통신을 할 때는 PAT가 안되게 하면 될 것 같음.

 

PAT 정책

1. 목적지가 10.20.31.0/24인 경우에는 PAT를 안 하겠음

=> 2번보다 따른 룰로 PAT를 제외시키는 정책을 하나 더 추가.

 

vyos@vyos1# set nat source rule 9 destination address 10.20.31.0/24

vyos@vyos1# set nat source rule 9 source address 10.20.30.0/24     

vyos@vyos1# set nat source rule 9 outbound-interface eth0     

vyos@vyos1# set nat source rule 9 exclude

vyos@vyos1# commit

 

2. 그 이외에는 PAT가 되게 하겠음

=> VyOS의 일반적인 PAT 설정

# 외부 및 remote site와 통신이 잘 됨

오류/ 해결

- 비슷한 파일을 하나 잘못 만들었음 허허

- 그 파일 지워주니까 restart 잘 됨

728x90