Kann ich DNS-Überschreibungen erstellen, die dem Schreiben in / etc / hosts ohne Root-Zugriff ähneln?

48

Ich möchte einen DNS-Datensatz festlegen, den mein Browser verwendet, habe jedoch keinen Root-Zugriff, sodass ich keine Änderungen vornehmen kann /etc/hosts. Ich muss dies tun, um vhosts mit Apache zu testen, dessen DNS noch nicht eingerichtet wurde. Ich habe Zugriff auf Firefox und Chrome. Wenn es also ein Plug-In gibt, das dies erleichtern könnte. oder andere Optionen sind hilfreich.

update: die alternative zum überschreiben des dns besteht wahrscheinlich darin, die htp-header zu ändern. wenn die richtigen an apache gesendet werden, sollte der richtige inhalt zurückgegeben werden.

Xenoterracid
quelle
1
Die letzte Zeile ist unklar. Auch würde dies nicht mehr in SF passen?
Tshepang
@tshepang ... nein, weil ich das auf einem Linux-Desktop machen muss?
Xenoterracide
1
Immer noch nicht so klar. Was bedeutet "oder andere hilfreiche Optionen" genau? Lass mich nicht raten.
Tshepang
3
@tshepang Ich weiß nicht, wonach ich suche ... wenn ich wüsste, warum ich fragen würde? Möglicherweise gibt es Optionen, die ich nicht berücksichtigt habe. Ich habe das Gefühl, dass Sie mich bitten, zu erklären, wie virtuelle Apache-Hosts, http und dns zusammenarbeiten.
Xenoterracide
Ich denke, Sie suchen dies: unix.stackexchange.com/a/104511/135943
Wildcard

Antworten:

65

Ich suchte nach einer Möglichkeit, ein Programm mit geänderter DNS-Auflösung zu Testzwecken auszuführen. Für mich verwendete die Lösung die HOSTALIASESUmgebungsvariable:

$ echo "foo www.google.com" >> ~/.hosts
$ HOSTALIASES=~/.hosts wget foo

Sehen hostname(7).

(Randnotiz: Im Beispiel HOSTALIASESwirkt sich die Umgebungsvariable nur auf den wgetProzess aus. Natürlich können Sie export HOSTALIASESsie für alle Unterprozesse der aktuellen Shell wirksam werden lassen.)

matlehmann
quelle
1
Eigentlich sollte das + 10k sein, leider kann ich dir nur +1 geben
Xenoterracide
Genau! + 10k !!
Anders Hansson
3
Danke vielmals! Das Beispiel sollte prepend exportin den meisten Fällen: export HOSTALIASES=~/.hosts.
Ezequiel-Garzon
8
Es scheint nur Hosts zu Hosts Alias ​​zu unterstützen, nicht IP und Hosts können nicht "." enthalten.
Netawater
Gibt es die gleiche Lösung für Windows?
Akceptor
10

Sie können einen Wrapper um die libc-Funktion schreiben, um Hostnamen aufzulösen und sie in einer anderen Datei als / etc / hosts nachzuschlagen. Führen Sie dann eine beliebige Anwendung aus, mit der Sie Ihre hosts-Datei verwenden möchten

LD_PRELOAD=wrapper.so firefox
chris
quelle
4
Am nützlichsten ist es, wenn Sie Ihren Wrapper so einrichten, dass er die Öffnung von /etc/nsswitch.confto umleitet ~/.nsswitch.confund eine ~/.nsswitch.confAbfrage für Ihre DNS-Datenbanken erstellt.
Gilles 'SO- hör auf böse zu sein'
6

Ich denke, der beste Weg, dies zu tun, wäre, einen SOCKS5-Proxy einzurichten und Firefox anzuweisen, die DNS-Anforderungen über den SOCKS5-Proxy (network.proxy.socks_remote_dns) zu senden. Sie könnten ziemlich einfach einen socks5-Proxy mit openssh einrichten (Option -D) und einen Remote-Host mit einer benutzerdefinierten / etc / hosts oder etwas wie DNSMasq für komplexere DNS-Einstellungen ausführen . Tatsächlich wird jedoch die Konfiguration der DNS-Einstellungen auf ein System übertragen, an dem Sie systemweit Änderungen vornehmen können.

jsbillings
quelle
leichter gesagt als getan, wenn man bedenkt, dass eine große Firewall errichtet wurde, die uns
davor bewahrt, auszusenden
5

Schauen Sie sich die folgende Frage beim Superuser an:

https://superuser.com/questions/184643/override-dns-in-firefox

Wenn die besprochenen Optionen und der SO-Link keine praktikablen Lösungen sind, überprüfen Sie Folgendes:

https://superuser.com/questions/100239/hostname-override-in-firefox

Besonders zu beachten:

https://addons.mozilla.org/en-US/firefox/addon/redirector/

Es hört sich so an, als ob dieses Addon helfen könnte - aber ich hänge von seiner tatsächlichen Implementierung ab.

