Tävla och vinn Geforce RTX 5080 från Asus!

Port forwarding av samma port till flera maskiner

Permalänk
Medlem

Port forwarding av samma port till flera maskiner

Jag kör PfSense virtuellt i proxmox för att hantera trafiken på ett av mina IPn.
I proxmox har jag även ett antal VMar och containers som kör olika tjänster.

För att enkelt kunna komma åt nätverket utifrån har jag två olika DynDNS-adresser som pekas mot det DHCP-tillhandahållna externa IPt.

Hittills har jag kunnat komma undan med att bara köra vanlig port forwarding i pfsenses grundfunktion för att de maskiner som skall vara åtkomstbara utifrån nätverket skall kunna nås. Detta eftersom de olika tjänsterna använt olika portar.

Nu har ett behov uppstått att köra två olika VMar, som båda behöver ha port 80 och 443 forwardade till sig för att deras respektive applikation skall fungera.

Finns det något sätt att tillse att två (eller fler) VMar bakom pfsense får sin egen applikations externa trafik forwardad till sig trots att de anänder samma port?
Jag vet liksom inte ens vad jag skall söka information om eftersom frågan är så omständig, men är inte främmande att djupdyka i pfsenses funktioner, alternativt sätta upp interna VMwar med andra funktioner för att dela upp trafiken om det skulle behövas...

Permalänk
Hedersmedlem

I grunden nej (inte på port forward-nivå), men det behöver inte vara omöjligt att lösa problemet för det.
När något ansluter till dig utifrån så ansluter de till ditt externa IP, och anger en port. Alltså finns ingen information som pfSense-routern kan använda för att lista ut vilken dator som det ska gå till, så du kan ha exakt ett mål för varje par av IP+port.

Men eftersom det verkar röra sig om HTTP/HTTPS kanske du kan lösa det en reverse proxy eller liknande (antingen på pfSense-datorn, eller en annan dator som lyssnar på 80+443 som har port forward till sig), som kan ta emot förfrågningar och skicka dem vidare baserat på saker som URL eller host (de olika DynDNS-adresserna, så att varje intern dator har en unik sådan).

Denna tråd har exempel på hur detta kan fungera. Skulle något sådant kunna funka för dig?

Visa signatur

Asus ROG STRIX B550-F / Ryzen 5800X3D / 48 GB 3200 MHz CL14 / Asus TUF 3080 OC / WD SN850 1 TB, Kingston NV1 2 TB + NAS / Corsair RM650x V3 / Acer XB271HU (1440p165) / LG C1 55"
NAS: 6700K/16GB/Debian+ZFS | Backup (offsite): 9600K/16GB/Debian+ZFS

Permalänk
Hedersmedlem

Hej!

Nej, det är inte möjligt att lösa det du försöker göra med en port forward som du beskriver, även om du har två olika DNS-namn som pekar på dessa.

Anledningen till detta är att DNS-anropet och IP-anslutningen är två olika transaktioner som inte är sammankopplade på något sätt. När en dator vill ansluta till din server börjar den med att först kolla upp vilken IP-adress du har genom DNS, och sedan ansluta till denna IP-adress. Din brandvägg ser därför aldrig vilket DNS-namn som din besökare använde för att slå upp din IP-adress.

Om du ska använda port forwarding behöver du alltså använda två olika portnummer, eller använda två externa IP-adresser.

Det du däremot kan göra istället, om dina applikationer använder HTTP, vilket de verkar göra utifrån din beskrivning att du kör port 80 och 443, är att använda en "reverse proxy". En reverse proxy är en slags webbserver som är den som dina klienter ansluter till, och som i sin tur sedan skickar vidare förfrågningarna till en annan "backend-server", i ditt fall de två olika applikationerna du exponerar. En reverse proxy kan skilja på trafik som går till samma IP-adress och samma port, eftersom webbläsaren skickar med det efterfrågade värdnamnet i en "Host"-header i förfrågan. En annan variant är att du t.ex. forwarderar example.com/app1 till ena servern och example.com/app2 till andra.

