C
Carl
Ambitioniertes Mitglied
- 9
Vorwort:
Da mein Router über kein NAT-Loopback verfügt, brauche ich zu hause einen eigenen DNS-Server um auch von innerhalb über die normale URL auf meinen (owncloud) Web-Server zuzugreifen.
Klappt wunderbar, nur mit Android war die Umstellung auf diesen DNS-Server schwierig - daher möchte ich hier darüber berichten, vielleicht nutzt es ja jemandem was.
Zunächst sei gesagt: Ja, es gibt diverse Root-Apps, die behaupten, jenes bewerkstelligen zu können. Bei mir funktionierte keine einzige. Ich vermute, es liegt daran, dass man normalerweise schlicht nicht merkt, ob man DNS Server A oder DNS Server B benutzt.
Tatsächlich half mir folgender Eintrag bei XDA-Developers:
[Q] How to change dns in android 4.3 - Post #7 - XDA
Ich werde das zunächst mal auf Deutsch und vereinfacht darstellen und dann erklären, warum ausgerechnet diese Vorgehensweise so gut ist.
So geht es:
benötigtes Zubehör: Ein Root-File-Browser und Editor, z.B. Root-Explorer:
https://play.google.com/store/apps/details?id=com.speedsoftware.rootexplorer&hl=de
Vorgehensweise:
Man begebe sich zu und öffne /etc/dhcpcd/dhcpcd-hooks/20-dns.conf und erstelle sicherheitshalber ein Backup dieser Datei.
Normalerweise sieht diese wie folgt aus:
In der Variable new_domain_name_servers befindet sich eine Liste von DNServer, welche durch den DHCP mitgeteilt wurden.
Um einen eigenen DNS zu benutzen, muss man diesen der Liste also nur voranstellen. Man muss dazu ganz am Anfang der Funktion set_dns_props() die Variable entsprechend erweitern:
In diesem Beispiel wurden ein eigener, interner DNS mit IP 192.168.2.99 (mein Szenario, Achtung! Für eigene Verhältnisse anpassen oder weglassen!) mit Priorität 1 hinzugefügt und der Google DNS 8.8.8.8 mit Priorität 2, mit Priorität 3 und niedriger folgt die ursprüngliche durch den DHCP mitgeteilte Liste ($ liest den Inhalt der Variable aus.).
Natürlich geht auch nur ein einziger DNS oder drei, getrennt werden müssen diese jeweils durch Leerzeichen.
Insgesamt sieht die Datei dann also so aus:
Verbindung neu aufbauen oder Gerät neu starten, fertig!
Die eigenen DNS werden jetzt mit höchster Priorität verwendet, die per DHCP mitgeteilten mit niedrigerer Priorität.
Warum ist speziell dieses Vorgehen so gut?
1. Es ist im Unterschied zu diversen anderen Lösungen permanent. Einmal eingestellt, muss man nichts mehr machen.
2. Im Unterschied zu anderen Lösungen wird die Liste der per DHCP mitgeteilten DNS nicht verworfen, sondern nur mit einer niedrigeren Priorität verwendet. Das ist sehr nützlich, wenn der selbst definierte DNS mal nicht zur Verfügung steht.
3. Da das Interface in jenem Script als Variable geführt wird, muss man sich nicht darum kümmern, welches denn nun das wirklich verwendete ist. (Wer eine Übersicht der Interfaces sehen will, gebe mal "ip link" in ein Terminal auf dem Android Gerät ein..)
Wie gesagt, vielleicht nützt es ja jemandem.
Da mein Router über kein NAT-Loopback verfügt, brauche ich zu hause einen eigenen DNS-Server um auch von innerhalb über die normale URL auf meinen (owncloud) Web-Server zuzugreifen.
Klappt wunderbar, nur mit Android war die Umstellung auf diesen DNS-Server schwierig - daher möchte ich hier darüber berichten, vielleicht nutzt es ja jemandem was.
Zunächst sei gesagt: Ja, es gibt diverse Root-Apps, die behaupten, jenes bewerkstelligen zu können. Bei mir funktionierte keine einzige. Ich vermute, es liegt daran, dass man normalerweise schlicht nicht merkt, ob man DNS Server A oder DNS Server B benutzt.
Tatsächlich half mir folgender Eintrag bei XDA-Developers:
[Q] How to change dns in android 4.3 - Post #7 - XDA
Ich werde das zunächst mal auf Deutsch und vereinfacht darstellen und dann erklären, warum ausgerechnet diese Vorgehensweise so gut ist.
So geht es:
benötigtes Zubehör: Ein Root-File-Browser und Editor, z.B. Root-Explorer:
https://play.google.com/store/apps/details?id=com.speedsoftware.rootexplorer&hl=de
Vorgehensweise:
Man begebe sich zu und öffne /etc/dhcpcd/dhcpcd-hooks/20-dns.conf und erstelle sicherheitshalber ein Backup dieser Datei.
Normalerweise sieht diese wie folgt aus:
Code:
set_dns_props()
{
case "${new_domain_name_servers}" in
"") return 0;;
esac
count=1
for i in 1 2 3 4; do
setprop dhcp.${intf}.dns${i} ""
done
count=1
for dnsaddr in ${new_domain_name_servers}; do
setprop dhcp.${intf}.dns${count} ${dnsaddr}
count=$(($count + 1))
done
separator=" "
if [ -z "$new_domain_name" ]; then
separator=""
else
if [ -z "$new_domain_search" ]; then
separator=""
fi
fi
setprop dhcp.${interface}.domain "${new_domain_name}$separator${new_domain_search}"
}
Um einen eigenen DNS zu benutzen, muss man diesen der Liste also nur voranstellen. Man muss dazu ganz am Anfang der Funktion set_dns_props() die Variable entsprechend erweitern:
Code:
new_domain_name_servers="192.168.2.99 8.8.8.8 $new_domain_name_servers"
Natürlich geht auch nur ein einziger DNS oder drei, getrennt werden müssen diese jeweils durch Leerzeichen.
Insgesamt sieht die Datei dann also so aus:
Code:
set_dns_props()
{
new_domain_name_servers="192.168.2.99 8.8.8.8 $new_domain_name_servers"
case "${new_domain_name_servers}" in
"") return 0;;
esac
count=1
for i in 1 2 3 4; do
setprop dhcp.${intf}.dns${i} ""
done
count=1
for dnsaddr in ${new_domain_name_servers}; do
setprop dhcp.${intf}.dns${count} ${dnsaddr}
count=$(($count + 1))
done
separator=" "
if [ -z "$new_domain_name" ]; then
separator=""
else
if [ -z "$new_domain_search" ]; then
separator=""
fi
fi
setprop dhcp.${interface}.domain "${new_domain_name}$separator${new_domain_search}"
}
Die eigenen DNS werden jetzt mit höchster Priorität verwendet, die per DHCP mitgeteilten mit niedrigerer Priorität.
Warum ist speziell dieses Vorgehen so gut?
1. Es ist im Unterschied zu diversen anderen Lösungen permanent. Einmal eingestellt, muss man nichts mehr machen.
2. Im Unterschied zu anderen Lösungen wird die Liste der per DHCP mitgeteilten DNS nicht verworfen, sondern nur mit einer niedrigeren Priorität verwendet. Das ist sehr nützlich, wenn der selbst definierte DNS mal nicht zur Verfügung steht.
3. Da das Interface in jenem Script als Variable geführt wird, muss man sich nicht darum kümmern, welches denn nun das wirklich verwendete ist. (Wer eine Übersicht der Interfaces sehen will, gebe mal "ip link" in ein Terminal auf dem Android Gerät ein..)
Wie gesagt, vielleicht nützt es ja jemandem.