maxschlepzig
quelle
Unglücklicherweise scheint keine dieser Operationen so realisierbar zu sein wie die Operation in dieser Frage.
Xenoterracide
@xenoterracide - Ich habe meine Antwort aktualisiert. Ist das Redirector-Add-On möglicherweise eine Option?
Maxschlepzig
Ich glaube nicht, wie es formuliert ist. Was ich wirklich tun muss, ist, die gesendeten HTTP-Header zu ändern. Als Alternative zum
Herumhacken
Ich habe mich in der SO-Lösung (TamperData) umgesehen, aber ich habe nicht verstanden, wie man den Host daran ändert. Ich frage mich, ob die Live-Funktion für http-Header es mir wirklich ermöglicht, Header zu ändern. Sie besagt, dass es ein Viewer ist.
Xenoterracide
Ich denke, dass die Modify Headers-Erweiterung, die ein wenig in der SO aufgelistet ist, funktioniert ... wenn Sie Host hostname verwenden ... darin ... noch nicht getestet ... außerhalb von Breaking Sites, die es verwenden.
Xenoterracide
2

Zum Testen von vhosts können Sie den Apache-Server in Firefox als Proxy festlegen. Der eingegebene Name wird an Apache weitergeleitet. Das Durchsuchen anderer Websites wird dadurch unterbrochen. Setzen Sie den Proxy zurück, wenn Sie fertig sind.

BillThor
quelle
0

Ich brauchte etwas Ähnliches für ssh, scp usw. für einen Server, der die IP alle paar Wochen ändert (und unsere IT hat einige Wochen Verspätung beim Einstellen des Hosts). Ich habe es mit einer speziellen Variablen für diesen Server gelöst: export FOO='131.227.aaa.bbbund dann kann ich einfach ssh bar@$FOOund ich ändere die IP in meinem, ~/.bashrcwann immer es sich ändert ...

BIOStheZerg
quelle
-2

Pech nicht, können Sie nicht, außer Sie schreiben Ihren eigenen Internetbrowser.

Wenn Sie einige Tests durchführen müssen, benötigen Sie eine Testmaschine, unabhängig davon, ob es sich um eine virtuelle oder eine reale Maschine handelt. Fragen Sie daher Ihren Unix-Administrator (oder Hosting-Anbieter), wie Sie eine Entwicklungsumgebung einrichten können.

Sie können auch eine VM auf Ihrem PC installieren, eine Linux-Distribution installieren, Apache und Ihre Änderungen testen (es ist nicht so schwer, wie es sich anhört).

Aktualisieren

Zur besseren Erklärung wird jede Anwendung mit den Standardbibliotheken geschrieben. Auf diese Weise muss niemand die Bibliothek auf niedriger Ebene und Funktionen wie gethostbyname () umschreiben.

Diese Funktionen sind normalerweise so eingestellt, dass sie Dateien (/ etc / hosts) und DNS verwenden. Wenn Sie also benötigen, dass Ihr Browser einen Namen auflöst, der unter / etc / hosts angegeben ist, haben Sie nicht allzu viele Alternativen .

  1. Sie können Ihren eigenen DNS-Server einrichten und fragen, wer über Root-Rechte zum Ändern der Datei /etc/resolve.conf verfügt
  2. Sie können einen Proxy-Server wie DeleGate installieren und einige Regeln für Ihren VirtualHost festlegen
  3. Fragen Sie nach den sudo-Rechten für diesen Kundenhost
  4. Ändern Sie das Verhalten der Anwendung, die Sie zum Testen der Verbindung verwenden (ich vermute, der Browser), z. B. https://addons.mozilla.org/en-US/firefox/addon/switchhosts/
mähen
quelle
4
-1 schlecht formuliert und bevormundend. Ich bin der Hosting-Anbieter und es ist die verdammte Kundenseite auf unserem Server, die ich testen muss. Wir haben ein Netzwerk-Boot-Linux, auf das ich keinen Administratorzugriff habe, und ich glaube nicht, dass ich eine VM darauf booten kann.
Xenoterracide
@xenoterracide gibt es nicht zu viel zu sagen. Es ist wirklich nicht realisierbar, wonach Sie fragen, es sei denn, Sie ändern die Art und Weise, wie ein SOCKET erstellt wird.
4.
1
@xenoterracide Übrigens gab es keine Absicht zu beleidigen.
Am
gut wie der Hosting-Provider ... Ich habe eigentlich "Sudo-Rechte", ich habe echte Wurzeln auf jeder Box und vollen Zugriff auf alles ... außer auf meinen Desktop (Eyeroll), aber wenn sie ihre Nameserver noch nicht ändern wollten .. Ich kann nicht helfen, dass ...
Xenoterracide
1
Mit LD_PRELOAD können Sie bestimmte 'Low Level'-Funktionen' überschreiben 'und tun, was Sie wollen, z. Erzählen Sie dem Programm von Ihrem eigenen "/ etc / hosts" open()und jedem anderen Aufruf auf niedriger Ebene. Solange das dynamische Laden von Code aktiviert ist (.so)
akira