[RESOLU] DYNDNS - modification à apporter



  • Bonjour à tous,

    Voilà j'ai un compte chez DYNDNS et une ip qui change.
    auparavant, mon pfsense gérait complètement ma connexion internet, hors maintenant ce n'est plus le cas, une box a été interfacé devant le pfsense.
    Maintenant le service DYNDNS de Pfsense envoi une ip local (du genre 192.168.1.2) à mon service DYNDNS au lieu de l'ip public récupéré par la box.
    Quel est le fichier dyndns à modifier au sein du pfsense (où se trouve t il et comment le modifier si quelqu'un l'a déjà fait) pour qu'il puisse connaitre l'ip public de ma connexion internet et non récupérer une ip privé et transmettre la bonne ip au site dyndns.

    Par avance merci de vos lumières  ;D ;)

    cdlt,
    MMS.

    EDIT : je tairais le nom de mon fournisseur d'accès qui m'a fourni une box qui possède un service dyndns qui ne marche pas du tout.(ils ont eu le droit à une soufflante monstrueuse (fournir un service ne fonctionnant pas et aucune correction en vue))



  • Bon, j'ai peut être une piste mais là j'ai besoin d'un coup de main de valideur et développeur :

    Le souci, je pense, se présente dans le fichier : /etc/inc/dyndns.class

    il y a un appel récurrent vers une fonction get_current_wan_address() se trouvant dans le fichier /etc/inc/interfaces.inc

    
    function get_current_wan_address($interface = "wan") {
    	global $config, $g;
    
    	$wancfg = $config['interfaces'][$interface];
    
    	$interface = filter_translate_type_to_real_interface($interface);
    	$ifinfo = "";
    	if(in_array($wancfg['ipaddr'], array('dhcp'))) {
    		/* get interface info with netstat */
    		exec("/usr/bin/netstat -nWI " . escapeshellarg($interface) . " -f inet", $ifinfo);
    
    		if (isset($ifinfo[1])) {
    			$aif = preg_split("/\s+/", $ifinfo[1]);
    			$curwanip = chop($aif[3]);
    
    			if ($curwanip && is_ipaddr($curwanip) && ($curwanip != "0.0.0.0"))
    				return $curwanip;
    		}
    
    		return null;
    	} else if (in_array($wancfg['ipaddr'], array('pppoe','pptp','bigpond'))) {
    		/* dynamic WAN IP address, find out which one */
    		$wanif = get_real_wan_interface();
    
    		/* get interface info with netstat */
    		exec("/usr/bin/netstat -nWI " . escapeshellarg($wanif) . " -f inet", $ifinfo);
    
    		if (isset($ifinfo[1])) {
    			$aif = preg_split("/\s+/", $ifinfo[1]);
    			$curwanip = chop($aif[3]);
    
    			if ($curwanip && is_ipaddr($curwanip) && ($curwanip != "0.0.0.0"))
    				return $curwanip;
    		}
    
    		return null;
    	} else {
    		/* static WAN IP address */
    		return $wancfg['ipaddr'];
    	}
    }
    
    

    Cette fonction est appelé par d'autres, donc pas de modification !

    par contre j'aimerai faire un autre appel dans le fichier /etc/inc/dyndns.class du genre get_current_wan_real_address()  à positionner dans le fichier  /etc/inc/interfaces.inc

    Au sein de cette fonction, il faudrait effectuer une requete vers un site du genre whatismyip.

    Qu'en pensez vous, pouvez vous m'aider à coder un code fiable et efficace à 100% ?
    Merci

    MMS



  • J'avance …  ;D

    bon j'ai un morceau de code :

    
    $flux='';
    if ($fp = fopen('http://www.whatismyip.org','r')) {
     while (!feof($fp)) $flux .= fgets($fp,4096);
     fclose($fp);
    }
    echo $flux;
    ?>
    
    

    Par contre, j'ai un retour du genre :

    
    Content-type: text/html
    
    90.56.81.XXX
    
    

    (ben oui je ne le cache pas, c orange !!!!! lol, n'hésitez pas à faire vos réclamations auprès du service commercial pour demander 3 mois gratos à cause du dyndns qui fonctionne pas)
    j'avance …...



  • Donc ok
    l' echo m'induisait en erreur, il m'insérait le type….  :-X

    donc dans le fichier interface /etc/inc/interfaces.inc j'ai implémenté une fonction :

    
    function get_current_wan_real_address() {
    $curwanip='';
    if ($fp = fopen('http://www.whatismyip.org','r')) {
     while (!feof($fp)) $curwanip .= fgets($fp,4096);
     fclose($fp);
    }
    return $curwanip;
    
    }
    
    

    dans le fichier /etc/inc/dyndns.class, j'ai remplacé toutes mes occurences get_current_wan_address() par l'appel de la fonction get_current_wan_real_address()

    je croise les doigts

    Je ne sais pas si j'ai bien cerné le fonctionnement de ce module, si vous voyez que je me suis planté (dans la compréhension du fonctionnement de ce service, dites le moi)

    Merci.

    MMS



  • Moi, j'ai configuré des Livebox qui remplissent correctement un nom dyndns ! Et cela fait des années.

    Un, c'est plus naturel puisque c'est réalisé à l'endroit de l'établissement du lien vers Internet.
    Deux, c'est une fonction disponible et opérationnelle sur Livebox (et d'autres).
    Trois, cela évite de modifier le code de pfSense (qui ne sera plus upgradable).

    Je m'interrogerai plutôt sur pourquoi le paramétrage de dyndns sur Livebox n'a pas fonctionné …



  • Livebox mini v2 de thomson
    un bug référencé
    je sais qu'avec les anciennes livebox, il n'y a aucun souci, par contre avec celle-ci … pas moyen de le mettre en oeuvre.

    j'attends une mise à jour (firmware)..... j'attends..... :-\

    Sinon, pb résolu.


Log in to reply