Αρχικά, η εγκατάσταση του blog μου είχε σχεδιαστεί ως ένα αμιγώς IPv6 project μέσω WireGuard, καθώς το όλο σύστημα φιλοξενείται σε έναν οικιακό διακομιστή (παρεμπιπτόντως, μπορείτε να βρείτε δωρεάν διευθύνσεις IPv6 στο route64.org). Για να αυξήσω την προσβασιμότητα, πρόσθεσα τώρα έναν εξωτερικό IPv4 proxy (ευχαριστώ τον @Larvitz).
Ωστόσο, προέκυψαν αμέσως προβλήματα SSL: Καθώς αρχικά τόσο η εγγραφή A όσο και η AAAA περνούσαν μέσα από τον proxy, η επικύρωση του Let's Encrypt στον διακομιστή μου απέτυχε.
Η λύση: Το „IPv6-Hack“
Η λύση ήταν να κατευθύνω την εγγραφή AAAA ρητά απευθείας στην WireGuard IP του διακομιστή μου, αντί να την περάσω και αυτήν μέσω του proxy.
- Domain:
blog.burningboard.org - A-Record (Proxy):
194.28.98.217 - AAAA-Record (Server):
2a11:6c7:f05:a8::2(WireGuard)
Μέσω αυτής της απευθείας εγγραφής AAAA στην WireGuard IP μου, το Let’s Encrypt συνεχίζει να προσεγγίζει τον διακομιστή μου απευθείας μέσω IPv6 (καθώς η εγγραφή AAAA έχει προτεραιότητα από προεπιλογή) και εκδίδει το πιστοποιητικό SSL. Η κίνηση IPv4 προωθείται σε εμένα κρυπτογραφημένη από τον proxy.
Η τελική διαμόρφωση
Για να λειτουργήσει ομαλά η επικοινωνία, έπρεπε να προσαρμόσουμε τους διακομιστές Caddy:
1. Στον διακομιστή μου (NixOS, blog.nix)
Για να φτάνουν σωστά οι πραγματικές IP των επισκεπτών και να μην αντικαθίστανται από την IP του proxy, αυτός πρέπει να επισημανθεί ως αξιόπιστος:
services.caddy.globalConfig = ''
servers {
trusted_proxies static 2a06:9801:1c:1000::10
}
'';
2. Στον εξωτερικό proxy (Caddy)
Για να επικοινωνεί ο proxy σωστά με τον διακομιστή μου μέσω HTTPS, πρέπει να στέλνει το hostname (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
}
}
Το blog είναι πλέον προσβάσιμο μέσω IPv4 και IPv6, με ασφαλή κρυπτογράφηση, και η οικιακή μου IP παραμένει ιδιωτική! 🚀