VPN 분할 터널에 대해 배우면서 VPN환경 구축 해 보기
시작하며
최근 사내 스터디 모임을 통해 ‘VPN환경 구축과 스크립트 터널 고안’에 대해 배워 볼 기회가 있었습니다. 배운 내용을 토대로 동작 검증을 포함해 클라이언트 VPN환경을 구축 한 내용을 공유 해 보도록 하겠습니다.
대상자
- AWS를 운용 중인 분
- 간단히 VPN 환경을 구축 하고 싶은 분
- 쾌적한 VPN 환경을 원하시는 분
개요
(★)이 붙은 항목은 핸즈온 항목 입니다.
- 분할 터널에 대해
- Client VPN에 대해
- 이번 핸즈온 구성
- 핸즈온을 위한 준비(★)
- 증명서 생성(★)
- VPN엔드포인트 생성 (★)
- VPN접속 준비 (★)
- 검증(★)
사전 준비
- AWS 계정 생성
- AdministratorAccess를 부여한 IAM유저의 생성
- 기존 VPN 접속 끊기
1. 분할 터널에 대해
분할 터널 설정을 하지 않은 경우
- 대외비 데이터가 있거나 외부 공개 금지 서버에 액세스 하는 경우, 인터넷 경유로 액세스 하지 못하게 하는 회사가 많을 것 같습니다. 그러한 경우, 폐쇄형 네트워크에 VPN을 사용하여 접속 하는 방법이 있습니다.
- 예를 들어, 원격 근무자는 개인 PC에 클라이언트 VPN 소프트웨어를 다운로드 하여 사내 네트워크에 VPN으로 접속 합니다. VPN을 연결 하지 않은 경우, 단말의 외부 통신은 인터넷에 접속합니다. VPN 접속을 하면 VPN을 연결한 곳에 접속을 진행 하게 됩니다.
- VPN에 접속한 상태라면 인터넷 접속을 진행 해도 Web검색이 되지 않습니다. PC는 사내 네트워크를 경유하여 외부에 접속해야 합니다. 이러한 VPN 접속방식을 ‘풀 터널’이라고 합니다.
분할 터널 설정을 한 경우
- 통신을 나눌 수 있습니다. 사내 서버에 액세스 하는 경우는 VPN을 경유하지만, 그 이외의 통신은 인터넷 접속이 불가 합니다.
- 예를 들어 VPN을 끌어온 상태로 PC에서 Web검색하는 경우는 굳이 사내 네트워크에 접속하지 않아도 되기 때문에 VPN경유가 아닌 인터넷에 접속 합니다.
- AWS Client VPN에서는 분할 터널을 유효/무효로 할지 간단하게 설정 할 수 있습니다.
- VPN은 일반적으로 대역이 넓지 않기 때문에 늘어난 원격 근무로 모두 동시에 같은 VPN에 접속 하려고 하면 VPN용량이 부족해집니다.
- 분할 터널을 활용하면 가령 원격 근무자가 한번에 Web사이트를 열람 한다고 해도 각자 인터넷 경유로 접속 하기 때문에 VPN 용량 부족은 피할 수 있습니다.
2. Client VPN에 대해
AWS Client VPN은 클라이언트 베이스의 매니지드 VPN 서비스 입니다.
클라이언트 VPN을 사용하면 OpenVPN 기준의 VPN클라이언트를 사용하여 어디서라도 리소스에 액세스 할 수 있습니다.
공식 문서에 따르면 설정 방법은 하기와 같습니다.
- 서버 및 클라이언트 증명서와 키 생성
- 클라이언트 VPN 엔드포인트 생성
- 클라이언트 VPN 접속 유효화
- 클라이언트 네트워크에 액세스 승인
- 클라이언트 VPN 엔드포인트 설정 파일 다운로드
- 클라이언트 VPN 엔드포인트에 접속
3. 이번 핸즈온 구성
먼저 이번 핸즈온에서 진행할 구성을 소개합니다.
- VPC (172.20.0.0/16)
- Public Subnet (172.20.1.0/24), Private Subnet (172.20.2.0/24)
- VPN 엔드포인트 생성
- Public Subnet 내 NAT Gateway 배치
- Private Subnet 내 Windows Server 1대 생성
진행 하고자하는 것은 하기와 같습니다.
- 자신의 PC에서 VPN을 연결한 상태로 Private Subnet 내에 있는 Windows Server에 RDP 접속 진행
- Windows Server에서 인터넷 접속 후 Web 검색 진행
- VPN을 계속 접속한 상태로 자신의 PC에서 Web 검색 진행
시큐어한 환경으로 Windows Server를 조작하면서 자신의 PC에서도 쾌적하게 Web검색을 할 수 있는 환경을 구축 합니다.
4. 핸즈온을 위한 준비
VPC생성
IPv4 CIDR: 172.20.0.0/16
Public Subnet/Private Subnet
- Public Subnet
VPC ID : 조금 전 생성한 VPC를 선택
AZ : ap-northeast-1a
IPv4 CIDR : 172.20.1.0/24
- Private Subnet
VPC ID : 조금 전 생성한 VPC를 선택
AZ : ap-northeast-1a
IPv4 CIDR : 172.20.2.0/24
인터넷 게이트웨이 생성
인터넷 게이트웨이를 생성 후 작업에서 ‘VPC에 연결’을 선택하여 VPC에 연결 합니다.
NAT Gateway 생성
- 서브넷 : 생성한 Public Subnet선택
- 접속 타입 : 퍼블릭
- Elastic IP 할당 ID : Elastic IP를 할당
루트 테이블 설정
- Public Subnet 루트 테이블에 인터넷 게이트웨이 루트 추가
송신처 : 0.0.0.0/0,
- Private Subnet의 루트 테이블에 NAT Gateway 루트 추가
Windows Server 생성
- AMI : Windows_Server-2019-English-Full-Base
- 인스턴스 타입 : t2.micro
- 키 페어 : 새로운 키 페어 생성
- VPC : 생성한 VPC 선택
- 서브넷 : 생성한 Private Subnet 선택
- 퍼블릭 IP 자동 할당 : 무효
- 보안 그룹 : 인바운드 통신 (RDP, 소스 0.0.0.0/0)
- 스토리지 : 30GB, gp3
상기 설정으로 생성 합니다.
5. 증명서 생성
OpenSSL 툴 다운로드
- CloudShell로 커맨드 실행
CloudShell 화면으로 이동 합니다.
$sudo yum -y install openssl
OpenSSL을 인스톨 합니다.
상호 인증의 순서
- AWS문서에 따라 증명서 / 시크릿 키를 생성 합니다. Client VPN 에서 상호 인증 하기 위해 인증 기관을 세워 인증서를 발행 합니다.
이번에는 easy-rsa에 의한 본인 서명 증명서 생성을 진행 합니다.
#easy-rsa인스톨
#캘린더 디렉토리에easy-rsa디렉토리가 생성되어 관련 파일이 배치 됨
$git clone https://github.com/OpenVPN/easy-rsa.git
$cd easy-rsa/easyrsa3#pki를 초기화. 디렉토리 아래에 pki디렉토리가 생성 됨
$./easyrsa init-pki#인증기관 구축. pki디렉토리 아래에 ca.crt파일 (인증 기관의 루트 증명서)가 생성 됨
$./easyrsa build-ca nopass#서버 증명서 발행
#pki/issued아래 및 pki/private아래에 서버 증명서와 시크릿 키가 생성 됨$./easyrsa build-server-full server nopass#클라이언트 증명서 발행
#pki/issued아래 및 pki/private아래에 클라이언트 증명서와 시크릿 키가 생성 됨$./easyrsa build-client-full client1.domain.tld nopass#디렉토리를 생성하여 생성한 파일을 디렉토리에 복사
$mkdir ~/custom_folder/
$cp pki/ca.crt ~/custom_folder/
$cp pki/issued/server.crt ~/custom_folder/
$cp pki/private/server.key ~/custom_folder/
$cp pki/issued/client1.domain.tld.crt ~/custom_folder
$cp pki/private/client1.domain.tld.key ~/custom_folder/
$cd ~/custom_folder/
- 증명서와 시크릿 키를 ACM에 업로드
#서버 증명서와 시크릿 키를 ACM에 업로드
$aws acm import-certificate — certificate fileb://server.crt — private-key fileb://server.key — certificate-chain fileb://ca.crt#클라이언트 증명서와 시크릿 키를 ACM에 업로드
$aws acm import-certificate — certificate fileb://client1.domain.tld.crt — private-key fileb://client1.domain.tld.key — certificate-chain fileb://ca.crt
AWS매니지먼트 콘솔에서 ACM 페이지로 이동 해 봅시다.
업로드 된 것을 알 수 있습니다.
- 클라이언트 증명서와 시크릿 키를 로컬에 복사
CloudShell 우측 상단의 ACtions ⇒ Download file
~/custom_folder/client1.domain.tld.crt
~/custom_folder/client1.domain.tld.key
파일 다운로드에는 패스가 필요합니다.
각각의 패스를 입력한 후, 파일을 다운로드 합니다.
6. VPN 엔드포인트 생성
(AWS 매니지먼트 콘솔 조작) VPC ⇒ 클라이언트 VPN 엔드포인트 ⇒ 클라이언트 VPN 엔드포인트 생성
- 클라이언트 IPV4 CIDR : 172.30.0.0/16
- 서버 증명서 ARN : 이번에 생성한 서버 증명서 선택
- 인증 옵션 : 상호 인증 사용
- 클라이언트 증명서 ARN : 이번에 생성한 클라이언트 인증서 선택
- 분할 터널을 유효로 함
분할 터널을 활성화 하는 것을 잊지 마시기 바랍니다.
상기 설정으로 VPN엔드포인트를 생성 합니다.
그 후 추가 설정을 진행 합니다.
- 클라이언트 VPN 엔드포인트 관련 탭에서 VPC와 Private Subnet 선택
- 인증 탭 ⇒ 수신 승인
인증 탭에서 수신 승인을 선택 합니다.
액세스를 유효로 하는 송신처 넷 : 0.0.0.0/0
액세스를 부여한 대상 : 모든 유저에 액세스 허가
이상으로 VPN엔드포인트의 설정을 완료 하였습니다.
클라이언트 VPN엔드포인트 생성 완료 후에 클라이언트 설정 다운로드를 실행 합니다.
7. VPN접속 준비
- 클라이언트 설정 파일 편집
조금 전 ‘클라이언트 설정 다운로드’로 로컬로 불러온 파일을 텍스트 에디터로 엽니다.
<cert>
— — -BEGIN CERTIFICATE — — -
(※기재 생략)
— — -END CERTIFICATE — — -
</cert>
<key>
— — -BEGIN PRIVATE KEY — — -
(※기재 생략)
— — -END PRIVATE KEY — — -
</key>
다음으로 5에서 다운로드 했던 client1.domain.tld.crt파일을 엽니다.
[ — — -BEGIN CERTIFICATE — — -]에서 [ — — -END CERTIFICATE — — -]까지 모두 복사 해 주세요.
복사한 정보를 <cert></cert>사이에 붙입니다.
같은 순서로 다운로드한 client1.domain.tld.key파일을 엽니다.
[ — — -BEGIN PRIVATE KEY — — -]에서 [ — — -END PRIVATE KEY — — -]까지 모두 복사 해 주세요.
복사한 정보를 <key></key>사이에 붙입니다.
최종적으로는 위와 같은 상태가 되어 있으면 됩니다.
- VPN클라이언트 소프트웨어를 다운로드
이 페이지에서 환경에 따른 소프트웨어를 다운로드 / 인스톨 해 주세요.
- VPN클라이언트 설정
VPN클라이언트를 기동하여 파일 ⇒ 프로파일 관리 ⇒ 프로파일 추가를 합니다.
표시명은 적당한 이름으로 정합니다.
VPN설정 파일은 조금 전 편집한 클라이언트 설정 파일을 선택 합니다.
여기까지의 작업으로 VPN접속 준비가 완료 되었습니다.
그러면 VPN 접속을 해 봅시다.
VPN 접속 실행 후 접속 버튼을 클릭 하면, 접속 된 것을 확인 할 수 있습니다.
VPN 연결이 확인 되면 다음 프로세스로 진행 합니다.
8. 검증
- Windows 서버 접속
(AWS 매니지먼트 콘솔 조작) EC2 서버 ⇒ 접속 ⇒ RDP접속
‘원격 데스크탑 파일 다운로드’에서 접속용 클라이언트 툴을 다운로드 합니다.
패스워드 취득에는 키 페어가 필요합니다.
접속용 클라이언트 툴에서 RDP접속을 실시 합니다.
- Windows서버에서 인터넷 접속 실행
Windows 서버에서 인터넷에 접속 해 봅시다.
문제 없이 Web검색이 가능합니다.
- 로컬 PC에서 Web 브라우저로 Web사이트를 열람 할 수 있을지 확인
VPN을 접속한 상태로 실시 합니다.
문제 없이 인터넷 통신이 가능합니다.
그럼 마지막으로 분할 터널을 무효로 하여 변화가 있는지 확인 해 보겠습니다.
- 분할 터널을 무효로 함
(AWS매니지먼트 콘솔 조작) VPC ⇒ 클라이언트 VPN 엔드포인트 ⇒ 액션 ⇒ 클라이언트 VPN엔드포인트 변경
분할 터널을 무효로 해 주세요.
VPN을 다시 붙여 로컬 PC에서 Web검색이 되도록 확인 해 주세요.
Windows Server측에서 인터넷에 접속이 되시나요?
마지막으로 시험 해 봅시다.
문제 없이 접속 하실 수 있으실 겁니다.
마지막으로
이렇게 AWS Client VPN을 알아보고 핸즈온을 통해서 사용법과 접속 검증까지 해 보았습니다.
Client VPN을 사용하면 쾌적한 VPN 환경 구축이 가능합니다.
분할 터널의 설정도 클릭 1번으로 유효화/무효화가 가능합니다.
긴 내용 읽어 주시느라 수고 하셨습니다 !
원문 게시글 : https://zenn.dev/megazone_japan/articles/0a04f5abb3d412
메가존 일본 법인 블로그에 업로드 중인 게시글로 작성자 아가(阿河)님의 동의를 얻어 번역한 게시글 입니다.