Portin edelleenohjaus NAT:n takana olevalle WireGuard-peerille: DNAT plus SNAT
DNAT toimittaa pyynnön perille, mutta vastaus lähtee väärästä osoitteesta. Lisää vastaava SNAT-sääntö ja sijoita molemmat, kun tunneli on määritetty.
Selain pyytää https://203.0.113.10:8443, välityspalvelin hyväksyy yhteyden, eikä WireGuard-peerin palvelu vastaa koskaan. DNAT-sääntö tekee tehtävänsä; vastaus on se osa, joka epäonnistuu. Seuraa pakettia molempien käännösten läpi, niin puuttuva sääntö tulee ilmeiseksi. Korjaus on yksi ylimääräinen NAT-lause oikeassa hookissa, ei uusi tunneli.
Seuraa yhtä pyyntöä alusta loppuun
Pyyntö saapuu välityspalvelimen julkiselle rajapinnalle, lähteenä asiakkaan julkinen osoite ja kohteena välityspalvelimen osoite. Nat PREROUTINGissa DNAT-sääntö kirjoittaa kohteen uudelleen peerin tunneliosoitteeksi, 10.90.0.2. Sitten reitityspäätös lähettää paketin ulos wg0:n kautta ja edelleenohjauspolku on valmis.
Peerillä paketti kuljettaa nyt alkuperäistä julkista lähdeosoitetta, koska mikään ei ole kirjoittanut sitä uudelleen. Palvelu hyväksyy yhteyden ja lähettää vastauksensa omalle oletusyhdyskäytävälleen, joka on peerin edessä oleva kotireititin. Sillä reitittimellä ei ole tilaa vuolle, jota se ei koskaan nähnyt, ja se joko pudottaa paketin tai kääntää sen omaksi julkiseksi osoitteekseen, mitä asiakas ei hyväksy.
Epäsymmetria on koko ongelma: pyyntö kulkee välityspalvelimen kautta ja vastaus yrittää mennä suoraan. Välityspalvelimen yhteyksien seuranta auttaa vain, jos vastaus palaa välityspalvelimen kautta, eikä se voi palata sinne, kun lähdeosoite osoittaa yhä alkuperäiseen asiakkaaseen.
Lisää paluukäännös
Kirjoita edelleenohjattavan vuon lähde uudelleen välityspalvelimen tunneliosoitteeksi ennen kuin se lähtee peerille. Sitten palvelu vastaa osoitteeseen 10.90.0.1, välityspalvelin vastaanottaa sen ja yhteyksien seuranta kääntää molemmat käännökset, ennen kuin paketti palaa asiakkaalle.
iptables -t nat -A PREROUTING -p tcp -m multiport --dports 8080,8443 -j DNAT --to-destination 10.90.0.2
iptables -t nat -A POSTROUTING -d 10.90.0.2 -o wg0 -p tcp -m multiport --dports 8080,8443 -j SNAT --to-source 10.90.0.1POSTROUTING-sääntö on tarkoituksella kapea: se vastaa käännettyä kohdetta ja tunnelin rajapintaa, joten se ei kirjoita uudelleen sivullista liikennettä, joka sattuu lähtemään wg0:n kautta. Laaja masquerade-sääntö piilottaisi myös asiakkaan osoitteen, mutta tekisi sen jokaiselle vuolle ja vaikeuttaisi NAT-taulukon tarkastamista.
Sijoita säännöt sinne, missä tunneli on
Sääntöjen, jotka viittaavat tunnelin osoitteeseen tai rajapintaan, on suorituttava sen jälkeen, kun wg-quick on määrittänyt sen. Rajapinta luodaan ennen PreUpia, mutta osoitteet, MTU, DNS ja reitit otetaan käyttöön sen jälkeen, ja PostUp suoritetaan, kun kaikki se on paikallaan. Laita lisäykset PostUpiin ja poistot PreDowniin.
PostUp = iptables -t nat -A PREROUTING -p tcp -m multiport --dports 8080,8443 -j DNAT --to-destination 10.90.0.2
PostUp = iptables -t nat -A POSTROUTING -d 10.90.0.2 -o wg0 -p tcp -m multiport --dports 8080,8443 -j SNAT --to-source 10.90.0.1
PreDown = iptables -t nat -D PREROUTING -p tcp -m multiport --dports 8080,8443 -j DNAT --to-destination 10.90.0.2
PreDown = iptables -t nat -D POSTROUTING -d 10.90.0.2 -o wg0 -p tcp -m multiport --dports 8080,8443 -j SNAT --to-source 10.90.0.1Poistojen on vastattava lisäyksiä token tokenilta, mukaan lukien multiport- ja rajapintavastaavuudet. Poisto, joka eroaa yhdellä vastaavuudella, ei poista mitään, ja seuraava uudelleenyhdistäminen lisää säännön toisen kopion. Muutaman uudelleenyhdistämisen jälkeen taulukossa on duplikaatteja, joita on vaikea kohdistaa konfiguraatioriviin.
Tarkista tulos iptables -t nat -S avulla uudelleenyhdistämisen jälkeen. Jos sama sääntö näkyy kahdesti, PreDown-rivi ei vastaa ja siivous epäonnistuu hiljaisesti.
Edelleenohjaus, suodatus ja toinen NAT
Ota IPv4-edelleenohjaus pysyvästi käyttöön ja salli sitten edelleenohjattu vuo suodatustaulukossa. DNAT tapahtuu ennen FORWARD-ketjua, joten suodatussääntö vastaa käännettyä kohdetta eikä julkista osoitetta. Jos UFW hallinnoi palomuuria, ilmaise lupa reittisääntönä; tavallinen isäntäsääntö ei kata edelleenohjattua liikennettä.
Kaksi muuta NAT-kerrosta voivat yhä rikkoa polun, vaikka välityspalvelimen säännöt olisivat oikein. Kotiyhteydessä julkinen osoite kuuluu reitittimelle, eikä portin avaaminen sen palomuurissa ole sama kuin portinedelleenohjausmerkinnän luominen, joka lähettää portin välityspalvelimelle. Portti, joka näyttää ulkopuolelta avoimelta, kun mikään ei vastaa, puuttuu usein juuri tästä yhdistämisestä.
NAT-VPS:ssä palveluntarjoaja yhdistää julkisen portin yksityiseen osoitteeseen. Yhdistämisen on vastattava ilmoittamaasi porttia, ja poikkeama näyttää samalta kuin rikkinäinen tunneli. Vahvista palveluntarjoajan yhdistäminen ennen WireGuardin konfiguraation muuttamista.
Varmista paluupolku ja hyväksy kustannus
Yhdistä verkosta, joka ei ole välityspalvelimen LAN, ja tutki sitten käännösparia yhteyden ollessa auki:
conntrack -L -p tcp --dport 8080
tcpdump -ni any tcp port 8080conntrack-merkinnän pitäisi näyttää alkuperäinen monikko, käännetty monikko ja vastauksen suunta. Jos vastaus puuttuu, peer ei lähetä tunnelin kautta, mikä yleensä tarkoittaa, että SNAT-sääntöä ei sovellettu tai peerin oma palomuuri pudotti vuon.
Käynnistä kerran uudelleen todistaaksesi, että PostUp soveltaa säännöt uudelleen, pysäytä sitten tunneli ja vahvista, että PreDown poisti ne. Yhteydenkatkoksen yli jäävät kuolleet säännöt ovat syy siihen, miksi myöhempi muutos käyttäytyy arvaamattomasti.
Hyväksy lopuksi se, mitä SNAT maksaa. Palvelu näkee jokaisen pyynnön välityspalvelimelta tulevana, joten käyttölokit, asiakaskohtaiset nopeusrajoitukset ja sallittujen osoitteiden listat eivät enää erota käyttäjiä. Hairpin-tapaus tarvitsee oman lähdekäännöksensä välityspalvelimen LANissa oleville asiakkaille. Jos peer tarvitsee todelliset asiakasosoitteet, vaihtoehto on paluureitti asiakasverkkoon, mikä on enemmän työtä mutta säilyttää tiedon.