3 155
contributi
Wtf (discussione | contributi) m (→Scenario misto) |
Wtf (discussione | contributi) |
||
Riga 346: | Riga 346: | ||
Arrivati a questo punto il servizio prescelto dovrebbe essere normalmente raggiungibile attraverso la nostra interfaccia internet, tuttavia è importante sottolineare quanto segue: | Arrivati a questo punto il servizio prescelto dovrebbe essere normalmente raggiungibile attraverso la nostra interfaccia internet, tuttavia è importante sottolineare quanto segue: | ||
# Le rotte e le regole create non sono permanenti, ovvero andranno perse al momento di un eventuale riavvio, quindi in tale caso l'utente dovrà nuovamente ripetere la procedura qui descritta. Il problema dovrebbe essere ovviabile dichiaranto opportunamente i precedenti comandi nel file <code>/etc/network/interfaces</code>. | # Le rotte e le regole create non sono permanenti, ovvero andranno perse al momento di un eventuale riavvio, quindi in tale caso l'utente dovrà nuovamente ripetere la procedura qui descritta. Il problema dovrebbe essere ovviabile dichiaranto opportunamente i precedenti comandi nel file <code>/etc/network/interfaces</code>. | ||
# Se non si dispone di un IP pubblico statico, ma solo dinamico, sarà necessario eliminare e dichiarare nuovamente il comando descritto al punto 3 ogni volta che detto IP pubblico cambia. A tale fastidio si può ovviare sostituendo alla regola del punto 3 una dichiarazione basata sull'uso dell'opzione <code>fwmark</code> e del target <code>mark</code> di IPtables, oppure creando uno script che ad intervalli regolari verifica il proprio IP pubblico attuale ed eventualmente aggiorna rotte e regole come necessario. | # Se non si dispone di un IP pubblico statico, ma solo dinamico, sarà necessario eliminare e dichiarare nuovamente il comando descritto al punto 3 ogni volta che detto IP pubblico cambia. A tale fastidio si può ovviare sostituendo alla regola del punto 3 una dichiarazione basata sull'uso dell'opzione <code>fwmark</code> e del target <code>mark</code> di IPtables, oppure creando uno script che ad intervalli regolari verifica il proprio IP pubblico attuale ed eventualmente aggiorna rotte e regole come necessario. A puro titolo esemplificativo si mostra lo script usato da chi scrive (e quindi ritagliato sulla propria specifica configurazione macchina): | ||
<pre> | |||
#!/bin/bash | |||
# CRON: */5 * * * * /percorso/script/nome_script.sh | |||
PPP=$(ip addr | grep 'ppp0') | |||
IPO=$(ip rule | grep '32765' | tr -d '[a-z ]' | sed 's/32765:\t//1') | |||
TAB=$(ip route show table tab1) | |||
DATA=$(date +'%b %d %T')" nome_host nome_script.sh: " | |||
# Check first if secondary routing table is empty | |||
if [ "$TAB" = '' ] | |||
then | |||
ip route add default dev ppp0 table tab1 | |||
# Next command is necessary to be able to connect to the web server using my fqdn, like "blabla.fornitore.net" | |||
# from inside the LAN | |||
ip route add 192.168.1.0/24 dev br0 src 192.168.1.172 table tab1 | |||
MSG1=$DATA"secondary routing table was empty, added ppp0 as default gateway." | |||
else | |||
MSG1=$DATA"secondary routing table was not empty, nothing to do." | |||
fi | |||
echo $MSG1 >> /var/log/syslog | |||
# Check now if ppp0 inet ip has changed | |||
if [ "$PPP" != '' ] | |||
then | |||
IPN=$(ip -f inet addr show ppp0 | grep -Po 'inet \K[\d.]+') | |||
if [ "$IPN" != "$IPO" ] && [ "$IPN" != "" ] | |||
then | |||
if [ "$IPO" = '' ] | |||
then | |||
MSG0=" (missing secondary routing table rule)" | |||
else | |||
MSG0=" (secondary routing table rule found)" | |||
ip rule del table tab1 | |||
fi | |||
ip rule add from $IPN table tab1 | |||
MSG2=$DATA"IP changed from "$IPO" to "$IPN$MSG0". Rule updated." | |||
else | |||
MSG2=$DATA"IP ($IPO / $IPN) has not changed, nothing to do." | |||
fi | |||
else | |||
MSG2=$DATA"failed to read inet address (is interface up?)." | |||
fi | |||
echo $MSG2 >> /var/log/syslog | |||
</pre> | |||
=== File di configurazione === | === File di configurazione === |
contributi