GENEVE AWS VPC 환경 구성
AWS GWLB 테스트 환경 구성 방법
구성도
- WEB-VPC : 웹서비스를 위한 가상 네트워크 그룹(virtual private clould)
- web-vpc-ingress-rtb : WEB-VPC 라우팅 테이블
- subnet-gwlb-01 : GWLBe-01 이 배치될 서브넷
- subnet-gwlb-01-rtb : subnet-gwlb-01 의 라우팅 테이블
- GWLBe-01 : GWLB의 endpoint. 여기로 오는 트래픽은 GWLB-01로 포워딩 됨
- subnet-server-01
- subnet-server-01-rtb : subnet-server-01 의 라우팅 테이블
- SERVER-01 : 웹서버
- WAF-VPC : WAF 서비스를 위한 가상 네트워크 그룹
- waf-vpc-ingress-rtb : WAF-VPC 라우팅 테이블
- subnet-waf-01-rtb :GWLB-01과 WAF-01 이 배치될 서브넷
- subnet-waf-01-rtb : subnet-waf-01 라우팅 테이블
- GWLB-01 : 게이트웨이 로드 밸런서
- GWLBe-01로부터 수신된 트래픽이 대상 그룹으로 포워딩 됨
- 대상그룹, 대상 장비 여러개 등록 가능
- WAF-01 : AIWAF
동작
- GWLB 적용 시 브라우저 <-> GWLBe <-> 웹서버로 트레픽 흐름이 변경된다.
- 기존 흐름은 브라우저 <-> 웹서버이며 라우팅 테이블 설정 변경으로 흐름을 바꾼다
- 이 때 GWLBe는 송수신 되는 트래픽을 GWLB-01 로 포워딩 하고
- GWLB-01 해당 트래픽을 GENEVE 프로토콜(UDP 6081)로 인캡슐레이션 한 뒤 등록된 대상 그룹으로 포워딩 한다.
- GENEVE 프로토콜 패킷을 수신한 WAF-01 은 GENEVE 프로토콜을 디캡슐레이션 하여 인스펙션 한 후 다시 GWLB-01 로 포워딩 한다.(GENEVE로 인캡슐레이션 후 GWLB-01 로 포워딩)
Note WAF 입장에서는 인라인(SYN TP) 로 구성된 것과 동일하게 동작한다.
환경 구성
Note 이전 작업이 진행되어야 다음 작업이 가능한 작업이 있다. 순차적으로 작업 필요(e.g. VPC 생성 이 후 VPC 서브넷 등록 가능함) 관련 설정은 AWS EC2, VPC 두 곳에서 진행된다.(설정 가능한 항목이 다름)
EC2 : https://ap-northeast-2.console.aws.amazon.com/ec2/home?region=ap-northeast-2#Instances: VPC : https://ap-northeast-2.console.aws.amazon.com/vpcconsole/home?region=ap-northeast-2#vpcs:
VPC 생성
AWS 콘솔 접속 이후 VPC 검색
Virtual Private Cloud -> VPC -> VPC 생성
Note 위 내용을 참고하여 ‘WAF-VPC’ 를 생성한다. (이름 WEB-VPC, IPv4 CIDR 192.168.0.0/24)
생성된 VPC 에서 우클릭 -> VPC 설정 편집
Note 위 내용을 참고하여 ‘WAF-VPC’ 의 설정도 동일하게 변경한다.
서브넷 생성
Virtual Private Cloud -> 서브넷 -> 서브넷 생성
WEB-VPC 서브넷
서브넷 생성 화면에서 ‘새 서브넷 추가’ 버튼으로 1개 이상의 서브넷 생성이 가능하다.
WAF-VPC 서브넷
서브넷 설정 편집
Note 위를 참고하여 ‘subnet-GWLB-01’, ‘subnet-SERVER-01’, ‘subnet-WAF-01’ 의 설정을 동일하게 변경한다
인터넷 게이트웨이 생성
Virtual Private Cloud -> 인터넷 게이트웨이 -> 인터넷 게이트웨 생성
waf-vpc-igw 도 동일하게 생성
라우팅 테이블 생성
WEB-VPC 라우팅 테이블 생성
‘subnet-gwlb-01-rtb’, ‘web-vpc-ingress-rtb’ 도 동일하게 생성
web-vpc-ingress-rtb
WEB-VPC 에 인터넷 게이트웨이를 엣지로 연결한다
엣지 연결 이후 “서브넷 연결 편집” 버튼을 눌러 생성한 subnet-SERVER-01 과 연결을 진행한다.
이후 생성되는 GWLB, WAF 또한 라우팅 설정 후 서브넷 연결을 진행해야 한다.
subnet-GWLB-01-rtb
GWLBe 가 생성되는 서브넷에는 디폴트 라우팅을 인터넷 게이트웨이로 설정한다.
**WARNING ** 왜 설정해야하는지 명확한 이유는 잘 모르겠음. 설정하지 않을 경우 WAF에서 응답을 GWLB로 보내고 나서 동작을 하지 않음 https://docs.aws.amazon.com/elasticloadbalancing/latest/gateway/getting-started.html#configure-routing 명시됨
waf-vpc-ingress-rtb
WAF-VPC 기본 라우팅 테이블에 인터넷 게이트웨이를 연결한다
WEB-VPC 는 엣지로 연결하고 WAF-VPC는 디폴트 라우팅으로 인터넷 게이트웨이를 설정하는데 어떤 차이점이 있는지 잘 모르겠다. 자동으로 생성 시 인터넷 게이트웨이는 디폴트 라우팅으로 설정한다. (시간 될 때 확인 필요)
SERVER-01 인스턴스 생성
인스턴스 -> 인스턴스 -> 인스턴스 시작
인스턴스 OS는 Nginx 또는 기타 웹 서버를 띄울 수 있는 환경이면 OS는 상관 없다.
네트워크 설정에서 ‘편집’을 눌러야 VPC 및 기타 정보를 변경할 수 있다 테스트 환경 구성이기 때문에 임시로 전체 트레픽을 허용한다
웹서버 설치
인스턴스 실행 이 후 ssh 접속하여 nginx 설치 진행한다
설치 과정은 생략한다.
WAF-01 인스턴스 생성
인스턴스 -> 인스턴스 -> 인스턴스 시작
GWLB-01 대상그룹 생성
로드 밸런싱 -> 대상 그룹 -> 대상 그룹 생성
GWLB-01 생성
로드 밸런싱 -> 로드 밸런서 -> 로드 밸런서 생성
GWLB 엔드포인트 서비스 생성
Virtual Private Cloud -> 엔드포인트 서비스 -> 엔드포인트 서비스 생성
GWLB 엔드포인트 생성
Virtual Private Cloud -> 엔드포인트 -> 엔드포인트 생성
GWLB 엔드포인트 서비스 이름을 참고하여 서비스 이름을 입력한다
라우팅 테이블 수정
Virtual Private Cloud -> 라우팅 테이블
라우팅 테이블 수정을 통해 SERVER-01 로 패킷이 전달되는 흐름을 WEB-VPC <-> GWLBe-01 <-> SERVER-01 로 변경한다.
web-vpc-ingress-rtb
subnet-server-01-rtb
테스트 방법 (tcpdump)
jumbo_frame 설정 필수
1
2
# GENEVE 프로토콜은 6081이다.
tcpdump -i <interface> udp port 6081 -nn -vv