Έχω βάλει σε ένα VM (virtualbox) το Parrot OS 5 Home. Έχω ενεργοποιήσει και το anonsurf αλλά αν δεν τρέχει δεν έχω internet. Μόνο όταν τρέχει το anonsurf έχω internet και βέβαια είναι μέσα από το Tor δίκτυο που είναι πολλή αργό. Έχω τσεκάρει τις ρυθμίσεις της κάρτας δικτύου και φαίνονται όλα σωστά. Πού αλλού μπορώ να ψάξω?
└──╼ #ip address show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:8e:d2:5c brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute enp0s3
valid_lft 86126sec preferred_lft 86126sec
Πολλά πράγματα τσακώνονται για το ποιος θα έχει τον έλεγχο του αρχείου /etc/resolv.conf. Δες
Αν φτιάξεις το αρχείο με το χέρι συνήθως τίποτα δεν το πειράζει, αλλά λέω συνήθως.
Από το παραπάνω άρθρο
Αν λοιπόν ξεκινήσεις την υπηρεσία systemd-resolved.service και αυτό δεν υπάρχει θα το φτιάξει. Μια λύση είναι πριν ξεκινάς το anonsurf (για το οποίο δεν έχω την παραμικρή ιδέα τι είναι και πως δουλεύει και πρέπει να υπάρχει καλύτερος τρόπος) να σβήνεις το αρχείο και όταν το σταματάς να ξεκινάς το systemd-resolved.service
Μάλλον έχει bugs το anonsurf, έτσι τουλάχιστον όπως το έχουν βάλει οι προγραμματιστές στο ParrotOS (το έχω εγκαταστήσει manual σε ubuntu και δεν είχα τέτοια θέματα).
Φτιάχνω manually το resolv.conf και παίζει μια χαρά το internet:
Το πρόβλημα δεν είναι το start, το πρόβλημα είναι το stop που σβήνει εντελώς το αρχείο /etc/resolv.conf με αποτέλεσμα:
┌─[user@Parrot5VM]─[~]
└──╼ $/usr/sbin/service resolvconf start
Failed to start resolvconf.service: Unit resolvconf.service not found.
┌─[✗]─[user@Parrot5VM]─[~]
└──╼ $/usr/bin/dnstool address dhcp
[!] /etc/resolvconf/resolv.conf.d/tail is not writable. Did you try sudo?
/run/resolvconf/resolv.conf doesn't exist. Maybe resolvconfig is not running.
[DNS error] File resolv.conf not found
[*] Applied DNS settings
…και το πιο περίεργο είναι ότι στις ρυθμίσεις δικτύου από το GUI φαίνονται μια χαρά οι nameservers.
Το πρόβλημα είναι αυτή ακριβώς η εντολή τότε. Αυτό που κάνει το dnstool address dhcp είναι διαγράφει το resolv.conf και το κάνει link στο generated του resolvconf το οποίο ωστόσο δεν τρέχει (και μάλιστα δεν υπάρχει καν).
'Όπως έχω δείξει στα άρθρα που ανέφερα παραπάνω, τι ακριβώς παρέχει το DNS resolution σε μια διανομή είναι αρκετά πολύπλοκο και διαφέρει από διανομή σε διανομή. Αν τη μία στιγμή έχεις το TOR την άλλη το annonsurf την άλλη κάτι άλλο, θα γίνει ένας μικρός χαμούλης.
Θα κοίταζα τι παρέχει DNS τη διανομή μου και θα προσπαθούσα όταν έχει νόημα να έχω το ίδιο. Διαφορετικά σταματάω και ξεκινώ την αντίστοιχη υπηρεσία, αφού πρώτα έχω φτιάξει το /etc/resolv.conf. Συνήθως αυτό είναι symlink κάπου άλλου.
Για παράδειγμα, στο σύστημα μου με systemd-resolve έχω
( … που τρέχει ένα nameserver στο 127.0.0.53 που είναι ρυθμισμένο να μεταφέρει το ερώτημα σε ένα PiHole, που με την σειρά του χρησιμοποιεί το unbound όπως δείχνω σε αυτό το άρθρο και δε χρησιμοποιώ κανένα γνωστό DNS Server να με καταγράφει. Δουλεύει )
Βασικά το τι συμβαίνει φαίνεται στο λινκ που έδωσα στο πρώτο ποστ.
Όταν τρέξει το anonsurf start αυτό τρέχειservice anonsurfd start το οποίο με τη σειρά του τρέχειanondaemon start.
Το anondaemon start αρχικά χρησιμοποιεί το dnstool address 127.0.0.1για να γράψει (αφότου διαγράψει το παλιό) ένα resolv.conf με μοναδική διεύθυνση το argument που δόθηκε. Στη συνέχεια αποθήκευει τους υπάρχοντας IPTables κανόνες και φτιάχνει νέους που κάνουν redirect όλη τη κίνηση μέσω TOR.
Μέχρι εδώ καλά.
Όμοια, όταν τρέξει το anonsurf stop αυτό τρέχειservice anonsurfd stop το οποίο με τη σειρά του τρέχειanondaemon stop.
Το anondaemon stop αρχικά επαναφέρει τους κανόνες παλιούς IPTables κανόνες. Στη συνέχεια τρέχει το dnstool address dhcpτο οποίο διαγράφει το resolv.conf και δημιουργεί ένα λινκ από /etc/resolv.conf σε /run/resolvconf/resolv.conf. Όμως το resolvconf δεν υπάρχει και εμφανίζει το error χωρίς να δημιουργήσει κανένα resolv.conf (οπότε κι εμφανίζει το δεύτερο error).
Αυτά τα καλά που έχει το OpenSource… μπορείς να εντοπίσεις από το κώδικα το πρόβλημα, ασχέτως αν δεν μπορείς άμεσα να το λύσεις. Απλά, θα πρέπει να είσαι προγραμματιστής, με σχετική εμπειρία στο να διαβάζει κώδικα τρίτων, να γνωρίζεις C, VB, script, commands, και ένα σωρό άλλα παρόμοια, και να έχεις το χρόνο, την υπομονή και την “τρέλα” για να ασχοληθείς με αυτά.
Συμπέρασμα (κατά την δική μου γνώμη): αυτός είναι ένας από τους βασικούς λόγους όπου το Linux (που βασίζεται πολλή στο OpenSource) δεν θα γίνει ποτέ Windows (σε δημοτικότητα)!
Ναι είναι bug αλλά δεν βρίσκω που μπορεί να γίνει report. Βασικά η λύση (πέρα από το να κάνεις restart το NetworkManager[^1]) είναι είτε να εγκατασταθεί το resolvconf που λείπει, με:
sudo apt install resolvconf
sudo resolvconf -u
είτε να τροποποιηθεί το dnstool ώστε να χρησιμοποιεί το NetworkManager. Λογικά το καλύτερο είναι το τελευταίο εφόσον το dnstool χρησιμοποιείται έτσι κι αλλιώς.
[^1]: Το οποίο εφόσον δουλεύει μπορείς να πετάξεις την εντολή στο anondaemon στη θέση του dnstool address dhcp για να μην χρειάζεται να το κάνεις χειροκίνητα.