
Ich habe die folgende Topologie
.───────────────.
┌──────────────────┐ _.─' `──.
│ │ ,─' '─.
│ ISP Router │ Dynamic IP ; :
│ with NAT ├─────────────────────────────────────────────────────────: Internet ;
│ │ ╲ ╱
└─────────┬────────┘ '─. ,─'
│ `──. _.─'
│ 10.0.0.1 `──────┬──────'
│ │
.──────┴────. .─────┴─────.
,─' '─. ┌─────────────────────────┐ ,─' '─.
,' `. │ │ ,' `.
; LAN : Static DHCP┌──┴───┐ ┌──┴───┐ Static IP ; Public Net :
: ;─────────────┤ eth1 │ My Server │ eth0 ├────────────: ;
╲ 10.0.0.0/24 ╱ 10.0.0.5 └──┬───┘ └──┬───┘ 1.2.3.5 ╲ 1.2.3.4/20 ╱
`. ,' │ Debian Buster │ mydomain.com `. ,'
'─. ,─' │ │ '─. ,─'
`─────────' └─────────────────────────┘ `─────────'
Aus historischen Gründen verwendet mein ISP ein separates Netzwerk, um statische IPs bereitzustellen. Das bedeutet, dass ich meinen Server direkt an eine spezielle Verbindung anschließen muss, die direkt dem Internet ausgesetzt ist (im Diagramm ist dies eth0
mit IP 1.2.3.5
).
Ich verwende diesen Server jedoch als NAS bei mir zu Hause und da es sich dabei um ein völlig separates Netzwerk handelt, verbinde ich ihn über eine andere Schnittstelle eth1
und erstelle eine statische DHCP-Zuweisung mit der Adresse 10.0.0.5
. Auf diese Weise können andere Geräte im Heimnetzwerk ihn finden und auf die Netzwerk-Mounts zugreifen.
Schließlich habe ich einen DNS-Eintrag mit meiner Domäne, in diesem Beispiel mydomain.com
, der auf verweist 1.2.3.5
.
Ich habe einige Probleme:
- Wenn ich versuche, von meinem LAN aus darauf zuzugreifen,
mydomain.com
funktioniert es nicht. Ich glaube, das liegt daran, dass der Server das Paket von der Schnittstelle erhälteth0
, dann aber antworteteth1
und das andere Gerät die Antwort verwirft, da sie von einer anderen IP-Adresse stammt. - Beim Booten sollte der Server
1.2.3.4
als Netzwerk auswählen, an das der Internetverkehr weitergeleitet wird, damit der externe Zugriff über funktioniertmydomain.com
. Da jedoch sowohl alseth0
aucheth1
über die jeweiligen Gateways auf das Internet zugreifen können, bootet er manchmal und wählt10.0.0.1
als Standard-Gateway aus, und dannmydomain.com
funktioniert der Zugriff nicht. Ich glaube, dies ist ein ähnliches Problem mit Datenverkehr, der über eingeht,eth0
aber über abgehteth1
.
Ich bin zwar mit den grundlegenden Netzwerkfunktionen vertraut, habe jedoch keine Erfahrung damit, einen Server auf diese Weise mit mehreren Netzwerken gleichzeitig zu verbinden. Idealerweise würde ich den Server so konfigurieren, dass:
- Der gesamte Internetverkehr wird über
eth0
- Der gesamte eingehende Datenverkehr
eth0
wird beantwortet durcheth0
- Der gesamte eingehende Datenverkehr
eth1
wird beantwortet durcheth1
Auf meinem Server läuft Debian, ich bin für jede Hilfe dankbar.
BEARBEITEN: Nachdem ich das eth1-Gateway deaktiviert und ein bisschen damit herumgespielt hatte, tcpdump
konnte ich bestätigen, dass der Datenverkehr von eth0 eingeht und eth1 verlässt. Das Problem besteht darin, dass der ISP den Datenverkehr zum Endpunkt nicht NAT-tut und der Server die Adressen dann als auf der Schnittstelle befindlich 1.2.3.5
identifiziert .10.0.0.X
eth1
Antwort1
Dies ist ein Routing-Problem, das mit quellenbasiertem Routing oder Policy-Routing gelöst werden kann. Dabei werden zwei Routing-Tabellen verwendet, eine für jede Quelladresse:
Sehenhttp://tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.rpdb.multiple-links.htmlfür mehr Details.
Antwort2
Ich glaube, das liegt daran, dass der Server das Paket von der Schnittstelle eth0 erhält, dann aber über eth1 antwortet.
Nein. Der ISP-Router mit NAT wird Ihre Client-Adresse 10.0.0.0 in eine dynamische ISP-Adresse umwandeln, sodass Ihr Server an diese Adresse und nicht an die interne Adresse antwortet. Es gibt Ausnahmen wie FTP, die nicht unbedingt mit NAT kompatibel sind, da sie Ihre interne IP-Adresse an das andere Ende der Verbindung weitergeben. Im Allgemeinen bleibt Ihr NAT-Verkehr jedoch auf eth0.
Überprüfen Sie Ihre Protokolle, um zu bestätigen, dass Clients ausgehende Verbindungen zu 1.2.3.4 herstellen und der Server Verbindungen von den NAT-Adressen ip.ip.ip.ip erhält.
Beim Booten sollte der Server 1.2.3.4 als Netzwerk auswählen, an das der Internetverkehr weitergeleitet wird, damit der externe Zugriff über mydomain.com funktioniert. Da jedoch sowohl eth0 als auch eth1 über die jeweiligen Gateways auf das Internet zugreifen können
Tun Sie das nicht. Mehrere Standard-Gateways in Multi-Homed-Konfigurationen funktionieren selten wie beabsichtigt. Mehrere Standard-Gateways sollten nur verwendet werden, wenn beide Pfade Zugriff auf identische Netzwerke bieten, beispielsweise für Router-Redundanz/hohe Verfügbarkeit in einer Unternehmensumgebung. Da Ihr ISP-Router zum Internet und Ihre direkte Verbindung zum öffentlichen Netz nicht identisch sind, sollten Sie dies entfernen. eth0 sollte eine Standardroute haben, eth1 sollte eine Route zu 10.xxx haben. Sie können dies immer noch mit DHCP tun, ich würde dies jedoch als Reservierung/Ausschluss für 10.0.0.5 betrachten und die Server-IP manuell konfigurieren.
Abgesehen von der externen Standardroute ist das, was Sie beschrieben haben, der normale Standardvorgang. Achten Sie unbedingt auf andere Probleme, die oben nicht beschrieben sind:
- Hostdateien, die sich vom DNS unterscheiden (haben Sie versucht, Clients dazu zu bringen, eine Verbindung zu 10.0.0.5 statt 1.2.3.4 herzustellen? Ich verwende intern gerne einen technischen Namen wie webserver1.internalfqdn.com und extern einen benutzerfreundlichen Namen wiewww.externalfqdn.com)
- Manuelle Routentabellen sind oben nicht aufgeführt (haben Sie versucht, 10.0.0.x als Router über 10.0.0.5 auf 1.2.3.4 zu verkürzen? – das kann funktionieren, erfordert aber eine zusätzliche Konfiguration)
- Routing-Protokolle (z. B. RIP) (eigentlich eine Variante des oben genannten, aber wenn Sie RIP oder andere Routenveröffentlichungen aktiviert haben, veröffentlichen Sie möglicherweise schlechte Routen
Antwort3
Ich habe das Problem schließlich gelöst, indem ich einenDNS teilenAnsatz, bei dem ich einen DNS-Server auf meinem Host bereitstelle und diesen im gesamten LAN als Standard-DNS-Server verwende. Dort habe ich benutzerdefinierte DNS-Umschreibregeln hinzugefügt, um anstelle der öffentlichen Adresse mydomain.com
umzuleiten 10.0.0.5
. Auf diese Weise lösen Hosts im LAN meine Domäne in die interne IP-Adresse auf und Hosts außerhalb des LANs lösen sie in die öffentliche IP-Adresse auf, mit dem Vorteil, dass der lokale Datenverkehr nicht wie zuvor über das ISP-Netzwerk geleitet werden muss.
Eine weitere Alternative, die dieses Problem meiner Meinung nach lösen sollte, istHaarnadel-Routing. Der Router meines ISPs scheint dies jedoch nicht zu unterstützen.