[cloud ‐ TroubleShooting] OpenVPN 멀티클라우드 양방향 통신 시도 - 100-hours-a-week/5-yeosa-wiki GitHub Wiki
문제 요약 (Issue Summary)
- 문제 발생 일시: 2025-05-01
- 문제 발생 위치:
- AWS: Spring Boot 서버 (프라이빗 서브넷, 예:
10.0.2.165
) - GCP: FastAPI 서버 (프라이빗 서브넷, 예:
10.178.0.2
) - OpenVPN Server: AWS Public Subnet (예:
172.31.100.96
)
- AWS: Spring Boot 서버 (프라이빗 서브넷, 예:
- 문제 증상:
- GCP → AWS 방향의 ping 및 API 요청 정상 동작
- AWS → GCP 방향의 ping 및 curl 요청이 실패 (Connection timed out)
현상 (Observed Symptoms)
- GCP 측 FastAPI 서버는
tcp 8000
포트에서 정상적으로 수신 대기 상태였음 (ss -tuln
) - GCP VM 내부에서는
curl http://localhost:8000/analyze
요청에 정상 응답함 - AWS의 Spring Boot 서버에서는
curl http://10.178.0.2:8000/analyze
요청이 Timeout 발생 - OpenVPN 서버 기준:
ip_forward = 1
설정됨iptables MASQUERADE
설정 시도했으나 일부 경로에서 적용되지 않음ip route
에서 GCP 대역으로 가는 라우트는 OpenVPN에 설정됨
tcpdump
로 트래픽 확인 시, GCP → AWS 트래픽만 포착되고 반대 방향은 확인되지 않음
기대 결과 (Expected Behavior)
- AWS의 Spring Boot 서버가 GCP의 FastAPI 서버 (
10.178.0.2:8000
)에 POST 요청을 보내고, JSON 응답을 수신함 - GCP → AWS 뿐 아니라 AWS → GCP도 양방향 통신이 NAT 및 라우팅을 통해 원활히 연결됨
시도한 해결 방법 (What I Tried)
- OpenVPN 서버 구성
- OpenVPN Access Server 설치 및 구성
- GCP 인스턴스에 클라이언트로 연결 성공 (
tun0
,172.27.236.2
IP 확인) ip route add
,iptables -t nat
등을 통해 라우팅/마스커레이드 시도
- iptables 설정
iptables -t nat -A POSTROUTING -s 172.31.0.0/16 -d 10.178.0.0/16 -o as0t3 -j MASQUERADE
수행iptables -L -t nat -n -v
에서 해당 규칙 확인되었지만 패킷 카운트 증가 없음
- 라우팅 설정
- AWS Spring Boot 인스턴스에서
ip route add 10.178.0.0/16 via 172.31.100.96
시도 → “invalid gateway” 오류 발생 - 이유: 동일 서브넷 내에 있는 것이 아니므로 Linux 라우팅 계층에서 거부
- AWS Spring Boot 인스턴스에서
- FastAPI 포트 및 방화벽 확인
- GCP 방화벽 규칙에서
8000/tcp
Ingress 허용 (allow-fastapi-8000
) targetTags
설정도 적용됨
- GCP 방화벽 규칙에서
- 디버깅 툴 활용
tcpdump -i tun0 port 8000
(GCP)tcpdump -i as0t3 port 8000
(AWS) → 트래픽 수신 안 됨
- 결론
- GCP 측 VPN 클라이언트에서는 AWS → GCP 요청의 응답 트래픽이 정상적으로 돌아가지 않음
- 이는 OpenVPN 클라이언트(GCP)가 Default Gateway 역할을 하지 않고 있어 GCP가 받은 패킷을 AWS로 다시 라우팅하지 못함
- 결국 양방향 통신 실패
관련 로그 / 명령어 결과 (Logs / Outputs)
-
Spring Boot 로그:
ResourceAccessException: I/O error on POST request for "http://10.178.0.2:8000/analyze": Connection timed out
-
OpenVPN 서버:
sudo iptables -t nat -L -n -v sudo ip route
-
GCP 서버:
ip a # tun0 존재, 172.27.236.2 할당됨 ss -tuln | grep 8000 # 수신 대기 확인
-
AWS 서버:
curl http://10.178.0.2:8000/analyze # timeout