Auteur Sujet: ByPass SFR CG-NAT - TUTO - Apache proxy + socat  (Lu 2040 fois)

0 Membres et 1 Invité sur ce sujet

G8U5

  • Abonné SFR fibre FttH
  • *
  • Messages: 120
  • La Rochelle 17
ByPass SFR CG-NAT - TUTO - Apache proxy + socat
« le: 10 juin 2022 à 11:59:10 »
Comment j'ai bypasser le CG-NAT pour me connecter à la maison depuis l'étranger ou depuis les boxes qui n'ont pas encore l'IPv6.

Fan de domotique, j'héberge moi même mes services à la maison, mais depuis le CG-NAT d'SFR, il m'était impossible de toujours avois accès à mes services WEB et WebSocket.
J'héberge un site sur un serveur VPS full stack en haute disponibilité et également un nom de domaine avec full access sur la gestion des DNS.

La solution à alors été de créer un proxy Apache sur mon serveur en ligne qui redirige les requêtes en IPv4 sur des adresses IPv6 pour atteindre ma maison.

Exemple DNS:
  www.example.com 123.123.123.123 -> mon serveur en ligne
 www.example.com 20a2:xxxx:xxxx:xxxx::2 -> mon serveur à la maison
 www6.example.com 20a2:xxxx:xxxx:xxxx::2 -> mon serveur à la maison

et la config VirtualHost du serveur Apache en ligne:

        #envoyer un header au site pour qu'il soit au courant de la redirection par le proxy
Header add PROXY_FROM_V4 ON 
RequestHeader set PROXY_FROM_V4 ON

ProxyPass             /       https://www6.example.com/
ProxyPassReverse      /       https://www6.example.com/

Quand le DNS est interrogé par une IPv4, il renvoie alors l'IP du serveur en ligne et requête sur le proxy qui renvoie alors vers mon serveur à la maison en v6.

Je poste ça pour ceux qui sont toujours dans l'embarra du CG-NAT et qui comme moi n'arrivent pas toujours à accéder à leur services.

Pour rediriger mon VPN (WireGuard ), j'utilise 'socat' sur mon VPS avec la commande:
socat UDP4-LISTEN:PORT_VPN,fork UDP6:[IPv6_locale]:PORT_VPNA noter que ceci fonction pour n'importe quel port et aussi en TCP.
Ayant des sites sur le VPS et en local, le proxy Apache reste la meilleurs solution pour les services WEB.

Si vous souhaitez plus d'informations, je vous donnerais volontiers la marche à suivre.
Pour d'autres qui n'ont pas de VPS et souhaitent ce type de redirection, mon serveur en ligne peut vous "l'héberger". faites le moi savoir en MP.

Bien à vous.
« Modifié: 10 juin 2022 à 14:21:13 par G8U5 »

cetipabo

  • Invité
ByPass SFR CG-NAT
« Réponse #1 le: 10 juin 2022 à 12:14:51 »
... et également un nom de domaine avec full access sur la gestion des DNS.
juste une question, renseigner le champ DNS AAAA pour l'ipv6 n'était pas plus simple ?

EDIT:
oups pardon, j'ai zappé ca :
Citer
ou depuis les boxes qui n'ont pas encore l'IPv6.

G8U5

  • Abonné SFR fibre FttH
  • *
  • Messages: 120
  • La Rochelle 17
ByPass SFR CG-NAT
« Réponse #2 le: 10 juin 2022 à 12:20:33 »
Bien quand tu es sur une connexion IPv4 seule, le DNS renvoie la v4, mais en CG-Nat, pas de v4, elle est partagée.
C'est pourquoi 2x AAAA, un pour accéder directement depuis une IPv6, et l'autre pour que le VPS en v4 transforme bien vers la bonne IPv6, si non il reste en v4 et se renvoie la requête à lui même.

xp25

  • Abonné RED by SFR fibre FttH
  • *
  • Messages: 5 948
ByPass SFR CG-NAT
« Réponse #3 le: 10 juin 2022 à 12:37:34 »
Intéressant  ;)

G8U5

  • Abonné SFR fibre FttH
  • *
  • Messages: 120
  • La Rochelle 17
ByPass SFR CG-NAT
« Réponse #4 le: 10 juin 2022 à 13:06:15 »
[TUTO] - Retrouver une IPv4 sur une connexion CG-NAT

Pré-requis:

  • un nom de domaine,
  • un serveur VPS sous Linux full stack,
  • Apache ou autre, ici ce sera Apache,
  • l'utilitaire linux "socat"

