Προς το περιεχόμενο

Hostnames σε LAN


JohnL

Προτεινόμενες αναρτήσεις

Εγκαθιστώντας linux, είδα ότι αυτό δεν κάνει resolve τα ονόματα των Windows PC ως hostnames, αντίθετα με τα άλλα Windows, που δίνοντας π.χ. ping server, αναγνωρίζει ότι το PC server βρίσκεται στην 192.168.1.10 και το pingάρει κανονικά.

 

Να υποθέσω ότι αυτό είναι κάποια "πατέντα" της Microsoft?

 

Ποιός είναι ο σωστός τρόπος να γίνει ώστε να φάινεται και από linux, όπως και να φαίνονται τα ονοματα των linux PC σε Windows PC?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το μεγαλύτερο ποσοστό των λειτουργικών συστημάτων τύπου Linux/Unix δεν γνωρίζουν το hostname των υπολοίπων συστημάτων που βρίσκονται στο LAN εκτος και εαν τους το "πείς" εσυ. Συνήθως χρεάζονται μερικές επιπλέον γραμμές στο αρχείο /etc/hosts :

 

>
192.168.1.1  node1
192.168.1.2  node2

 

για να μην έχεις πρόβλημα με network προγράμματα όπως το ping που για το destination μπορούν να πάρουν αντί για IP adress και το hostname.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Νομίζω οτι ισχύει το ίδιο όπως και στο Unix/Linux, με τη διαφορά οτι το αρχείο λέγεται hosts.dat και βρισκεται ή πρέπει να υπάρχει στο c:\windows\system32\drivers\etc directory.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Να υποθέσω ότι αυτό είναι κάποια "πατέντα" της Microsoft?

Ναι, απλά ο resolver των windows ελέγχει και τα NetBios names. Το NetBIOS σε καμία περίπτωση δεν είναι σωστή λύση για name resolution.

 

Ποιός είναι ο σωστός τρόπος να γίνει ώστε να φάινεται και από linux, όπως και να φαίνονται τα ονοματα των linux PC σε Windows PC?

Σε μικρά δίκτυα μπορείς να κάνεις αυτό που είπε ο pinball_elf. Σε μεγάλα δίκτυα ή σε δίκτυα που αλλάζουν τακτικά οι αντιστοιχίες ονομάτων-διευθύνσεων, ο σωστός τρόπος είναι μέσω DNS. Δηλαδή να στήσεις έναν DNS server και να ορίσεις σε όλα τα μηχανήματα του δικτύου να ρωτάνε αυτόν για το resolution.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

a. Μπορώ κάπως να απενεργοποιήσω το να ελέγχει αυτά τα NetBios names?

 

b. Έστησα ένα DNS Server σε Windows Server 2003. Γίνεται να ρυθμίσω τους υπολογιστές να στέλνουν κατευθείαν σε αυτόν το όνομά τους ώστε να ανανεώνεται η λίστα αυτόματα και όχι χειροκίνητα?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

a. Μπορώ κάπως να απενεργοποιήσω το να ελέγχει αυτά τα NetBios names?

1ο αποτέλεσμα του google για disabling+netbios:

http://www.petri.co.il/disable_netbios_in_w2k_xp_2003.htm

 

b. Έστησα ένα DNS Server σε Windows Server 2003. Γίνεται να ρυθμίσω τους υπολογιστές να στέλνουν κατευθείαν σε αυτόν το όνομά τους ώστε να ανανεώνεται η λίστα αυτόματα και όχι χειροκίνητα?

Στο Linux το ορίζεις στο αρχείο /etc/resolv.conf.

 

Π.χ.

>nameserver 1.2.3.4

όπου 1.2.3.4 η διεύθυνση στην οποία ακούει ο DNS server.

 

Στα windows ορίζεις τη διεύθυνση του DNS server στα properties του network interface.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

a. ok, ξέχασα το google για λίγο :)

 

b. Αυτό ξέρω πως γίνεται. Το αντίθετο με ενδιαφέρει πώς γίνεται... Δηλαδή, υποθετικά, σε ένα δίκτυο με πολλούς υπολογιστές δε γίνεται η λίστα των hosts να ανανεώνεται δυναμικά χωρίς να πρέπει ο administrator να την αλλάζει χειροκίνητα?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

