{"id":103,"date":"2022-10-14T13:16:02","date_gmt":"2022-10-14T11:16:02","guid":{"rendered":"https:\/\/www.funkgui.it\/?p=103"},"modified":"2022-10-14T13:16:02","modified_gmt":"2022-10-14T11:16:02","slug":"script-failover-linux","status":"publish","type":"post","link":"https:\/\/www.funkgui.it\/index.php\/script-failover-linux\/","title":{"rendered":"Script failover linux"},"content":{"rendered":"\n<p>Ecco uno script da utilizzare in caso di doppia connessione WAN su un server linux in modo da poter switchare da una all&#8217;altra in caso di down della linea.<\/p>\n\n\n\n<p>\u00e8 pensata per essere impostato come cron ad esempio con una configurazione del genere<\/p>\n\n\n\n<p><code>*\/1 * * * * \u00a0\u00a0\u00a0\u00a0root \u00a0\u00a0\u00a0\/opt\/internetGatewayFailover<\/code><\/p>\n\n\n\n<p>Ecco lo script:<\/p>\n\n\n\n<p><code>#!\/bin\/bash<br><br>CHECK_IP=${CHECK_IP:-8.8.4.4}<br>PRIMARY_IF=${PRIMARY_IF:-eth0}<br>PRIMARY_GW=${PRIMARY_GW:-172.16.0.1}<br>BACKUP_IF=${BACKUP_IF:-eth1}<br>BACKUP_GW=${BACKUP_GW:-192.168.3.20}<br><br># Compare arg with current default gateway interface for route to healthcheck IP<br>getGwInterface() {<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0# parametro 1 interfaccia<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0[[ \"$1\" = \"$(ip route get \"$CHECK_IP\" | sed -rn 's\/^.*dev ([^ ]*).*$\/\\1\/p')\" ]]<br>}<br>checkConnectivity() {<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0# parametro 1 interfaccia \u00a0<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0# parametro 2 gateway<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ip route add \"$CHECK_IP\" via $2 dev $1<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0PING_res=`ping -I $1 -c1 \"$CHECK_IP\"|grep 'packet loss'|cut -d ' ' -f4`<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0#echo $PING_res<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ip route del \"$CHECK_IP\" via $2 dev $1<br>}<br>switchGw(){<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0# parametro 1 attuale gateway da rimuovere<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0# parametro 2 attuale interfaccia gateway da rimuovere<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0# parametro 3 nuovo gateway<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0# parametro 4 interfaccia nuovo gateway<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ip route del default via \"$1\" dev \"$2\"<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ip route add default via \"$3\" dev \"$4\"<br>}<br><br><br>if ping -c1 \"$CHECK_IP\" &amp;>\/dev\/null<br>then<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if getGwInterface \"$PRIMARY_IF\"<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0then<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"Connessione attiva su gateway primario\"<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0exit<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0else<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"Connessione attiva su gateway backup\"<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"Switch se possibile su connessione primaria\"<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0checkConnectivity \"$PRIMARY_IF\" \"$PRIMARY_GW\"<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if [[ \"$PING_res\" = \"1\" ]] \u00a0<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0then<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"Switch possibile su primario\"<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0switchGw \"$BACKUP_GW\" \"$BACKUP_IF\" \"$PRIMARY_GW\" \"$PRIMARY_IF\"<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0else<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"Switch non possibile.... rimango su backup ed esco\"<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0exit<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fi<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fi<br>else<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"Connessione NON attiva\"<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if getGwInterface \"$PRIMARY_IF\"<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0then<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"Switch comunque su backup\"<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0switchGw \"$PRIMARY_GW\" \"$PRIMARY_IF\" \"$BACKUP_GW\" \"$BACKUP_IF\"<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0exit<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0else<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"Switch comunque su primario\" \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0switchGw \"$BACKUP_GW\" \"$BACKUP_IF\" \"$PRIMARY_GW\" \"$PRIMARY_IF\"<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fi<br>fi<br><br><br>exit<br><\/code><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ecco uno script da utilizzare in caso di doppia connessione WAN su un server linux in modo da poter switchare da una all&#8217;altra in caso di down della linea. \u00e8 pensata per essere impostato come cron ad esempio con una configurazione del genere *\/1 * * * * \u00a0\u00a0\u00a0\u00a0root \u00a0\u00a0\u00a0\/opt\/internetGatewayFailover Ecco lo script: #!\/bin\/bash CHECK_IP=${CHECK_IP:-8.8.4.4}PRIMARY_IF=${PRIMARY_IF:-eth0}PRIMARY_GW=${PRIMARY_GW:-172.16.0.1}BACKUP_IF=${BACKUP_IF:-eth1}BACKUP_GW=${BACKUP_GW:-192.168.3.20} [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":true,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-103","post","type-post","status-publish","format-standard","hentry","category-linux"],"_links":{"self":[{"href":"https:\/\/www.funkgui.it\/index.php\/wp-json\/wp\/v2\/posts\/103","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.funkgui.it\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.funkgui.it\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.funkgui.it\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.funkgui.it\/index.php\/wp-json\/wp\/v2\/comments?post=103"}],"version-history":[{"count":1,"href":"https:\/\/www.funkgui.it\/index.php\/wp-json\/wp\/v2\/posts\/103\/revisions"}],"predecessor-version":[{"id":105,"href":"https:\/\/www.funkgui.it\/index.php\/wp-json\/wp\/v2\/posts\/103\/revisions\/105"}],"wp:attachment":[{"href":"https:\/\/www.funkgui.it\/index.php\/wp-json\/wp\/v2\/media?parent=103"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.funkgui.it\/index.php\/wp-json\/wp\/v2\/categories?post=103"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.funkgui.it\/index.php\/wp-json\/wp\/v2\/tags?post=103"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}