Debian 및 Ubuntu에서 Strongswan을 사용한 IPsec 기반 VPN 설정하는 방법

strongSwan은 리눅스, 프리베이스, OS X, 윈도우, 안드로이드, iOS에서 실행되는 오픈 소스, 크로스 플랫폼, 전면적이고 널리 사용되는 IPsec 기반 VPN (가상 사설망) 구현입니다. 주로 IKE(Internet Key Exchange) 프로토콜(IKEv1IKEv2)을 지원하는 키잉 데몬으로 두 피어 간의 보안 동의어(SA)를 설정합니다.

이 문서에서는 우분투데비안 서버에서 strongSwan을 사용하여 사이트 간 IPSec VPN 게이트웨이를 설정하는 방법을 설명합니다. 사이트 간이란 각 보안 게이트웨이 뒤에 서브넷이 있음을 의미합니다. 또한 피어는 사전 공유 키(PSK)를 사용하여 서로를 인증합니다.

테스트 환경

실제 세계의 IP로 교체하여 환경을 구성하십시오.

사이트 1 게이트웨이 (tecmint-devgateway)

OS 1: Debian or Ubuntu
Public IP: 10.20.20.1
Private IP: 192.168.0.101/24
Private Subnet: 192.168.0.0/24

사이트 2 게이트웨이 (tecmint-prodgateway)

OS 2: Debian or Ubuntu
Public IP:  10.20.20.3
Private IP: 10.0.2.15/24
Private Subnet: 10.0.2.0/24

1단계: 커널 패킷 전달 활성화

1. 먼저 커널을 구성하여 패킷 전달을 활성화하고 /etc/sysctl.conf 구성 파일에 적절한 시스템 변수를 추가해야 합니다. 두 보안 게이트웨이 모두.

$ sudo vim /etc/sysctl.conf

다음 줄을 찾아 값을 다음과 같이 설정하고 해제하십시오(파일의 주석을 읽어 추가 정보를 얻으십시오).

net.ipv4.ip_forward = 1 
net.ipv6.conf.all.forwarding = 1 
net.ipv4.conf.all.accept_redirects = 0 
net.ipv4.conf.all.send_redirects = 0 

다음으로, 다음 명령을 실행하여 새 설정을 로드합니다.

$ sudo sysctl -p
Load Sysctl Kernel Settings

3. UFW 방화벽 서비스가 활성화된 경우, 보안 게이트웨이에서 필터 규칙 바로 전에 다음 규칙을 /etc/ufw/before.rules 구성 파일에 추가해야 합니다.

사이트 1 게이트웨이 (tecmint-devgateway)

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.0.2.0/24  -d 192.168.0.0/24 -j MASQUERADE
COMMIT

사이트 2 게이트웨이 (tecmint-prodgateway)

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING  -s 192.168.0.0/24 -d 10.0.2.0/24 -j MASQUERADE
COMMIT

4. 방화벽 규칙을 추가한 후, 다음과 같이 UFW를 다시 시작하여 새 변경 사항을 적용합니다.

$ sudo ufw disable 
$ sudo ufw enable

단계 2: Debian 및 Ubuntu에 strongSwan 설치

5. 보안 게이트웨이에서 패키지 캐시를 업데이트하고 strongswan 패키지를 APT 패키지 관리자를 사용하여 설치합니다.

$ sudo apt update
$ sudo apt install strongswan 

6. 설치가 완료되면 설치 스크립트가 strongswan 서비스를 시작하고 시스템 부팅 시 자동으로 시작되도록 설정합니다. 다음 명령을 사용하여 상태를 확인하고 활성화되었는지 확인할 수 있습니다.

$ sudo systemctl status strongswan.service
$ sudo systemctl is-enabled strongswan.service

단계 3: 보안 게이트웨이 구성

7. 다음으로, /etc/ipsec.conf 구성 파일을 사용하여 보안 게이트웨이를 구성해야 합니다.

사이트 1 게이트웨이 (tecmint-devgateway)

$ sudo cp /etc/ipsec.conf /etc/ipsec.conf.orig
$ sudo nano /etc/ipsec.conf 

다음 구성을 파일에 복사하여 붙여넣으십시오.

config setup
        charondebug="all"
        uniqueids=yes
conn devgateway-to-prodgateway
        type=tunnel
        auto=start
        keyexchange=ikev2
        authby=secret
        left=10.20.20.1
        leftsubnet=192.168.0.101/24
        right=10.20.20.3
        rightsubnet=10.0.2.15/24
        ike=aes256-sha1-modp1024!
        esp=aes256-sha1!
        aggressive=no
        keyingtries=%forever
        ikelifetime=28800s
        lifetime=3600s
        dpddelay=30s
        dpdtimeout=120s
        dpdaction=restart

사이트 2 게이트웨이 (tecmint-prodgateway)

$ sudo cp /etc/ipsec.conf /etc/ipsec.conf.orig
$ sudo nano /etc/ipsec.conf 

다음 구성을 파일에 복사하여 붙여넣으십시오.

config setup
        charondebug="all"
        uniqueids=yes
