Πως να ορίσω το default routing προς το διαδίκτυο?

Προσπαθώ να κάνω ένα script που θα μου κόβει η θα μου ενεργοποιεί μια δικτυακή σύνδεση ανάλωγα με το αν το internet παίζει η όχι. Ο στόχος μου είναι να κάνω αυτόματα switch της κίνησης σε 4g modem ΜΟΝΟ όταν το dsl είναι Kaput.

To script θα τρέχει σε desktop pc άρα δεν ξέρω ένα καλόν τρόπο να γνωρίζω αν το DSL είναι πάνω η κάτω μέσω ping.

Το να ξέρω αν το ethernet είναι down το ξέρω μέσω αυτής της function αλλά και μέσω αυτού του oneliner:

if [[ ! $(ip a s enp3s0 | grep state | awk '{print $9}') == UP ]];then echo "It's not working";fi

Όμως θέλω να ορίσω το default routing σε ένα συγκεκριμένο interace. Όταν έχω συνδεδεμένο και το ethernet αλλά και το 4g modem έχω αυτό το routing table:

default via 192.168.2.1 dev enp3s0 proto dhcp metric 100 
default via 192.168.0.1 dev enx00a0c6000000 proto dhcp metric 101 
169.254.0.0/16 dev virbr0 scope link metric 1000 linkdown 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 
172.20.0.0/24 dev br-2c396117bfa7 proto kernel scope link src 172.20.0.1 
192.168.0.0/24 dev enx00a0c6000000 proto kernel scope link src 192.168.0.179 metric 101 
192.168.2.0/24 dev enp3s0 proto kernel scope link src 192.168.2.5 metric 100 
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown 

Αυτό που θέλω να κάνω είναι αν το enp3s0 έχει traffic προς το internet τότε να αξιοποιώ αυτό ειδάλλως να αξιοποιώ το enx00a0c6000000. Και οι 2 διαχειρίζονται από τον network manager.

Από ότι καταλαβαίνω όλο το traffic balancάρετε μέσω των enp3s0 και enx00a0c6000000 πράγμα που δεν θελω αλλά θέλω η το enp3s0 ή το enx00a0c6000000 να είναι το interface που θα έχει πάρε-δώσε με το internet και όχι τα 2.

Ιδανικά θέλω να βγάζω το enx00a0c6000000 offline αλλά όχι και το enp3s0.

Άρα υπάρχει τρόπος να ορίζω ένα και μοναδικό interface που θα μου κάνει traffic την κίνηση και να αποκλείω τα άλλα;

Δηλαδή θέλω:

  1. αν το enp3s0 είναι up ΚΑΙ έχει κίνηση στο internet να κατεβαίνει το enx00a0c6000000 και να μην πέρνα κίνηση απ’ αυτό.
  2. Αν στο enp3s0 δεν μπορεί να μεταφέρει πακέτα sto internet (επειδή η VDSL έχει θέματα) να σηκώνει το enx00a0c6000000 και περνάει όλο το εξερχόμενο traffic από το enx00a0c6000000 interface μέχρις ότου επανέλθει το enp3s0.

Αυτό το θέλω γιατί η VDSL πέφτει αχαλίνωτα με απότερο σκοπό να είμαι offline εν μέσω εργασία (ιδίως σε google meet ups) και να πρέπει με το χέρι να συνδέω το 4g usb stick. Αν το έχω μόνιμα συνδεδεμένο φοβάμαι μην μου τρώει άνευ αιτίας MB.

H 4g είναι η failover σύνδεσή μου και την θέλω μόνο όταν το VDSL είναι down

Αν κάνεις οτιδήποτε ping που είναι μετά το NAT σου, βλέπεις κατευθείαν αν έχεις κίνηση προς τα έξω.

Αυτό δεν ισχύει. Στην πραγματικότητα συνήθως αυτό θέλεις να κάνεις και είναι πιο δύσκολο από το να δουλεύει μόνο μία “γραμμή” την φορά.

Router metrics help the router choose the best route among multiple feasible routes to a destination. The route will go in the direction of the gateway with the lowest metric.

Και από την στιγμή που το metric είναι κάτι “στατικό” και όχι δυναμικό, θα προτιμάται πάντα η διαδρομή με το μιρκότερο metric.

Ο τρόπος είναι είτε να βάζεις ένα default route την φορά και να αλλάζεις μόνο αυτό, οπότε και σύνδεση να έχει το άλλο interface να μην υπάρχει διαδρομή να ακουλουθήσει ένα πακέτο, ή να αλλάζεις το metric για να προτιμάται η άλλη σύνδεση έναντι της προηγούμενης κατώτερης.

Γενικά τα δικτυακά έχουν κανόνες και μάλιστα αυστηρούς ως προς την υλοποίησή τους, αλλά όταν πρόκειται για τέτοιου είδους πατέντες δεν υπάρχουν universal λύσεις. Πρέπει να κατέχεις λίγο από βασικές έννοιες δικτύων για να το εξατομικεύεις κάθε φορά στα μέτρα σου.

Αν στην πορεία έχεις και άλλες απορίες, με χαρά να εξηγήσω - βοηθήσω.

So μπορώ με το που κουμπώνω το στικάκι να μην μπαίνει default route με udev rule και με script να κάνω swap to default route.

Ξαναλέω κάνεις ό,τι θέλεις και ταιριάζει στα μέτρα σου! Νομίζω πως μπορείς με κάποιον τρόπο και από τον network manager να του πεις να μην κάνει κάτι συγκεκριμένο με αυτή την συσκευή. (αλλά δεν βάζω και το χέρι μου στην φωτιά)

Επίσης κάτι που ήθελα να πω και πριν και το ξέχασα. Με την μετάβαση, δεν ξέρω αν το call σου θα συνεχίσει κανονικά. Για τον απλούστατο λόγο ότι θα αλλάξει η public IP σου. Επίσης όσα connections είχαν state established και related θα πρέπει να γίνουν από την αρχή.

Βέβαια αντίστοιχη δοκιμή που έχω κάνει στο android, κλήση μέσω viber και εναλλαγή από data σε wifi έπαιξε κανονικά με μια μικρή διακοπή φυσικά.