Page 2 sur 2 PremièrePremière 12
Affichage des résultats 11 à 16 sur 16

Discussion: double interface réseau / dual nic

  1. #11
    Membre Senior
    Date d'inscription
    septembre 2010
    Localisation
    Where the sun shines
    Messages
    1 418
    Downloads
    0
    Uploads
    0
    pour le moment, j'ai deux liens wan, un SDSL avec business LiveBox et NAT (192.168.0.x), et l'autre en ADSL avec modem et NAT (192.168.1.1).

    Le serveur asterisk a 4 cartes réseau, j'en utilise deux.

    effectivement, l'externip unique fout la pagaille. je me dis que je devrais denatter mon sdsl et mettre l'ip en direct sur le serveur asterisk

    Comment fais tu ton failover automatique ? si j'ai envie d'avoir les deux liens actifs, le failover serait un bon progrès

    merci de ton aide,

  2. #12
    Asterisk Fan Avatar de fastm3
    Date d'inscription
    août 2010
    Localisation
    Corbeil Essonnes (91)
    Messages
    1 302
    Downloads
    1
    Uploads
    1
    Pour le failover, deja je simplifie la config.
    Une config type:
    1 seule carte reseau, 1 seul subnet.
    2 liens adsl, les 2 liens utilisent generalement leur boxs. Pour l'une des 2 boxs, on desactive le dhcp.

    On se retrouve avec 2 gateways sur le subnet:
    - 192.168.1.1 par exemple avec serveur dhcp et qui sert par exemple au surf.
    - 192.168.1.2 qui sera dedié a la voip.

    Sur l'ipbx , on sette juste la gateway correspondante.
    Apres, on fait tourner un script ( ou on le lance en manuel , ce qui est aussi une bonne solution ). Attention, ca ne resoudra pas les desynchros ponctuelles et rapides d'un lien ne marchant pas bien. Le script doit switcher uniquement en cas de lien vraiment HS.
    - On a un serveur de reference qui doit etre accessible tout le temps.
    - On le ping
    - On ping aussi les fournisseurs qui l'acceptent

    Si pas bon apres double check, on change la gateway du serveur asterisk par l'autre. On change l'externip, un petit sip reload et on previent l'admin par email.
    On continue a tester, et on retablit le lien voip des que up de nouveau.

    Faudrait que je fasse un petit tuto...Les scripts sont pas tres propres mais ils tournent tres bien.
    Ca peut etre adapté avec 2 subnets mais pour les petites installs, un subnet est plus simple.On a juste a faire pour changer la config.
    Code:
    route add default gw 1
    route del default gw 2
    sed -i -e  "s/^externip=.*/externip=$EXTERNIP/"   /etc/asterisk/sip_nat.conf
    asterisk -rx "reload"

    Simple, pas cher ( juste les boxs standard sans routeur double wan ) , et relativement efficace meme si je prefere de plus en plus le faire manuellement pour que le client se rende compte du pb sur un lien.
    Fastm3.

  3. #13
    Membre Senior
    Date d'inscription
    septembre 2010
    Localisation
    Where the sun shines
    Messages
    1 418
    Downloads
    0
    Uploads
    0
    ok, merci - c'est à peu près ce que j'ai fait manuellement... :-) mais j'avais pas envisagé de le scripter

    je suis total énervé contre FT.... je signale l'incident samedi matin - liaison hs... 3h après, pas de réponse, je rappelle, "ah on arrive pas à joindre l'astreinte"... puis, après 6h... monsieur, le cable de transport est hs, toutes les paires sont nazes, et on peut pas intervenir le week end... et lundi matin... oops... c'est l'alim de la LiveBox qui en fait est hs... (c'est sur un site distant et sécurisé, pas simple de le voir pour moi)... confondre un cable de transport HS et une box éteinte.... bande d'incapables !!!

  4. #14
    Membre Association
    Date d'inscription
    septembre 2010
    Localisation
    Isle sur la Sorgue 84800
    Messages
    369
    Downloads
    0
    Uploads
    0
    Peut être une inspiration
    Voila ce que je fait tourner sur Cyber-wrt en cron minute
    c'est sur un routeur, j'a appelé ma deuxième interface wan br1
    J'ai une interface web pour peupler le fichier var.

    fichier var.php
    Code:
    <?
    // FIRST GATEWAY AND DNS
    $gw1="192.168.20.1";
    $dnsa1="192.168.20.1";
    $dnsa2="212.27.40.240";
    $dnsa3="212.27.40.241";
    // SECOND GATEWAY AND DNS
    $gw2="192.168.100.1";
    $dnsb1="192.168.100.1";
    $dnsb2="";
    $dnsb3="";
    // DEFINE HERE IP FOR EXEMPLE VOIP PROVIDER TO ALWAYS USE GW2 WHEN AVAILABLE
    $spr1="";
    $spr2="";
    $spr3="";
    $spr4="";
    // DEFINE SUBNET FOR GW2
    $br1net="192.168.100.0";
    // DEFINE TWO REF IP TO PING WITH GW1 and GW2
    $refpingregular="208.67.222.222";
    $refpingextra="208.67.220.220";
    $debug="yes";
    $active="yes";
    ?>


    Code:
    #!/opt/bin/php -q
    <?php
    							###############################
    							####### COMDIF TELECOM ########
    							######Biwan Failover Cron######
    							###############################
    require ("/opt/var/var.php");
    
     //  uncomment to test if cron is working
    // $now = date("h:i:s"); shell_exec(" echo '".$now."' >> /opt/cron.txt");
    
    // if $active is empty this cron do nothing
    if(empty($active) || empty($br1net) || empty($gw2) || empty($dnsb1)){ exit(); }
    
    // check if br1 exist
    $isup = shell_exec("ifconfig br1"); if(empty($isup)) { exit();}
    
    // check if masquerade is set for br1
    $chipta= shell_exec("iptables -t nat -L POSTROUTING | grep 'MASQUERADE' | grep 'anywhere'");
    if(empty($chipta))
    	{
    	shell_exec("iptables -t nat -A POSTROUTING -o br1 -j MASQUERADE");
    	}
    
    //test if gw2 route rule exist to give a sens to this script
    	$gw2test = shell_exec("route -n | awk /".$br1net."/");
    	if(empty($gw2test))
    		{
    		if(!empty($debug)) echo'Gateway2 route creation: '.$gw2.' seting to use: br1 interface</br>';
    		shell_exec("route add ".$br1net." gw 0.0.0.0");
    		}
    
    	//	test if route rule $refpingregular for test ping on $gw1 is set on linux routes rules 
    		$test1 = shell_exec("route -n | awk '/".$refpingregular."/ {print $1}'");
    		if(empty($test1))
    			{
    			if(!empty($debug)) echo"oups you don't previously create this rule, ".$refpingregular." ping by ".$gw1." so I create it for you";
    			if(!empty($debug)) echo'Test ping route creation: '.$refpingregular.' seting to use: '.$gw1.' GW</br>';
    			shell_exec("route add ".$refpingregular." gw ".$gw1."");
    			}
    			
    			//	test if route rule $refpingextra for test ping on $gw2 is set on linux routes rules
    			$test2 = shell_exec("route -n | awk '/".$refpingextra."/ {print $1}'");
    			if(empty($test2))
    				{
    				if(!empty($debug)) echo"oups you don't previously create this rule, ".$refpingextra." ping by ".$gw2." so I create it for you";
    				if(!empty($debug)) echo'Test ping route creation: '.$refpingextra.' seting to use: '.$gw2.' GW</br>';
    				shell_exec("route add ".$refpingextra." gw ".$gw2."");
    				}
    
    //////////////////////////////// MODULE TO CHECK ORPHEAN SPECIAL RULES ///////////////////////////
    if (!empty($spr1)) $spr1v= explode('.',$spr1); $spr1v= $spr1v[0] + $spr1v[1] + $spr1v[2] + $spr1v[3];
    if (!empty($spr2)) $spr2v= explode('.',$spr2); $spr2v= $spr2v[0] + $spr2v[1] + $spr2v[2] + $spr2v[3];
    if (!empty($spr3)) $spr3v= explode('.',$spr3); $spr3v= $spr3v[0] + $spr3v[1] + $spr3v[2] + $spr3v[3];
    if (!empty($spr4)) $spr4v= explode('.',$spr4); $spr4v= $spr4v[0] + $spr4v[1] + $spr4v[2] + $spr4v[3];
    $valip2= explode('.',$refpingextra); $valip2= $valip2[0] + $valip2[1] + $valip2[2] + $valip2[3];
    $srouting = shell_exec("route -n | awk '/".$gw2."/{print \":\" $1}'");
    $difs = explode(':', $srouting);
    $tail = sizeof($difs);
    for($i=1; $i<$tail; $i++)
      {
      $valip1= explode('.',$difs[$i]); $valip1= $valip1[0] + $valip1[1] + $valip1[2] + $valip1[3];
       if($valip1 != $valip2)
    	{
    	if ( $valip1 != $spr1v || $valip1 != $spr2v || $valip1 != $spr3v || $valip1 != $spr4v)
    		{
    		shell_exec("route del ".$difs[$i]." gw ".$gw2."");
    		}
    	}
    }
    ////////////////////////////// MODULE TO CHECK ORPHEAN SPECIAL RULES END //////////////////////////
    
    //////////////////////////////////// commands ////////////////
    $regularping="/opt/tmp/ping -c 1 -W 1 ".$refpingregular." | grep '1 received'";
    	$extrawanping= "/opt/tmp/ping -c 1 -W 1 ".$refpingextra." | grep '1 received'";
    		$getdefault="ip route | awk '/default via/ {print $3}'";
    			$adoriroute="route add default gw ".$gw1."";
    				$deloriroute="route del default gw ".$gw1."";
    					$adextraroute="route add default gw ".$gw2."";
    						$delextraroute="route del default gw ".$gw2."";
    
    // find the actual defaullt gateway //
    $state= shell_exec($getdefault);
    	$state =explode('.',$state); $state = $state[0] + $state[1] + $state[2] + $state[3];
    		$st1 =explode('.',$gw1); $st1 = $st1[0] + $st1[1] + $st1[2] + $st1[3];
    			$st2 =explode('.',$gw2); $st2 = $st2[0] + $st2[1] + $st2[2] + $st2[3];
    // Run ping accross all gateways
    $w1state = shell_exec($regularping);
    	$w2state = shell_exec($extrawanping);
    	
    	###################### RESULT AND ACTION AFTER TESTING MAIN GW ################
    	if(!empty($w1state))
    		{
    		if(!empty($debug)) echo $w1state.' OK - '.$test1.' IS RESPONDING ON MAIN GATEWAY<br>';
    		// check if conf is regular conf
    		if($state != $st1)
    			{
    			// test show using altrenative gateway so make all changes
    			if(!empty($debug)) echo 'MAIN ROUTE IS RESPONDING RESTORING NORMAL CONFIGURATION</br>';
    			// restore original default route //
    			shell_exec($delextraroute); shell_exec($adoriroute);
    			shell_exec("echo \"nameserver ".$dnsa1."\" > /tmp/resolv.dnsmasq");
    			shell_exec("echo \"nameserver ".$dnsa2."\" >> /tmp/resolv.dnsmasq");
    			shell_exec("echo \"nameserver ".$dnsa3."\" >> /tmp/resolv.dnsmasq");
    			}
    		}
    	elseif(empty($w1state))
    		{
    		if($state != $st2)
    			{
    			if(!empty($debug)) echo 'MAIN ROUTE IS DOWN MAKING ALTERNATIVE CONFIGURATION</br>';
    			shell_exec($deloriroute); shell_exec($adextraroute);
    			shell_exec("echo \"nameserver ".$dnsb1."\" > /tmp/resolv.dnsmasq");
    			shell_exec("echo \"nameserver ".$dnsb2."\" >> /tmp/resolv.dnsmasq");
    			shell_exec("echo \"nameserver ".$dnsb3."\" >> /tmp/resolv.dnsmasq");
    			}
    		}
    		
    	###################### RESULT AND ACTION AFTER TESTING SECONDARY GW ################
    	if(!empty($w2state))
    		{
    		if(!empty($debug)) echo $w2state.' OK - '.$test2.' IS RESPONDING ON ALTERNATIVE GATEWAY<br>';
    		// check if special voip routing rule 1 is ok
    		if(!empty($spr1))
    			{
    			$on=shell_exec("route -n | awk '/".$spr1."/ {print $1}'"); 
    			if(empty($on))
    				{
    				if(!empty($debug)) echo 'SECONDARY GW IS NOW RESPONDING RESTORING SPECIAL RULES CONFIGURATION</br>';
    				shell_exec("route add ".$spr1." gw ".$gw2."");
    				}
    			}
    			// check if special voip routing rule 2 is ok			
    			if(!empty($spr2))
    				{
    				$on=shell_exec("route -n | awk '/".$spr2."/ {print $1}'"); 
    				if(empty($on))
    					{
    					shell_exec("route add ".$spr2." gw ".$gw2."");
    					}
    				}
    				// check if special voip routing rule 3 is ok			
    				if(!empty($spr3))
    					{
    					$on=shell_exec("route -n | awk '/".$spr3."/ {print $1}'"); 
    					if(empty($on))
    						{
    						shell_exec("route add ".$spr3." gw ".$gw2."");
    						}
    					}
    					// check if special voip routing rule 4 is ok			
    					if(!empty($spr4))
    						{
    						$on=shell_exec("route -n | awk '/".$spr4."/ {print $1}'"); 
    						if(empty($on))
    							{
    							shell_exec("route add ".$spr4." gw ".$gw2."");
    							}
    						}
    		}
    	// Backup wan is not responding, remove special routing rules
    	else
    		{
    		if(!empty($debug)) echo 'SECONDARY GW DOWN CHANGE SPECIAL ROUTING IF NEEDED !</br>';
    		if(!empty($spr1))
    			{
    			$already=shell_exec("route -n | awk '/".$spr1."/ {print $1}'");
    			if(!empty($already))
    				{
    				if(!empty($debug)) echo 'SECONDARY GW DOWN CHANGE SPECIAL ROUTING CONFIGURATION for '.$spr1.' AND OTHER</br>';
    				shell_exec("route del ".$spr1."");
    				if(!empty($spr2)){ shell_exec("route del ".$spr2.""); }
    				if(!empty($spr3)){ shell_exec("route del ".$spr3.""); }
    				if(!empty($spr4)){ shell_exec("route del ".$spr4.""); }
    				}			
    			}
    		}
    ?>

  5. #15
    Asterisk Fan Avatar de fastm3
    Date d'inscription
    août 2010
    Localisation
    Corbeil Essonnes (91)
    Messages
    1 302
    Downloads
    1
    Uploads
    1
    Citation Envoyé par jean Voir le message
    ok, merci - c'est à peu près ce que j'ai fait manuellement... :-) mais j'avais pas envisagé de le scripter

    je suis total énervé contre FT.... je signale l'incident samedi matin - liaison hs... 3h après, pas de réponse, je rappelle, "ah on arrive pas à joindre l'astreinte"... puis, après 6h... monsieur, le cable de transport est hs, toutes les paires sont nazes, et on peut pas intervenir le week end... et lundi matin... oops... c'est l'alim de la LiveBox qui en fait est hs... (c'est sur un site distant et sécurisé, pas simple de le voir pour moi)... confondre un cable de transport HS et une box éteinte.... bande d'incapables !!!
    Ils ne sont pas si incapables que ca. Ils n'ont rien confondu. Ils gagnent juste du temps.
    J'ai toujours eu des temps de retablissement super court en numeris ( vraiment moins de 4h et meme en signalant le pb le samedi matin ) . En xdsl, c'est une autre histoire. Si l'on considere comme tu l'as fait, qu'il faut toujours un lien de backup et les temps de reparation , et la criticité exceptionnelle de la ligne.
    Utilser des lignes traditionnelles est quelque fois une tres bonne solution...On l'oublie souvent et on s'en rappelle tout le temps en cas de soucis.
    Fastm3.

  6. #16
    Membre Senior
    Date d'inscription
    septembre 2010
    Localisation
    Where the sun shines
    Messages
    1 418
    Downloads
    0
    Uploads
    0
    bon, je continue à chercher.... le post de fastm3 est juste (http://www.asterisk-france.org/showt...ll=1#post13629)

    un seul externip, donc si natté, un seul wan.

    les solutions à ce jour: deux instances d'asterisk sur la meme machine, ou un proxy qui recoit sur les interfaces et renvoie sur asterisk. j'ai fait quelques recherches et pas de proxy léger et couvrant cela (sippr, siproxyd, sippy de iptel, etc...) et kamaila/openser, ca me parait bien gros....

    des idées sur un proxy léger ?

    J.

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •