ubuntuusers.de

ubuntuusers.deWikihosts

hosts

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Die Datei /etc/hosts wird benutzt, um Rechnernamen in IP-Adressen aufzulösen – wenn kein Nameserver im lokalen Netzwerk vorhanden ist. Nach der Installation eines Ubuntu-Rechners mit dem Rechnernamen "jupiter" sieht die Datei so aus:

127.0.0.1     localhost
127.0.1.1     jupiter

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Der obere Teil definiert den localhost und den Rechnernamen. Ab Ubuntu 6.06 kommen noch ein paar Zeilen für IPv6 hinzu.

Namensauflösung

Wie schon beschrieben kann die /etc/hosts auch dazu benutzt werden, Rechner im Netzwerk über ihren Namen anstatt über ihre IP-Adresse anzusprechen. Besteht das lokale Netzwerk z.B. aus 3 Rechnern mit den Namen

  • jupiter (192.168.0.1 - dieses System)

  • mars (192.168.0.2)

  • saturn (192.168.0.3)

muss in der /etc/hosts mit Root-Rechten [1] folgendes eingetragen [2] werden:

127.0.0.1      localhost
127.0.1.1      jupiter

# <IP-Adresse>  <Rechnername(n)>
192.168.0.1    jupiter.homenetwork jupiter
192.168.0.2    mars.homenetwork mars
192.168.0.3    saturn.homenetwork saturn

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Dadurch können die Rechner "mars" und "saturn" über ihren Namen vom Rechner "jupiter" aus angesprochen werden.

IP-Adressen umleiten

Darüber hinaus lässt sich durch eigene Einträge ein einfacher, aber effektiver systemweiter Blocker realisieren. Dazu werden einfach zeilenweise weitere Namen (oder IP-Adressen) mit localhost verbunden. Beispiel:

127.0.0.1      localhost
127.0.1.1      jupiter

# <IP-Adresse>  <geblockte/r Name/n oder IP-Adresse/n)>
127.0.0.1      www.geblockte_domain.de

Damit werden alle Anfragen an www.geblockte_domain.de auf localhost umgeleitet und die Domain ist nicht mehr erreichbar. Nachteile dieses Verfahrens sind aber zum einen die aufwendige Pflege blockierter Namen und zum anderen die Verarbeitung sehr großer hosts-Dateien. Daher ist ein Proxy-Server auf Dauer die bessere Wahl. Eine weitere Möglichkeit besteht darin, über ein Skript {en} mehrere im Internet erhältliche regelmäßig aktualisierte hosts-Dateien herunterzuladen, diese zu kombinieren, sie z.B. um doppelte Einträge zu bereinigen und anschließend zu /etc/hosts hinzuzufügen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/bin/bash

# If this is our first run, save a copy of the system's original hosts file and set to read-only for safety
if [ ! -f ~/hosts-system ]
then
 echo "Saving copy of system's original hosts file..."
 cp /etc/hosts ~/hosts-system
 chmod 444 ~/hosts-system
fi

# Perform work in temporary files
temphosts1=`mktemp`
temphosts2=`mktemp`

# Obtain various hosts files and merge into one
echo "Downloading ad-blocking hosts files..."
wget -nv -O - http://winhelp2002.mvps.org/hosts.txt >> $temphosts1
wget -nv -O - http://hosts-file.net/download/hosts.txt >> $temphosts1
wget -nv -O - http://someonewhocares.org/hosts/hosts >> $temphosts1
wget -nv -O - "http://pgl.yoyo.org/as/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext" >> $temphosts1

# Do some work on the file:
# 1. Remove MS-DOS carriage returns
# 2. Delete all lines that don't begin with 127.0.0.1
# 3. Delete any lines containing the word localhost because we'll obtain that from the original hosts file
# 4. Delete any lines containing the word dropbox.com.
# 5. Replace 127.0.0.1 with 0.0.0.0 because then we don't have to wait for the resolver to fail
# 6. Scrunch extraneous spaces separating address from name into a single tab
# 7. Delete any comments on lines
# 8. Clean up leftover trailing blanks
# Pass all this through sort with the unique flag to remove duplicates and save the result
echo "Parsing, cleaning, de-duplicating, sorting..."

sed -e 's/\r//' -e '/^127.0.0.1/!d' -e '/localhost/d' -e '/dropbox.com/d' -e 's/127.0.0.1/0.0.0.0/' -e 's/ \+/\t/' -e 's/#.*$//' -e 's/[ \t]*$//' < $temphosts1 | sort -u > $temphosts2

# Combine system hosts with adblocks
echo Merging with original system hosts...
echo -e "\n# Ad blocking hosts generated "`date` | cat ~/hosts-system - $temphosts2 > ~/hosts-block

# Clean up temp files and remind user to copy new file
echo "Cleaning up..."
rm $temphosts1 $temphosts2
echo "Done."
echo
echo "Copy ad-blocking hosts file with this command:"
cp ~/hosts-block /etc/hosts
echo
echo "You can always restore your original hosts file with this command:"
echo "cp ~/hosts-system /etc/hosts"
echo "so don't delete that file! (It's saved read-only for your protection.)"

Das Skript ersetzt bei den zu blockierenden Einträgen die IP-Nummer 127.0.0.1 durch 0.0.0.0, da dadurch erhebliche Geschwindigkeitsvorteile {en} zu erreichen sind. Das Skript sollte unter /root/gethosts gespeichert und ausführbar gemacht werden. Über einen symbolischen Link z.B. nach /etc/cron.daily oder /etc/cron.weekly kann es dann leicht automatisch ausgeführt werden.

Diese Revision wurde am 21. April 2013 00:18 von ubot erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Netzwerk