Verten held fram med å svara på SSH etter at ein VPN med full tunnel er oppe, medan ein Docker-publisert teneste på same maskin blir stille. Det er ingenting gale med lyttaren: containeren køyrer, portmappinga finst, og pakken kjem fram. Containeren er frisk, og førespurnaden når han faktisk. Det som er annleis, er kvar svaret startar når Linux vel ruta si, og den skilnaden avgjer kva av dei to designa nedanfor du treng.

Følg tuple gjennom destinasjons-NAT

Ta ein vert på 192.0.2.10 som publiserer TCP 2222 til ein container på 172.30.240.5:22. Ein førespurnad frå 198.51.100.25 blir omsett før han når containeren, og containeren svarar som seg sjølv.

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

Ved rutevalet til verten ber svaret framleis kildeaddressa til containeren. Den omvende omsetjinga gjenopprettar den publiserte tuple seinare, og difor ser pakken feil ut akkurat i det augneblinken ruta blir vald.

Kvifor ein regel berre for verten overser det

Ein regel som berre vel WAN-tabellen for pakkar frå 192.0.2.10 dekkjer verten sine eigne daemonar og overser denne videresende svaret heilt. Kildeaddressa i svaret er 172.30.240.5, ikkje verten.

Overkorrigeringa er å rute alt frå containeren gjennom WAN, noko som òg fritek containerens urelaterte utgåande samband frå VPN-en. Det er ein annan politikk enn den som vart beden om, og det overraskar vanlegvis nokon seinare.

Post-DNAT-matching er ein annan hook

Dokumentasjonen til Docker om brannmurar nemner at vanleg brukarfiltrering ser destinasjonen etter DNAT, så å matche den publiserte porten 2222 i ein vanleg regel er ikkje det same som å matche containerporten 22. Viss den opphavlege tuple er viktig, bruk den støtta opphavlege-destinasjon-mekanismen i staden for å gjette kva port som er synleg.

Denne hook-forvirringa lagar reglar som ser riktige ut og aldri matchar. Sjekk teljarane på sjølve regelen før du skriv om politikken. Ein regel utan treff fortel deg at han blir vurdert ein stad der pakken aldri kjem fram.

Design A: ber avgjerda som tilstand på sambandet

Eit sambandsmerke kan bera inngangsavgjerda gjennom omsetjinga, men det må gjenopprettast på pakken før det ruteoppslaget som betyr noko. Trinna er:

  1. Reserver eit merkefelt og ein regelprioritet som ikkje kolliderer med Docker, VPN-en eller ein annan politikkseigar.
  2. Identifiser berre det tiltenkte nye WAN-sambandet på eit punkt før DNAT der sambandssporing er tilgjengeleg.
  3. Registrer avgjerda på sambandsmerket, utan å tvinge sjølve den opphavlege førespurnaden inn i WAN-tabellen.
  4. I retning svaret, gjenopprett berre dine eigne merkebits på pakken før ruting.
  5. Vel ein fullstendig WAN-tabell tidleg nok til at ein VPN-regel ikkje kan vinne først.

Den tabellen treng dei faktiske tilkopla rutene og gatewayen. Han treng òg definert åtferd når ruta manglar. Stille fall i tunnelen er det verste utfallet, fordi konfigurasjonen framleis ser ut til å verke. Feil lukka i staden og logg det.

Design B: terminer på verten

Ein medvite konfigurert frontend på vertssida, som ein TCP-proxy eller ein omvend proxy framfor containeren, held svaret med opphav i adressa til verten. Reglar skrivne for verten oppfører seg då som venta, og containeren blir på sitt private nettverk.

Prisen er endå ein rørleg del med si eiga konfigurasjon, handsaming av kildeaddresser og tilgangskontroll. Det er vanlegvis den enklare støtta grensa, og det er ofte det rette svaret når rutepolitikken skulle haldast ved like av ein person som kan kome til å slutte.

Verifiser endringa, ikkje hensikta

Opne eit nytt autorisert samband frå den offentlege sida, og stadfest at svaret forlèt det tiltenkte grensesnittet. Sjekk deretter at ein urelatert førespurnad som containeren startar, framleis følgjer VPN-en.

Ikkje tøm sambandstabellen til maskinen for å teste ein regel: eksisterande oppføringar held på den tidlegare mappinga si, og tømminga øydelegg alt anna på verten. Å publisere ein port definerer nåbarheit. Det definerer ikkje svarvegen. Skriv ned det valde designet med tabellnamna, slik at neste person ikkje må gjenoppdage det under ei hending.

Relaterte artiklar