Din reverse proxy kan du (rent teoretiskt) köra på pfSense, eller på en helt annan server i din miljö. Har aldrig kört en reverse proxy på pfsense, men jag tror jag sett att det finns någon plugin för detta, ingen aning om den är bra.

Permalänk
Hedersmedlem

Kan även tispa om denna Reddit-tråd som kanske kan hjälpa dig i rätt riktning om du ska köra reverse proxy på pfSense:

https://www.reddit.com/r/PFSENSE/comments/q0pbdy/should_i_run...

Det här inlägget specifikt av robca402 på Reddit verkar väldigt lovande:

Citat:

Yep this is the easiest. Lawrence Systems have a great video walking through all the steps to set up haproxy with SSL certs inside pfsense

Borde ju inte vara jättesvårt att söka fram videon hen refererar till

Kan även tipsa om "caddy" om du vill köra och konfa en reverse proxy själv, den är extremt enkelt att konfigurera och integrerar automatiska SSL-certifikat med LetsEncrypt direkt i applikationen vilket gör att SSL-certifikat bara funkar av sig självt givet att du har fungerande DNS.

Permalänk
Hedersmedlem

Jag har satt upp en reverse proxy för Apache och det kräver lite läsning och trial/error först, men när man förstått det är det rätt simpelt. Det gör att du sorterar inkommande förfrågningar beroende på domän, så om någon skriver www.gurksallad.com kommer de till din lokala server 192.168.0.188 medan om de skriver www.gurkanärlös.com kommer de till en annan. Väldigt simpelt när allt är uppe, så länge du tänkt köra Apache förståss.

Visa signatur

SWECLOCKERS.COM :: If Quake was done today ::
WS: Gigabyte Z690 UD DDR5 :: Core i5 12600K :: 32 GB RAM :: Geforce RTX 3060 Ti :: 10 GbE NIC :: AOC C32G1 32" :: Seagate FireCuda 530 1TB :: Deepcool Matrexx 55
WiFi: Grandstream GWN7660 :: GWN7630LR :: GWN7662 :: GWN7660LR

Permalänk
Medlem

Tack! Jag var osäker på om informationen om mina dyndns faktiskt behålls i informationen i paketet som passerar genom brandväggeneller inte och hur man skulle kunna använda den.
Jag skall läsa på om HAproxy i pfsense och se om den kan lösa mitt problem enkelt, annars sätter jag kanske upp en separat VM med annan (kanske mer intuitiv) reverse-proxy-mjukvara att peka port 443/80 mot, som får hantera alla förfrågningar för HTTP(S) vilket det rör sig om i samtliga fall, ja

Permalänk
Hedersmedlem
Skrivet av Gabrioth:

Tack! Jag var osäker på om informationen om mina dyndns faktiskt behålls i informationen i paketet som passerar genom brandväggeneller inte och hur man skulle kunna använda den.
Jag skall läsa på om HAproxy i pfsense och se om den kan lösa mitt problem enkelt, annars sätter jag kanske upp en separat VM med annan (kanske mer intuitiv) reverse-proxy-mjukvara att peka port 443/80 mot, som får hantera alla förfrågningar för HTTP(S) vilket det rör sig om i samtliga fall, ja

Ja och nej, informationen finns i paketen, på applikationsnivå dock inte på transportnivå, vilket är var brandväggen kollar

Permalänk
Medlem

Det blev en VM med Debian och Zoraxy som proxy
Fantastiskt enkelt att komma igång och mer än nog features för att tillgodose mina behov.

Permalänk
Medlem

Skönt att det löste sig. Du har helt enkelt sprungit på en av nackdelarna med NAT och det faktum att man då inte kan adressera en specifik host. Med IPv6 hade det gått att göra som du vill genom en enkel brandväggsöppning.

Sedan har ju en reverse proxy en del andra smidiga funktioner och fördelar. Kör själv nginx för diverse saker där den agerar både webbserver och/eller reverse proxy beroende på vad man anropar.

Visa signatur

