Pyyntö saapuu tunnelin IP-osoitteeseen osoitettuna ja lähtee samasta kontista naapuripalvelun osoitteeseen osoitettuna. Näiden kahden hetken välissä DNAT kirjoitti kohteen uudelleen, eikä paketti ollut enää VPN-kontin syöte. Nyt se on edelleenlähetettyä liikennettä, jota arvioi toinen sääntö. Tämä muutos selittää, miksi palomuurisääntö, joka näyttää tunneliosoitteelle oikealta, ei vaikuta käännettyyn yhteyteen.

Seuraa pakettia käännöksen jälkeen

Ota asiakaspooli 10.90.0.0/24 ja tunneliosoite 10.90.0.1. Kaksi konttia on samalla sillalla: 192.0.2.2 ajaa VPN:ää ja 192.0.2.3 ajaa sovellusta. Asiakas yhdistää osoitteeseen 10.90.0.1:8080, ja VPN-kontin nimiavaruuden DNAT-sääntö kirjoittaa sen sovelluksen todelliseksi osoitteeksi ja portiksi. Sitten reitti lähettää paketin sillan yli. Nämä osoitteet ovat havainnollisia, eivät käyttöönotto-ohje.

Portti, jolla sovellus todella kuuntelee, voi poiketa mistä tahansa isännälle julkaistusta portista. Lue kuuntelija kontin sisältä sen sijaan, että olettaisit molempien numeroiden täsmäävän.

Lupa kuuluu edelleenlähetyspolulle

VPN-kontti tarvitsee IP-edelleenlähetyksen ja edelleenlähetyspäätöksen, joka on rajattu asiakaspooliin, sovelluksen osoitteeseen ja aiottuun porttiin. Vakiintuneet vastaukset tarvitsevat oman lupansa. Sääntö, joka täsmää alkuperäiseen tunneliosoitteeseen, ei täsmää DNAT:n jälkeen, koska kohde on jo muuttunut. INPUT-lupa on väärä koukku liikenteelle, jota ei enää osoiteta tälle isännälle.

Pidä laajuus kapeana: yksi lähdealue, yksi kohde, yksi palvelu. Salliva edelleenlähetyssääntö on helpompi kirjoittaa ja paljon vaikeampi puolustaa myöhemmin.

docker exec vpn-container ip route get 192.0.2.3
docker exec vpn-container iptables -t nat -S
docker exec vpn-container iptables -S FORWARD

Dockerin ketjut eivät ole konttisi ketjuja

Kontin nimiavaruuden säännöt eivät ole Docker-isännän sääntöjä. Kun liikenne ylittää tunneliliitännästä sillalle, isännän sillan palomuuri voi tehdä toisen päätöksen. Dockerin iptables-taustalla dokumentoidut edelleenlähetysketjut ja DNAT:n jälkeiset täsmäytyskohdat ovat paikka, jossa tämä päätös näkyy.

Dockerin palomuuriviite kuvaa nämä ketjut ja DNAT:n jälkeisen täsmäytyksen. Älä korjaa puuttuvaa hyväksyntää kytkemällä Dockerin palomuurinhallintaa pois tai tekemällä jokaisesta ketjusta salliva, koska se poistaa rajan, jota yrität käyttää.

Tee paluupolusta tarkoituksellinen valinta

Jos lähdeosoite säilytetään, sovellus näkee 10.90.0.x ja sen on reititettävä vastaukset takaisin VPN-kontin kautta. Muuten sen tavallinen Docker-yhdyskäytävä lähettää ne isännälle, joka ei omista tunnelia. Vaihtoehto on kapeasti rajattu lähdekäännös VPN-kontissa, mikä yksinkertaistaa vastausta mutta piilottaa asiakkaan sovellukselta. Valitse tarkoituksella ja kirjoita ylös, kumman valitsit.

Testaa tuore sallittu yhteys tavallisesta asiakkaasta ja varmista sitten, että asiaankuulumattomat portit pysyvät suljettuina. Kun paketti katoaa, tutki VPN-nimiavaruutta, sovelluksen nimiavaruutta ja sovelluksen omaa lokia. Ping sillan yhdyskäytävään ei ole palvelun hyväksyntätesti.

Pidä säännöt kontin tuetussa käynnistyskonfiguraatiossa, koska interaktiiviset muutokset katoavat, kun se luodaan uudelleen. Isännän portin julkaisu on toinen altistumispolku, eikä sitä tarvita vain siksi, että palvelu on tavoitettavissa tunnelin kautta.

Aiheeseen liittyvät artikkelit