클라우드 shared dev 영역 연결오류 트라블슈팅 - 100-hours-a-week/16-Hot6-wiki GitHub Wiki

✅ [문제 해결 요약] 왜 MASQUERADE가 필요했는가?

💡 상황

  • 로컬 PC에서 WireGuard VPN으로 AWS 서버(10.250.250.1)에 접속
  • AWS 서버는 VPC 피어링을 통해 다른 VPC(예: 10.10.0.0/16) 에 연결되어 있음
  • 로컬에서 피어 VPC의 인스턴스(Ping 등)에 접근하려 했지만 응답이 없음

Q: 왜 ens4로 잘 되던 게 갑자기 안 됐을까?

원인 설명
인터페이스 이름 변경 VM 재시작/재생성/업데이트 등으로 ens4 → ens5로 바뀜
기존 설정 불일치 wg0.conf에는 여전히 ens4로 되어 있어서 다시 실행할때마다 NAT이 안 먹힘

원인

항목 설명
출발지 IP 인식 불가 로컬 PC의 VPN IP(예: 10.250.250.3)는 AWS 내부에서 알려지지 않은 사설 IP
응답 경로 없음 피어 VPC는 10.250.250.x 주소로 응답할 수 있는 경로를 모름
결과 요청은 AWS까지 도달하지만, 응답은 로컬로 돌아오지 않음

임시 해결 방법

sudo iptables -t nat -A POSTROUTING -s 10.250.250.0/24 -o ens5 -j MASQUERADE
항목 설명
-t nat NAT(Network Address Translation) 테이블에 설정
-A POSTROUTING 패킷이 나가기 직전에 변형 적용
-s 10.250.250.0/24 출발지 IP가 로컬 VPN 대역인 경우
-o ens5 AWS 내부 네트워크 인터페이스로 나갈 때
-j MASQUERADE 출발지 IP를 EC2의 내부 IP (예: 10.0.0.x) 로 변환

영구 해결 방법

  1. wg0.confens4ens5로 수정

  2. WireGuard 재시작

    sudo wg-quick down wg0 && sudo wg-quick up wg0
    
  3. 다시 잘 작동됨 🎉

효과

  • 피어 VPC 입장에서는 "10.250.250.3"이 아닌 "10.0.0.236" 으로 트래픽이 들어옴
  • 이는 정상적인 내부 IP로 인식되어 응답을 반환
  • 로컬 PC는 WireGuard를 통해 정상적으로 응답을 수신

🛠 설정 예시 (wg0.conf)

PostUp = sysctl -w net.ipv4.ip_forward=1; \
         iptables -A FORWARD -i wg0 -j ACCEPT; \
         iptables -A FORWARD -o wg0 -j ACCEPT; \
         iptables -t nat -A POSTROUTING -s 10.250.250.0/24 -o ens5 -j MASQUERADE

PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; \
           iptables -D FORWARD -o wg0 -j ACCEPT; \
           iptables -t nat -D POSTROUTING -s 10.250.250.0/24 -o ens5 -j MASQUERADE