Il sera admis que:
  • les utilitaires seront déjà installés et fonctionnels,
  • vous savez configurer la zone DNS de votre domaine,
  • vous savez configurer les Ipv6 en statique sur vos machine en locale,
  • vous savez configurer Apache et ajouter les modules Proxy, Header, ...
  • vous savez configurer votre routeur en locale

Rediriger un ensemble de ports:

Utile pour rediriger votre VPN ou un broker Web_Socket.

en TCP:
echo -n 3392 3393 3394 | xargs -d ' ' -I% bash -c 'socat TCP4-LISTEN:%,fork TCP6:[20a2:xxxx:xxxx:xxxx::2]:% &'en UDP:
echo -n 3392 3393 3394 | xargs -d ' ' -I% bash -c 'socat UDP4-LISTEN:%,fork UDP6:[20a2:xxxx:xxxx:xxxx::2]:% &'
Cette commande peut être ajouter à un script systemd sous cette forme:

fichier /etc/systemd/system/VPN-v4-redirect.service

[Unit]
Description=Socat V4 redirction
#Before=my-other.service
After=network.target

[Service]
Type=simple
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=Socat-V4-redirction

ExecStart=/usr/bin/socat "echo -n 3392 3393 3394 | xargs -d ' ' -I% bash -c 'socat UDP4-LISTEN:%,fork UDP6:[20a2:xxxx:xxxx:xxxx::2]:%"
Restart=always

[Install]
WantedBy=multi-user.target

Il vous faut ensuite "recharger" systemd:
systemctl daemon-reload
systemctl start VPN-v4-redirect
systemctl enable VPN-v4-redirect  # (to start it during bootup)

ATTENTION, si vous redirigez les ports 80,443, les services de votre VPS ne seront plus accessibles.

Rediriger les ports 80, 443:

Vous avez des sites en local, mais aussi en ligne, vous devez alors utiliser le module Proxy d'Apache dans de nouveaux VirtualHost.

Pour cela, créez un nouveau VirtualHost comme suit:
<VirtualHost *:80>
        #REDIRECTION SSL
        ServerName www.example.com  #l'adresse de votre service

        <If "%{HTTP_HOST} == 'www.example.com'">
                Redirect permanent / https://www.example.com/
        </If>

ErrorLog ${APACHE_LOG_DIR}/IPv4Proxy-error.log
CustomLog ${APACHE_LOG_DIR}/IPv4Proxy-access.log combined
</VirtualHost>
<VirtualHost *:443>
        ServerName www.example.com

        SSLEngine On

        SSLCertificateFile /etc/letsencrypt/live/www.example.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem

SSLProxyEngine On
SSLProxyCheckPeerCN on
SSLProxyCheckPeerExpire on

ProxyRequests Off

<Proxy *>
Order deny,allow
Allow from all
</Proxy>

        # Ajouter un header à la requête pour prévenir le site de la redirection
Header add PROXY_FROM_V4 ON
RequestHeader set PROXY_FROM_V4 ON

        # Penser à créer un nouveau sous-domaine _v6
ProxyPass             /       https://www_v6.example.com/        # <----- NOTEZ le _v6 ajouté ici, c'est important
ProxyPassReverse      /       https://www_v6.example.com/

        ServerAdmin admin@example.com

        ErrorLog ${APACHE_LOG_DIR}/IPv4Proxy-error.log
        CustomLog ${APACHE_LOG_DIR}/IPv4Proxy-access.log combined

</VirtualHost>

Ce VirtualHost acceptera les requêtes IPv4 et renverra vers votre machine local en V6.

Vous devez maintenant configurer votre la zone DNS de votre domaine.
Dans votre zone, vous devez déjà avoir votre sous-domaine avec l'enregistrement AAAA (v6) pointant sur votre machine locale.
www(.example.com) AAAA 1800 20a2:xxxx:xxxx:xxxx::2
Il vous faut alors créer un enregistrement type A pointant vers votre VPS:
www(.example.com) A 1800 123.123.123.123  (adresse de votre VPS)
www_v6.example.com ? Comme vu plus haut dans le VirtualHost, il faut également créer une nouvelle fois un enregistrement type AAAA pour que la redirection se fasse correctement:
www_v6(.example.com) AAAA 1800 20a2:xxxx:xxxx:xxxx::2
Sans ça, la requête qui arrive en v4 sur le proxy serait renvoyer vers www.example.com sans changer de version, elle resterait en v4, donc le VPS se renverait la requête à lui même.


« Modifié: 10 juin 2022 à 14:27:32 par G8U5 »