Το αρχείο hosts σε υπολογιστές με Windows χρησιμοποιείται για τη δέσμευση ορισμένων συμβολοσειρών ονόματος σε συγκεκριμένες διευθύνσεις IP, ώστε να παρακαμφθούν άλλες μέθοδοι επίλυσης ονομάτων.
Συχνά, κάποιος αποφασίζει να αλλάξει το αρχείο hosts και ανακαλύπτει ότι οι αλλαγές αρνούνται να τεθούν σε ισχύ ή ότι ακόμη και παλιές καταχωρήσεις του αρχείου hosts αγνοούνται στη συνέχεια. Αυτό μπορεί να το προκαλέσουν διάφορα λάθη, και μπορεί να είναι απογοητευτικό να καταλάβετε ποιο από αυτά.
Όταν αντιμετωπίζετε το πρόβλημα ότι τα Windows αγνοούν ένα αρχείο hosts, ποιο είναι ένα ολοκληρωμένο πρωτόκολλο αντιμετώπισης προβλημάτων που μπορεί να ακολουθηθεί;
Αυτή η ερώτηση έχει επαναλήψεις στο SO, όπως https://serverfault.com/questions/50934/hosts-file-being-ignored.
Ωστόσο, αυτές τείνουν να ασχολούνται με μια συγκεκριμένη περίπτωση, και μόλις διαπιστωθεί το όποιο λάθος έκανε ο OP, η συζήτηση τελειώνει. Αν δεν τυχαίνει να έχετε κάνει το ίδιο λάθος, μια τέτοια συζήτηση δεν είναι πολύ χρήσιμη. Έτσι σκέφτηκα ότι θα ήταν πιο χρήσιμο να υπάρχει ένα γενικό πρωτόκολλο για την επίλυση όλων των θεμάτων που σχετίζονται με τους hosts, το οποίο θα καλύπτει όλες τις περιπτώσεις.
Με βάση τη δική μου εμπειρία και όσα συνάντησα ψάχνοντας στο Google, εδώ είναι μερικά πράγματα που μπορείτε να δοκιμάσετε:
Οι αλλαγές στους κεντρικούς υπολογιστές θα πρέπει να τίθενται σε ισχύ αμέσως, αλλά τα Windows αποθηκεύουν προσωρινά τα δεδομένα ανάλυσης ονομάτων, οπότε για κάποιο χρονικό διάστημα ενδέχεται να χρησιμοποιούνται οι παλιές εγγραφές. Ανοίξτε μια γραμμή εντολών (Windows+R, cmd
, Enter) και πληκτρολογήστε:
ipconfig /flushdns
Για να εγκαταλείψετε τα παλιά δεδομένα. Για να ελέγξετε αν λειτουργεί, χρησιμοποιήστε (υποθέτοντας ότι έχετε μια καταχώρηση ipv4 στους hosts σας για το www.example.com, ή μια καταχώρηση ipv6 στους hosts σας για το ipv6.example.com):
ping www.example.com -n 1
ping -6 ipv6.example.com -n 1
Και δείτε αν χρησιμοποιεί τη σωστή IP. Αν ναι, το αρχείο hosts είναι εντάξει και το πρόβλημα βρίσκεται αλλού. Επίσης, μπορείτε να επαναφέρετε την cache του NetBios με (ανοίξτε την κονσόλα ως διαχειριστής, αλλιώς θα αποτύχει):
nbtstat -R
Μπορείτε να ελέγξετε τα τρέχοντα δεδομένα στην κρυφή μνήμη DNS με:
ipconfig /displaydns | more
hosts
και όχι host
κ.λπ.hosts
και όχι hosts.txt
) - προσέξτε αν έχετε ρυθμίσει τα windows να αποκρύπτουν γνωστές επεκτάσεις, ελέγξτε τις ιδιότητες για να είστε σίγουροι: Ο σωστός τύπος του αρχείου hosts's θα εμφανίζεται απλά ως "File".#
) που υποδηλώνει σχόλια;www.example.com
και example.com
- το ασφαλέστερο είναι να προσθέσετε και τις δύο);Η μορφή για κάθε γραμμή είναι διεύθυνση IP
, στη συνέχεια ένα οριζόντιο tab (κωδικός διαφυγής \t
, ASCII HT
, hex 0x09
) ή ένα απλό κενό (hex 0x20
), στη συνέχεια το όνομα του κεντρικού υπολογιστή, δηλαδή www.example.com
, και τέλος ένα carriage return ακολουθούμενο από ένα line feed, (κωδικοί διαφυγής \r\n
, ASCII CRLF
, hex 0x0d 0x0a
).
Δείγμα καταχωρήσεων, με χρήση εικόνων ελέγχου Unicode για την ένδειξη χαρακτήρων ελέγχου. (Μην τα αντιγράψετε και επικολλήσετε στο αρχείο hosts!)
192.0.2.1␉www.example.com␍␊
2001:db8:8:4::2␉ipv6.example.com␍␊
Τα μεμονωμένα bytes μπορούν να προβληθούν στο Notepad++ με το hex editor plugin. Το Notepad++ θα εμφανίσει επίσης ειδικούς χαρακτήρες (View -> Show Symbol), ώστε να μπορείτε εύκολα να επιθεωρήσετε τον αριθμό και το είδος των χαρακτήρων λευκού χώρου. Εάν αντιγράψατε και επικολλήσατε καταχωρήσεις οικοδεσποτών από κάπου, μπορεί να καταλήξετε με πολλαπλά κενά. Θεωρητικά οι hosts υποστηρίζουν πολλαπλά κενά που χωρίζουν τις δύο στήλες, αλλά είναι ένα άλλο πράγμα που μπορείτε να δοκιμάσετε αν δεν λειτουργεί τίποτα άλλο. Για να είστε σίγουροι, βεβαιωθείτε ότι όλες οι γραμμές στο αρχείο hosts χρησιμοποιούν είτε tabs είτε κενά, όχι και τα δύο. Τέλος, τερματίστε το αρχείο με μια κενή γραμμή.
Υπάρχει ένα κλειδί μητρώου που καθορίζει τη θέση του αρχείου hosts. Υποτίθεται ότι τα Windows δεν υποστηρίζουν πραγματικά την τοποθέτηση του αρχείου hosts σε άλλες τοποθεσίες, αλλά ίσως να θέλετε να το ελέγξετε. Το κλειδί είναι το εξής:
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DataBasePath
Η καταχώρηση θα πρέπει να είναι η εξής:
%SystemRoot%\System32\drivers\etc
Μερικές φορές υπάρχουν προβλήματα με τα δικαιώματα στο αρχείο, τα χαρακτηριστικά του αρχείου και παρόμοια πράγματα. Για να δημιουργήσετε ξανά το αρχείο με προεπιλεγμένα δικαιώματα:
hosts
.%SystemRoot%\System32\drivers\etc
και αντικαταστήστε το παλιό αρχείο.
Το τελευταίο σημείο είναι σημαντικό: Η αντιγραφή λειτουργεί, η μετακίνηση όχι.
Ο τοπικός λογαριασμός Users
πρέπει να μπορεί να διαβάσει το αρχείο hosts. Για να βεβαιωθείτε (στα Windows 7):%SystemRoot%\System32\drivers\etc
στην Εξερεύνηση των Windows.hosts
, βεβαιωθείτε ότι μπορείτε να δείτε τα κρυφά αρχεία και τα αρχεία συστήματος.hosts
και επιλέξτε Properties
από το μενού περιβάλλοντος.hosts Properties
, κάντε κλικ στην καρτέλα Security
(Ασφάλεια).Ονόματα ομάδων ή χρηστών:
. Εάν υπάρχει το %COMPUTERNAME%\Users
, κάντε κλικ σε αυτό για να δείτε τα δικαιώματα.Users
δεν υπάρχει ή υπάρχει αλλά δεν έχει δικαίωμα Read
, κάντε κλικ στο Edit...
.Users
, κάντε κλικ στο Add...
, πληκτρολογήστε Users
, κάντε κλικ στο Check Names
και κάντε κλικ στο OK ή πατήστε Enter.Users
και βεβαιωθείτε ότι το Read & execute
είναι επιλεγμένο στη στήλη Allow
. Κάντε κλικ στο OK. Εάν εμφανιστεί ένα πλαίσιο ειδοποίησης Ασφάλεια των Windows
, επιλέξτε Ναι
για να συνεχίσετε.Το αρχείο hosts θα πρέπει να είναι κωδικοποιημένο σε ANSI ή UTF-8 χωρίς BOM. Μπορείτε να το κάνετε αυτό με την επιλογή File -> Save As (Αποθήκευση ως).
Εάν έχετε ρυθμίσει έναν διακομιστή μεσολάβησης, μπορεί να παρακάμψει το αρχείο hosts. Η λύση είναι να μην χρησιμοποιήσετε τον μεσάζοντα ή να τον ρυθμίσετε ώστε να μην το κάνει αυτό.
Για να το ελέγξετε, μεταβείτε στον Internet Explorer -> Επιλογές Internet -> Συνδέσεις -> Ρυθμίσεις LAN. Εάν όλα είναι κενά και το "Αυτόματος εντοπισμός ρυθμίσεων" είναι επιλεγμένο, δεν χρησιμοποιείτε διακομιστή μεσολάβησης.
Εάν βασίζεστε σε έναν διακομιστή μεσολάβησης για την πρόσβαση στο διαδίκτυο και συνεπώς δεν θέλετε να τον απενεργοποιήσετε, μπορείτε να προσθέσετε εξαιρέσεις πηγαίνοντας στον Internet Explorer -> Επιλογές Internet -> Συνδέσεις -> Ρυθμίσεις LAN -> Διακομιστής μεσολάβησης / Για προχωρημένους. Στη συνέχεια, προσθέστε τις εξαιρέσεις σας στο πλαίσιο κειμένου Εξαιρέσεις. Π.χ. localhost;127.0.0.1;*.dev
(Αυτό μπορεί επίσης να επιλύσει προβλήματα μεσολάβησης).
Μεταβείτε στις ιδιότητες των συνδέσεων δικτύου, στη συνέχεια στις ρυθμίσεις TCP/IP και αλλάξτε τον πρώτο διακομιστή DNS σε 127.0.0.1
(localhost). Ο δεύτερος θα πρέπει πιθανότατα να είναι η πραγματική σας IP DNS's.
Αυτό δεν είναι απαραίτητο για να λειτουργήσει το αρχείο hosts, αλλά μπορεί να βοηθήσει στην περίπτωσή σας, αν κάτι έχει ρυθμιστεί περίεργα.
Εάν χρησιμοποιείτε μια καταχώρηση .local domain με τη μορφή myhost.local και αγνοείται, δοκιμάστε τα εξής
x.x.x.x myhost.local www.myhost.local
ακόμη και αν το www.myhost.local δεν υπάρχει. Τα Windows με κάποιο τρόπο δεν προσθέτουν την ομάδα εργασίας ή το τοπικότομέα της.
Βεβαιωθείτε ότι έχετε βάλει πρώτα τη διεύθυνση ipaddress και στη συνέχεια το "domain" όπως παρακάτω:
127.0.0.1 bo.dev
127.0.0.1 www.bo.dev
Στις δικές μου περιπτώσεις δοκίμασα το αρχείο που δημιούργησαν τα Windows 7: C:\Windows\System32\drivers\etc\hosts.ics.
hosts.ics:
# This file has been automatically generated for use by Microsoft Internet
# Connection Sharing. It contains the mappings of IP addresses to host names
# for the home network. Please do not make changes to the HOSTS.ICS file.
# Any changes may result in a loss of connectivity between machines on the
# local network.
Ως αποτέλεσμα, τα Windows αγνοούν τις ρυθμίσεις στο C:\Windows\System32\drivers\etc\hosts και τις χρησιμοποιούν από το hosts.ics.