Host jätkab SSH-le vastamist ka pärast täistunneliga VPN-i tõusmist, samal ajal kui samas masinas Dockeriga avaldatud teenus vaikib. Kuulajas pole midagi valesti: konteiner töötab, pordi vastendus on olemas ja pakett jõuab kohale. Konteiner on terve ja päring jõuab selleni tõesti. Erinevus on selles, kust vastus algab, kui Linux oma marsruudi valib, ja see erinevus otsustab, millist kahest allolevast lahendusest vajate.

Jälgige tuple'i läbi sihtkoha NAT-i

Võtke host aadressil 192.0.2.10, mis avaldab TCP 2222 konteinerile aadressil 172.30.240.5:22. Päring aadressilt 198.51.100.25 tõlgitakse enne konteinerini jõudmist ja konteiner vastab iseendana.

WAN request:      198.51.100.25 -> 192.0.2.10:2222
after DNAT:       198.51.100.25 -> 172.30.240.5:22
container reply:  172.30.240.5:22 -> 198.51.100.25

Hosti marsruudiotsuse hetkel kannab vastus veel konteineri lähteaadressi. Pöördtõlge taastab avaldatud tuple'i hiljem, ja just seetõttu näeb pakett vale välja täpselt sel hetkel, kui marsruut valitakse.

Miks ainult hostile mõeldud reegel selle mööda laseb

Reegel, mis valib WAN-tabeli ainult pakettidele aadressilt 192.0.2.10 katab hosti enda deemonid ja jätab selle edastatud vastuse täielikult mööda. Vastuse lähteaadress on 172.30.240.5, mitte host.

Ülekorrigeerimine tähendab kogu konteineri liikluse suunamist läbi WAN-i, mis vabastab VPN-ist ka konteineri mitteseotud väljuvad ühendused. See on teistsugune poliitika kui see, mida paluti, ja tavaliselt üllatab kedagi hiljem.

DNAT-i järgne sobitamine on teine hook

Dockeri dokumentatsioon tulemüüride kohta märgib, et tavaline kasutajafiltreerimine näeb sihtkohta pärast DNAT-i, seega avaldatud pordi 2222 sobitamine tavalises reeglis ei ole sama mis konteineri pordi 22 sobitamine. Kui algne tuple on oluline, kasutage toetatud algse sihtkoha mehhanismi, mitte ärge oletage, milline port on nähtav.

See hookide segadus tekitab reegleid, mis näevad õiged välja ja ei sobi kunagi. Enne poliitika ümberkirjutamist kontrollige loendureid reegli enda peal. Nullitabamusega reegel ütleb teile, et seda hinnatakse kohas, kuhu pakett kunagi ei jõua.

Lahendus A: kandke otsust ühenduse olekuna

Ühenduse märge saab kanda sissetuleva otsuse läbi tõlke, kuid see tuleb paketile taastada enne olulist marsruudiotsingut. Etapid on:

  1. Reserveerige märgev väli ja reegli prioriteet, mis ei kattu Dockeriga, VPN-iga ega muu poliitika omanikuga.
  2. Tuvastage ainult kavandatud uus WAN-ühendus DNAT-i eelses punktis, kus ühenduse jälgimine on saadaval.
  3. Kirjutage otsus ühenduse märkele, sundimata algset päringut ennast WAN-tabelisse.
  4. Vastuse suunas taastage paketile enne marsruutimist ainult omaenda märkebitid.
  5. Valige täielik WAN-tabel piisavalt vara, et VPN-i reegel ei saaks esimesena võita.

See tabel vajab tegelikke ühendatud marsruute ja lüüsi. Samuti vajab see määratletud käitumist, kui marsruut puudub. Vaikne tunnelisse vajumine on halvim tulemus, sest konfiguratsioon näib endiselt töötavat. Selle asemel ebaõnnestuge suletult ja logige see.

Lahendus B: lõpetage hostil

Teadlikult konfigureeritud hostipoolne frontend, näiteks TCP-proxy või pöördproxy konteineri ees, hoiab vastuse hosti aadressilt lähtuvana. Hostile kirjutatud reeglid käituvad siis ootuspäraselt ja konteiner jääb oma privaatvõrku.

Hind on veel üks liikuv osa oma konfiguratsiooni, lähteaadressi käsitlemise ja juurdepääsukontrollidega. Tavaliselt on see lihtsam toetatud piir, ja sageli on see õige vastus, kui marsruutimispoliitikat haldaks üks inimene, kes võib lahkuda.

Kontrollige muudatust, mitte kavatsust

Avage avalikult poolelt uus volitatud ühendus ja kinnitage, et vastus väljub kavandatud liidesest. Seejärel kontrollige, et konteineri algatatud mitteseotud päring järgib endiselt VPN-i.

Ärge tühjendage masina ühendustabelit ühe reegli testimiseks: olemasolevad kirjed säilitavad varasema vastenduse ja tühjendamine rikub kõik muu hostil. Pordi avaldamine määratleb kättesaadavuse. See ei määratle vastuse teed. Kirjutage valitud lahendus koos tabelinimedega üles, et järgmine inimene ei peaks seda intsidendi ajal uuesti avastama.

Seotud artiklid