conn prodgateway-to-devgateway
        type=tunnel
        auto=start
        keyexchange=ikev2
        authby=secret
        left=10.20.20.3
        leftsubnet=10.0.2.15/24
        right=10.20.20.1
        rightsubnet=192.168.0.101/24 
        ike=aes256-sha1-modp1024!
        esp=aes256-sha1!
        aggressive=no
        keyingtries=%forever
        ikelifetime=28800s
        lifetime=3600s
        dpddelay=30s
        dpdtimeout=120s
        dpdaction=restart

각 구성 매개변수의 의미는 다음과 같습니다:

  • config setup – 모든 연결에 적용되는 IPSec에 대한 일반 구성 정보를 지정합니다.
  • charondebug – Charon 디버깅 출력을 얼마나 기록할지 정의합니다.
  • uniqueids – 특정 참가자 ID를 고유하게 유지해야 하는지 여부를 지정합니다.
  • conn prodgateway-to-devgateway – 연결 이름을 정의합니다.
  • type – 연결 유형을 정의합니다.
  • auto – IPSec를 시작하거나 다시 시작할 때 연결을 처리하는 방법을 지정합니다.
  • keyexchange – 사용할 IKE 프로토콜 버전을 정의합니다.
  • authby – 피어가 서로 인증하는 방법을 정의합니다.
  • left – 왼쪽 참가자의 공용 네트워크 인터페이스의 IP 주소를 정의합니다.
  • leftsubnet – 왼쪽 참가자 뒤의 사설 서브넷을 나타냅니다.
  • right – 오른쪽 참가자의 공용 네트워크 인터페이스의 IP 주소를 지정합니다.
  • rightsubnet – 왼쪽 참가자 뒤의 사설 서브넷을 나타냅니다.
  • ike – 사용할 IKE/ISAKMP SA 암호화/인증 알고리즘 목록을 정의합니다. 쉼표로 구분된 목록을 추가할 수 있습니다.
  • esp – 연결에 사용할 ESP 암호화/인증 알고리즘 목록을 정의합니다. 쉼표로 구분된 목록을 추가할 수 있습니다.
  • aggressive – 공격적 모드 또는 주요 모드를 사용할지를 나타냅니다.
  • keyingtries – 연결 협상을 시도해야 하는 횟수를 나타냅니다.
  • ikelifetime – 연결의 키 채널이 재협상되기 전에 유지되어야 하는 기간을 나타냅니다.
  • lifetime – 성공적인 협상부터 만료까지의 특정 연결 인스턴스가 지속되어야 하는 기간을 정의합니다.
  • dpddelay – R_U_THERE 메시지/정보 교환을 피어로 보내는 시간 간격을 지정합니다.
  • dpdtimeout – 비활동 시 피어로의 모든 연결이 삭제되는 타임아웃 간격을 지정합니다.
  • dpdaction – 연결을 관리하기 위해 Dead Peer Detection(DPD) 프로토콜을 어떻게 사용할지를 정의합니다.

위의 구성 매개변수에 대한 자세한 정보는 명령을 실행하여 ipsec.conf 매뉴얼 페이지를 읽어보세요.

$ man ipsec.conf

단계 4: 피어 간 인증을 위한 PSK 구성

8. 두 보안 게이트웨이를 구성한 후, 다음 명령을 사용하여 피어가 사용할 안전한 PSK를 생성하세요.

$ head -c 24 /dev/urandom | base64
Generate PSK Key

9. 그 다음, 양쪽 게이트웨이의 PSK/etc/ipsec.secrets 파일에 추가하십시오.

$ sudo vim /etc/ipsec.secrets

다음 줄을 복사하여 붙여넣으십시오.

------- Site 1 Gateway (tecmint-devgateway) ------- 

10.20.20.1 10.20.20.3 : PSK "qLGLTVQOfqvGLsWP75FEtLGtwN3Hu0ku6C5HItKo6ac="

------- Site 2 Gateway (tecmint-prodgateway) -------

10.20.20.3  10.20.20.1 : PSK "qLGLTVQOfqvGLsWP75FEtLGtwN3Hu0ku6C5HItKo6ac="

10. IPSec 프로그램을 다시 시작하고 연결 상태를 확인하십시오.

$ sudo ipsec restart
$ sudo ipsec status
View IPSec Connection Status

11. 마지막으로, 양쪽 보안 게이트웨이에서 사설 서브넷에 액세스할 수 있는지 ping 명령을 실행하여 확인하십시오.

$ ping 192.168.0.101
$ ping 10.0.2.15
Verify Site-to-Site VPN Setup

12. 또한, 아래와 같이 IPSec를 중지하고 시작할 수 있습니다.

$ sudo ipsec stop
$ sudo ipsec start

13. 수동으로 연결을 설정하고 IPSec 명령에 대해 더 알아보려면 IPSec 도움말 페이지를 참조하십시오.

$ ipsec --help

이상입니다! 이 문서에서는 strongSwan을 사용하여 UbuntuDebian 서버에서 사이트 간 IPSec VPN을 설정하는 방법을 설명했습니다. 두 보안 게이트웨이가 PSK를 사용하여 서로 인증하도록 구성되었습니다. 궁금한 점이나 공유하고 싶은 생각이 있으면 아래 피드백 양식을 통해 저희에게 연락해 주십시오.

Source:
https://www.tecmint.com/setup-ipsec-vpn-with-strongswan-on-debian-ubuntu/