![Wie erzwingt man die Auflösung des Hostnamens in eine lokale Adresse statt in eine öffentliche Adresse?](https://rvso.com/image/1585743/Wie%20erzwingt%20man%20die%20Aufl%C3%B6sung%20des%20Hostnamens%20in%20eine%20lokale%20Adresse%20statt%20in%20eine%20%C3%B6ffentliche%20Adresse%3F.png)
Ich habe einen Linux-Server in meinem Heimnetzwerk, der Dynamic DNS verwendet, bereitgestellt vonwww.noip.comund einen entsprechenden Hostnamen „xxxx.hopto.org“. Von außerhalb meines Netzwerks, beispielsweise in einem Café, kann ich diesen Hostnamen verwenden, um einen Ping- oder SSH-Zugang zu meinem Server zu erhalten. Wenn ich mich jedoch in meinem lokalen Netzwerk befinde, kann ich mit diesem Hostnamen weder einen Ping- noch einen SSH-Zugang zu meinem Server herstellen. Beim Ausführen host
zeigt sich, dass der Hostname meines Servers in seine öffentliche IP-Adresse aufgelöst wird, die mit der öffentlichen IP-Adresse meines Computers identisch ist:
MacBook-Air:~ user$ host xxxx.hopto.org
xxxx.hopto.org has address 47.6.24.149
MacBook-Air:~ user$ curl ipinfo.io/ip
47.6.24.149
Ich habe zwar keine wirklichen Kenntnisse im Bereich Netzwerkkonzepte, sehe aber zwei mögliche Lösungen für dieses Problem:
- Erzwinge die Auflösung des Hostnamens in die lokale (statische) IP-Adresse, wenn ich mich im selben Netzwerk wie der Server befinde.
- Geben Sie meinem Server irgendwie eine eigene öffentliche IP-Adresse.
Wie würde ich eines (oder beides) davon machen? Gibt es eine andere Lösung, die einfacher/besser wäre? Danke für Ihre Hilfe.
Antwort1
Erstens müssen Sie dies, wie AFH in einem Kommentar erwähnte, möglicherweise gar nicht tun, wenn Sie einfach über Ihre öffentliche IP-Adresse auf Ihre eigenen Dienste zugreifen möchten. Sie müssen Hairpin NAT (auch bekannt als NAT-Loopback) auf Ihrem Router aktivieren (oder einen Router besorgen, der dies unterstützt), damit Ihre eigene öffentliche IP von innerhalb Ihres Netzwerks aus erreicht werden kann. Dies ist die beste Lösung, wenn Ihre Netzwerkinfrastruktur damit umgehen/sie konfigurieren kann (alles, was nicht für den Privatgebrauch gedacht ist, sollte dazu problemlos in der Lage sein).
Wenn Sie sich dennoch für den DNS-Ansatz entscheiden, lautet der FachbegriffSplit-Horizon-DNS, wo Sie eine andere DNS-Antwort basierend auf der Quelladresse der Anfrage wünschen. Leider bieten die meisten dynamischen DNS-Server dies nicht an, und Sie haben nicht die erforderliche Kontrolle. Sie haben also am Ende zwei Möglichkeiten:
- Richten Sie einen benutzerdefinierten autoritativen DNS-Server für Ihre Domain auf einem öffentlich erreichbaren Server (z. B. einem VPS) ein, oder
- Richten Sie einen DNS-Forwarder ausschließlich innerhalb Ihres lokalen Netzwerks ein (ähnlich dem, der in den meisten Consumer-Routern eingebaut ist)
Der zweite Ansatz ist wahrscheinlich besser für Sie geeignet, erfordert jedoch, dass Sie Ihren DHCP-Server (wahrscheinlich auf Ihrem Router) so konfigurieren, dass die DNS-Weiterleitung als Resolver festgelegt wird.
Grundsätzlich:
- InstallierenDNS-MASQ(Methode hängt von Ihrem Server-Betriebssystem ab)
- Konfigurieren Sie DHCP so, dass der DNSMASQ-Server Ihr Resolver ist.
- Konfigurieren Sie den Server, auf dem dnsmasq installiert ist, so, dass die Adresse intern aufgelöst wird, z. B.
/etc/hosts
auf dem Server
Dieser Ansatz bedeutet:
- Externe Clients erhalten die öffentliche IP direkt vom dynamischen DNS-Anbieter
- Interne Clients treffen dnsmasq
- Wenn sie einen normalen öffentlichen Host anfordern, werden sie wie üblich an einen Upstream-Server (z. B. ISP-DNS-Server) weitergeleitet
- Wenn sie einen der von Ihnen konfigurierten internen Hosts anfordern, erhalten sie eine lokale Antwort - dies geschieht nur, wenn sich der Client in Ihrem lokalen Netzwerk befindet
Alternativ können Sie einen DNS-Server mit umfassenderen Funktionen (wie bind9) verwenden, der Split-Horizon nativ unterstützt.
Antwort2
Sie können es zur Datei hinzufügen /etc/hosts
, aber ich würde einen Spitznamen vorschlagen, damit Sie die Auflösung von außerhalb Ihres Netzwerks nicht durcheinander bringen. Also etwa das Folgende in /etc/hosts
:
#internal IP of server #nickname
192.168.0.24 hopto.local
Jetzt hopto.local
wird die lokale Adresse des Servers aufgelöst.
Weitere Informationen /etc/hosts
finden Sie hiermanpage
Viel Glück!