안녕하세요 서후아빠입니다. ^_^
이번 세션은 OpenVPN을 이용하여 AWS Native Client VPN 구성하는 실습을 해보겠습니다.
개인적으로는 AWS Native Client VPN 구성보다 Market Place에서 EC2 Type으로 제공되는 3rd Party 제품이 구축, 유지보수 측면에서 더 효율적이라고 생각됩니다.
3rd Party 제품을 통한 구성은 아래 링크를 참조 바랍니다.
2022.09.20 - [Networking] - [실습] AWS Client VPN 구성하기 (OpenVPN, 구글OTP 2차 인증)-2편
구성도
Client VPN으로 접속(ex : priA-sn-c로 연결)을 하면 User Cleint가 priA-sn-c의 IP로 SNAT 처리됩니다. ① User Client에서 OpenVPN으로 Client VPN 연결을 시도합니다. ② AWS는 Client VPN 연결 요청이 오면, ACM에 등록된 인증서와 비교하여 인증처리를 합니다. ③ 인증이 완료되면 endpoint(clientVPN-ep)를 통해 IP를 부여받습니다. - VPN 터널링이 되면 Local(User Client)는 172.168.0.0/22 대역 중 하나의 IP를 부여 받음 - Local에 부여된 터널용 IP(172.168.0.0/22)는 터널 구간(IDC~AWS)구간에서만 사용 ④ User Client는 부여받은 IP로 VPN 연결되며, IDC에서 AWS로 Private 통신이 가능합니다. ⑤ cloudwatch 로그그룹에서는 Client VPN 연결에 대한 접속 로그를 기록합니다. |
사전 작업
인프라 생성 : vpc, subnet, igw, routing table, iam, ec2, CloudWatch의 로그 그룹 등은 설명 생략합니다.
2022.07.02 - [Networking] - [실습] Amazon VPC 구성요소 생성하기
1단계 : EasyRSA 설정
OpenVPN 다운로드 및 설치
설정파일 다운로드 및 C:\Program Files\OpenVPN에 압축 풀기 > C:\Program Files\OpenVPN\EasyRSA-3.0.8에 파일 생성 확인
관리자 권한으로 cmd.exe 실행
# 경로 이동
C:\Windows\System32> cd c:\Program Files\OpenVPN\EasyRSA-3.0.8
EasyRSA-Start
# 인증서 생성 (client1.domain.tld : client VPN 접속 시 계정명으로 인식)
./easyrsa init-pki
./easyrsa build-ca nopass
Common Name (eg: your user, host, or server name) [Easy-RSA CA]: 그냥 Enter
./easyrsa build-server-full server nopass
./easyrsa build-client-full client1.domain.tld nopass
exit
파일 3개 생성 확인
- C:\Program Files\OpenVPN\EasyRSA-3.0.8\pki\issued\server.crt
- C:\Program Files\OpenVPN\EasyRSA-3.0.8\pki\private\server.key
- C:\Program Files\OpenVPN\EasyRSA-3.0.8\pki\ca.crt
2단계 : AWS Certificate Manager(ACM)에서 외부 인증서 가져오기
ACM > 인증서 가져오기
구분 | Certificate body | certificate private key | Certificate chain - optional |
내용 | server.crt 내용 등록 | server.key 내용 등록 | ca.crt 내용 등록 |
3단계 : AWS Client VPN Endpoint 생성
VPC > Client VPN Endpoints > Create Client VPN Endpoint
구분 | Details | Authentication information | Connection logging | Other parameters |
내용 | Name : clientVPN-ep Client IPv4 CIDR : 172.168.0.0/22 |
Server certificate : 2단계 생성 인증서, 상호 인증 사용 Authentication options : Use mutual authentication Client certificate : 2단계 생성 인증서 |
logging : Enable CloudWatch logs log group name : clientVPN-ep-logs CloudWatch logs log stream name : none |
Enable split-tunnel : Enable |
Client IPv4 CIDR : 최소 /22 이상 Authentication information에서 Use user-based authentication : AD 인증 or SAML 연동 인증 분할 터널(Split-tunnel) - VPN 통신 : VPN 클라이언트로 연결 - 그 외 통신 : 클라이언트 Gateway로 연결 |
VPC > Client VPN Endpoints > clientVPN-ep > Target network associations (tab) > Associate target network
구분 | VPC | Subnet | remark |
내용 | vpcA | priA-sn-c | 1개의 subnet만 선택 가능 |
연결되는 서브넷은 최소 /27 이상만 등록 가능합니다. User Client가 VPN 연결을 하면 여기에 등록된 Subnet에서 하나의 IP를 할당받고 그 IP를 이용하여 사내 통신합니다. |
VPC > Client VPN Endpoints > clientVPN-ep > Authorization rules (tab) > Add authorization rule
구분 | Destination network to enable access | Grant access to | remark |
내용 | 0.0.0.0/0 | Allow access to all users (or Allow access to users in a specific access group) |
- |
User Clinet가 접근할 때 통제에 대한 항목입니다. - 0.0.0.0/0은 User Client의 모든 출발지 IP를 허용한다는 의미입니다. - 모든 사용자를 허용할 것이지, 특정 그룹만 허용할 것인지 지정하는 부분입니다. (기본적으로 모두 허용 선택) |
VPC > Client VPN Endpoints > clientVPN-ep > State 컬럼 : “Active” 확인 (5분 이상 소요)
VPC > Client VPN Endpoints > clientVPN-ep > Route table (tab)
구분 | Route destination | Subnet ID for target network association | remark |
내용 | 20.0.0.0/16 | priA-sn-c | 1개의 subnet만 선택 가능 |
현재 구성도는 vpcA(10.0.0.0/16) 대역만 존재하는데요. 만약 vpcA와 Peering된 vpcB(20.0.0.0/16)가 존재한다면 vpcB까지 통신을 해야하는데요. 이때 Route table에 경로 설정을 하게되면 VPN 연결 시 vpcB까지 Private 통신이 가능해집니다. |
4단계 : 클라이언트 구성 및 VPN 연결
VPC > Client VPN Endpoints > clientVPN-ep > Dlownload client configuration 클릭하여 설정값 다운로드
다운로드한 downloaded-client-config.ovpn을 메모장 열어서 아래처럼 내용 추가
</ca>
<cert>
-----BEGIN CERTIFICATE-----
이 부분은 “C:\Program Files\OpenVPN\EasyRSA-3.0.8\pki\issued\client1.domain.tld.crt” 해시값만 입력
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
이 부분은 “C:\Program Files\OpenVPN\EasyRSA-3.0.8\pki\private\client1.domain.tld.key” 해시값만 입력
-----END PRIVATE KEY-----
</key>
바탕화면 OpenVPN GUI 아이콘 클릭하여 openvpn 실행
바탕화면 우측 하단 작업표시줄 > openvpn 우클릭 > Import > 파일 불러오기 > downloaded-client-config.ovpn 열기
바탕화면 우측 하단 작업표시줄 > openvpn 우클릭 > 연결
로컬 User Client에서 priA-ec2-1 or priA-ec2-2를 사설 IP로 PING or SSH 통신 테스트
5단계 : Client VPN 접속 로깅 확인
VPC > Client VPN endpoints > clientVPN-ep > Connectoins (tab)
CloudWatch > Log groups > clientVPN-ep-logs > cvpn-endpoint****
{ "connection-log-type": "connection-attempt", "connection-attempt-status": "successful", "connection-attempt-failure-reason": "NA", "connection-id": "cvpn-connection-010863c21ca7766b4", "client-vpn-endpoint-id": "cvpn-endpoint-0e3889f1deb117683", "transport-protocol": "udp", "connection-start-time": "2022-03-06 04:26:40", "connection-last-update-time": "2022-03-06 04:26:40", "client-ip": "172.168.0.34", "common-name": "client1.domain.tld", "device-type": "win", "device-ip": "106.250.166.66", "port": "55985", "ingress-bytes": "0", "egress-bytes": "0", "ingress-packets": "0", "egress-packets": "0", "connection-end-time": "NA", "connection-duration-seconds": "0"}
ETC
Client VPN Endpoint가 1개이지만 기본적으로 2개의 터널링(EIP 생성)으로 연결됩니다.
연결 시 ID+PW를 구성할 경우 Market Place에서 "OpenVPN Access Server"를 구독하여 서버를 구성해야합니다.
'Networking' 카테고리의 다른 글
[실습] Amazon GWLB를 사용하여 Fortinet 방화벽 구성하기 (TGW, Split)-2편 (0) | 2022.07.03 |
---|---|
[실습] Amazon GWLB를 사용하여 Fortinet 방화벽 구성하기 (PrivateLink, Auto Scaling)-1편 (1) | 2022.07.03 |
[이론] Amazon ELB 기본 개념 (0) | 2022.07.02 |
[실습] Amazon VPC 구성요소 생성하기 (0) | 2022.07.02 |
[이론] Amazon VPC 구성요소 기본 개념 (0) | 2022.07.01 |