[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)
  • 문제 증상:
    • 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)

  1. OpenVPN 서버 구성
    • OpenVPN Access Server 설치 및 구성
    • GCP 인스턴스에 클라이언트로 연결 성공 (tun0, 172.27.236.2 IP 확인)
    • ip route add, iptables -t nat 등을 통해 라우팅/마스커레이드 시도
  2. 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 에서 해당 규칙 확인되었지만 패킷 카운트 증가 없음
  3. 라우팅 설정
    • AWS Spring Boot 인스턴스에서 ip route add 10.178.0.0/16 via 172.31.100.96 시도 → “invalid gateway” 오류 발생
    • 이유: 동일 서브넷 내에 있는 것이 아니므로 Linux 라우팅 계층에서 거부
  4. FastAPI 포트 및 방화벽 확인
    • GCP 방화벽 규칙에서 8000/tcp Ingress 허용 (allow-fastapi-8000)
    • targetTags 설정도 적용됨
  5. 디버깅 툴 활용
    • tcpdump -i tun0 port 8000 (GCP)
    • tcpdump -i as0t3 port 8000 (AWS) → 트래픽 수신 안 됨
  6. 결론
    • 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