원래 제 블로그 설정은 홈 서버에서 운영되기 때문에 WireGuard를 통한 순수 IPv6 프로젝트로 계획되었습니다 (참고로 route64.org에서 무료 IPv6 주소를 받을 수 있습니다). 접근성을 높이기 위해 이제 외부 IPv4 프록시를 추가했습니다 (@Larvitz님 감사합니다).
하지만 즉시 SSL 문제가 발생했습니다. 원래 A 레코드와 AAAA 레코드가 모두 프록시를 통해 전달되었기 때문에, 제 서버에서 Let's Encrypt 인증이 실패했습니다.
해결책: "IPv6 해킹"
해결책은 AAAA 레코드를 프록시로 보내는 대신 제 서버의 WireGuard IP로 직접 명시하는 것이었습니다.
- 도메인:
blog.burningboard.org - A 레코드 (프록시):
194.28.98.217 - AAAA 레코드 (서버):
2a11:6c7:f05:a8::2(WireGuard)
WireGuard IP를 가리키는 이 직접적인 AAAA 레코드를 통해 Let's Encrypt는 (AAAA 레코드가 기본적으로 우선순위를 갖기 때문에) 여전히 IPv6를 통해 제 서버에 직접 도달하여 SSL 인증서를 발급합니다. IPv4 트래픽은 프록시에 의해 암호화되어 저에게 전달됩니다.
최종 구성
통신이 원활하게 이루어지도록 Caddy 서버를 수정해야 했습니다.
1. 제 서버에서 (NixOS, blog.nix)
실제 방문자 IP가 프록시 IP로 덮어씌워지지 않고 올바르게 도달하도록 하려면, 해당 프록시를 신뢰할 수 있는 것으로 표시해야 합니다.
services.caddy.globalConfig = ''
servers {
trusted_proxies static 2a06:9801:1c:1000::10
}
'';
2. 외부 프록시에서 (Caddy)
프록시가 HTTPS를 통해 제 서버에 올바르게 접속하려면 호스트 이름(SNI)을 함께 보내야 합니다.
reverse_proxy [https://[2a11:6c7:f05:a8::2]:443](https://[2a11:6c7:f05:a8::2]:443) {
header_up Host {host}
transport http {
tls_server_name blog.burningboard.org
}
}
이제 블로그는 IPv4와 IPv6를 통해 접속 가능하며, 안전하게 암호화되었고 제 집 IP는 여전히 비공개로 유지됩니다! 🚀