εε, αναγκαστικά θα πρέπει να το περάσει ο administrator τα hostnames στον DNS server, αλλιώς από ποια πληροφορία θα μπορούσε να τα σκαρφιστεί μόνος του; Βέβαια, αν μιλούσαμε για server με λειτουργικό σαν το Linux και μπορούσες να σκεφτείς μια τέτοια πληροφορία, η οποία να υπάρχει κάπου, μοναδική για κάθε μηχάνημα, θα μπορούσε σχετικά εύκολα να αυτοματοποιηθεί η διαδικασία ώστε να εισάγονται hostnames στον DNS server, βασισμένα σε αυτή την πληροφορία.

 

Όμως αφενός τα windows δεν είναι τόσο ευέλικτα και αφετέρου δε μπορώ να σκεφτώ καμιά τέτοια βολική πληροφορία που να υπάρχει έτοιμη σε ένα τυπικό δίκτυο (εκτός ξέρω γω αν θέλεις να παίρνεις το τελευταίο octet της IP διεύθυνσης κάθε host και να περνιούνται αυτόματα ονόματα με τη μορφή host123.domain, ή κάτι τέτοιο).

 

Αλλά μπορεί να μην κατάλαβα τι έχεις στο μυαλό σου, αν θέλεις περίγραψε πώς ακριβώς το φαντάζεσαι και ποια βαβούρα θέλεις να αποφύγεις ;)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το όνομα υπολογιστή τι χρησιμεύει τότε? Τόσο το linux (νομίζω) όσο και τα windows δεν έχουν τέτοια ρύθμιση?

 

Βασικά η απορία μου δημιουργήθηκε επειδή ο DNS server των Windows 2003 αναφέρεται σε Dynamic Updates (screenshot συνημμένο).

post-28055-129062952484_thumb.jpg

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Όντώς, έχεις δίκιο, το τοπικό hostname μπορεί να χρησιμοποιηθεί!

 

Όμως δεν έχω ασχοληθεί με τα Windows και δε ξέρω πώς θα μπορούσες να τραβήξεις και να στείλεις το τοπικό hostname τους εκεί που θέλεις.

 

Στο Linux μπορείς εύκολα να πάρεις το hostname και να το κάνεις ό,τι θέλεις μέσα από το shell και τα εργαλεία του. Όμως δεν είμαι σίγουρος τι μέθοδο χρησιμοποιεί για τα dynamic updates ο MS DNS server, οπότε και πάλι δε ξέρω αν γίνεται να συνδεθείς στον microsoft server για να του στείλεις τα updates και πώς.

 

Αν χρησιμοποιούσες έναν DNS server βασισμένο σε κάποιο γνωστό σύστημα βάσης (π.χ. LDAP, PostgreSQL, MySQL, κλπ) θα μπορούσες να κάνεις τις ανανεώσεις σου απευθείας με ένα απλό shell script το οποίο είτε θα εκτελούταν ανά τακτά διαστήματα από το crontab, ή όταν καλούταν η εντολή "hostname" ή "ifconfig" (οι οποίες χρησιμοποιούνται για να αλλάξει το τοπικό hostname και η ip address αντίστοιχα). Π.χ. για ένα τέτοιο setup για server που χρησιμοποιεί MySQL, θα μπορούσες να φτιάξεις ένα script, έστω αποθηκευμένο στο /usr/sbin/dns_update, κάπως έτσι:

#!/bin/sh

 

dbname=dns

dbuser=user

dbpass=password

 

oldhostname=$(/usr/bin/mysql -u $dbuser -p$dbpass -h x.x.x.x -e "select name from dns.records WHERE content='1.2.3.4' \

AND type='A';"|sed -n "2p")

hostname=$(hostname)

 

oldaddress=$(/usr/bin/mysql -u $dbuser -p$dbpass -h x.x.x.x -e "select content from dns.records WHERE name='$hostname' \

AND type='A';"|sed -n "2p") address=$(/sbin/ifconfig eth0 | sed -n "2p" | sed -e "s/:/ /g" | awk '{print $3}')

 

if [ "$1" == "hostname_change" ]; then

 

if [ "$oldhostname" != "$hostname" ]; then

/usr/bin/mysql -u $dbuser -p$dbpass -h x.x.x.x -e "update dns.records set name = '$hostname' WHERE content='1.2.3.4' AND type='A';";

fi

elif [ "$1" == "address_change" ]; then

if [ "$oldaddress" != "$address" ]; then

/usr/bin/mysql -u $dbuser -p$dbpass -h x.x.x.x -e "update dns.records set content = '$hostname' WHERE name='$hostname' AND type='A';";

fi

fi

 

# chmod +x /usr/sbin/dns_update

# echo "alias ifconfig='/usr/sbin/dns_update -ip_change'; ifconfig" >> /etc/profile

# echo "alias ifconfig='/usr/sbin/dns_updater -hostname_change'; hostname" >> /etc/profile

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...