Antec P280 | FSP Hydro Ti Pro 1000W | MSI X670E Carbon | Ryzen 7 9800X3D | Kingston Fury Beast 6000MT/s CL30 2x32GB | ASUS RTX 3080 TUF OC | 2x Samsung 990 Pro 4TB | Kingston KC3000 4TB | Samsung 970 Pro 1TB | 2x Samsung PM863a 3.84TB | 2x ASUS PG279Q

Permalänk
Hedersmedlem
Skrivet av blunden:

Skönt att det löste sig. Du har helt enkelt sprungit på en av nackdelarna med NAT och det faktum att man då inte kan adressera en specifik host. Med IPv6 hade det gått att göra som du vill genom en enkel brandväggsöppning.

Sedan har ju en reverse proxy en del andra smidiga funktioner och fördelar. Kör själv nginx för diverse saker där den agerar både webbserver och/eller reverse proxy beroende på vad man anropar.

Mja, inte bara en brandväggsöppning, du hade behövt lägga till en extra IP-adress på servern också, och dessutom konfa alla dina serverappar att inte binda till [::]:443.

(Ja visst, det finns drykt 18 triljoner IPv6-adresser att välja på inom ett /64, men det är ändå en extra konfig. )

Permalänk
Medlem
Skrivet av pv2b:

Mja, inte bara en brandväggsöppning, du hade behövt lägga till en extra IP-adress på servern också, och dessutom konfa alla dina serverappar att inte binda till [::]:443.

(Ja visst, det finns drykt 18 triljoner IPv6-adresser att välja på inom ett /64, men det är ändå en extra konfig. )

Det rörde sig om olika maskiner förstod jag det som? Då bör dessa ha satt en publik IP (GUA) via SLAAC eller fått en tilldelad via DHCPv6 redan. Då är det bara en brandväggsöppning som behövs.

Är inte riktigt med på varför du tycker att servern skulle behöva en extra IP?

Visa signatur

Antec P280 | FSP Hydro Ti Pro 1000W | MSI X670E Carbon | Ryzen 7 9800X3D | Kingston Fury Beast 6000MT/s CL30 2x32GB | ASUS RTX 3080 TUF OC | 2x Samsung 990 Pro 4TB | Kingston KC3000 4TB | Samsung 970 Pro 1TB | 2x Samsung PM863a 3.84TB | 2x ASUS PG279Q

Permalänk
Hedersmedlem
Skrivet av blunden:

Det rörde sig om olika maskiner förstod jag det som? Då bör dessa ha satt en publik IP (GUA) via SLAAC eller fått en tilldelad via DHCPv6 redan. Då är det bara en brandväggsöppning som behövs.

Är inte riktigt med på varför du tycker att servern skulle behöva en extra IP?

Ah ja, är det två olika maskiner (vilket det är i OP:s fall) så har de ju två olika adresser ändå och det är inget mer att tänka på.

Av någon anledning så tänkte jag på att köra två olika processer på samma server. Eller två olika docker-containers där man vill att båda grejerna ska ha samma port. Vilket ju inte är scenariot i tråden i frågan, så jag vet inte varför jag tänkte så.

Kanske för att jag själv snubblade på detta för några veckor sedan och tänkte på det av misstag.

Permalänk
Medlem
Skrivet av pv2b:

Ah ja, är det två olika maskiner (vilket det är i OP:s fall) så har de ju två olika adresser ändå och det är inget mer att tänka på.

Av någon anledning så tänkte jag på att köra två olika processer på samma server. Eller två olika docker-containers där man vill att båda grejerna ska ha samma port. Vilket ju inte är scenariot i tråden i frågan, så jag vet inte varför jag tänkte så.

Kanske för att jag själv snubblade på detta för några veckor sedan och tänkte på det av misstag.

Nej precis.

I en sådan situation som du tänkte på är det ju son du säger dock.

Visa signatur

Antec P280 | FSP Hydro Ti Pro 1000W | MSI X670E Carbon | Ryzen 7 9800X3D | Kingston Fury Beast 6000MT/s CL30 2x32GB | ASUS RTX 3080 TUF OC | 2x Samsung 990 Pro 4TB | Kingston KC3000 4TB | Samsung 970 Pro 1TB | 2x Samsung PM863a 3.84TB | 2x ASUS PG279Q