NAT loopback – tilgå server fra ekstern IP-adresse
Hvis du har en server, kan du have problemer med at tilgå den fra den eksterne IP adresse hjemmefra. Her er årsagen og en evt. løsning til problemet.
Et netværk består af en router og enheder på netværket. Routerens opgave er at skabe forbindelse til internettet og formidle denne kontakt ud til alle enheder på netværket. Enheder kan være computere, servere, mobiltelefoner, chromecasts osv.
Når routeren forbinder til internettet får den en ekstern IP-adresse, f.eks. 123.123.123.1. Dette kaldes for en ekstern IP-adresse. Alle enheder der er forbundet til routeren (inkl. routeren selv), giver routeren en intern IP-adresse. Forestil dig f.eks. at vi har følgende enheder forbundet til routeren:
- En klient med IP-adresse 192.168.1.1
- En server med IP-adresse 192.168.1.2
- En router med intern IP-adresse 192.168.1.3
Bemærk at routeren her har både en ekstern IP adresse 123.123.123.1 og en intern IP adresse 192.168.1.3.
Hver gang en enhed på LAN (hjemmenetværket) skal kommunikere med en anden enhed på LAN, anvendes den interne IP adresse. Hvis jeg derfor fra klienten skal tilgå serveren, mens jeg er hjemme, skal jeg bruge IP adressen 192.168.1.2.
Hvis jeg derimod ikke er hjemme, men måske har min klient udenfor hjemmet tilkoblet et andet internet, så kan jeg ikke bruger 192.168.1.2. Her er jeg jo ikke inde for samme netværk og derfor kan jeg ikke bruge interne IP adresser. I stedet skal jeg bruge den eksterne IP adresse 123.123.123.1 og jeg skal have routeren til at videredirigere trafikken fra serveren til den eksterne IP adresse. Det gør jeg ved at forwarde den port som serveren kommunikerer med routeren med, f.eks. port 80. Altså skal jeg udenfor hjemmet tilgå min server ved at taste 123.123.123.1:80.
Kan ikke bruge ekstern IP adresse på LAN
Det er lidt upraktisk at skulle bruge en intern IP adresse når jeg er hjemme og en ekstern IP adresse når jeg er ude. Her foretrækker mange at kunne bruge den eksterne IP-adresse 123.123.123.1:80 altid. Men det kan man som udgangspunkt ikke! Lad mig lige forklare hvorfor.
Når du bruger den eksterne IP adresse hjemme, sender du en forespørgsel fra din klient i din browser til 123.123.123.1:80. Denne forespørgsel modtager routeren og sender den så videre til serveren, fordi du har angivet port 80. Status er nu at serveren har fået en forespørgsel fra en enhed med IP-adresse 192.168.1.1 og klienten venter på et svar fra routeren 123.123.123.1.
Nu sender serveren svaret direkte tilbage til klienten med IP-adresse 192.168.1.1. Det gør den fordi de er på samme subnet og derfor genkender den at den er en del af samme netværk. Klienten modtager svaret, men kasserer den fordi den har aldrig bedt om et svar fra 192.168.1.2 – den har bedt om et svar fra 123.123.123.123. Efter et stykke tid hvor den ikke har fået svar fra 123.123.123.1 får klienten en timeout og det er derfor det ikke virker at tilgå fra dit LAN.
Løsningen er NAT loopback
Løsningen er NAT loopback. Det er en teknik ved din router der oversætter IP adresserne, så når du tilgår serveren via LAN med den eksterne IP adresse, giver serveren ikke besked direkte til klienten, men i stedet tilbage til routeren og så hen til klienten. Så kommer svaret som ventet til klienten og der kommer ikke en timeout.
Desværre har mange routere slået NAT loopback fra som standard, pga. sikkerhed. Nogle routere understøtter heldigvis at man i indstillingerne kan slå NAT loopback funktionaliteten i routeren fra. Du skal typisk ind i det afsnit der hedder “Firewall” eller “Security”. Her vil der typisk stå “Filter WAN/NAT Redirection” eller “Enable NAT loopback”. Teknologien kan også hedde “NAT reflection” eller “NAT Hairpinning”. Det er meget forskellig fra router til router.
Den dårlige nyhed er at desværre ikke alle routere understøtter NAT loopback 🙁 Her er det letteste så faktisk at skifte routeren ud med en model der understøtter denne teknologi.
En workaround er måske at benytte en proxy server til at tilgå den eksterne IP adresse. Prøv at gå ind på denne adresse, indtaste 123.123.123.1:80 og tryk på “Proxfree”. Så burde du kunne tilgå serveren, fordi den nu dirigerer trafikken gennem denne proxyserver. Husk at port 80 skal være indstillet til at kunne tilgås fra den eksterne IP.