Docker-poarten publisearje tsjin de VPN: wêr't it antwurd hinne giet
In publisearre kontener antwurdet fan syn eigen adres foar omkearde NAT. Twa ûntwerpen kinne dat antwurd op it iepenbiere paad hâlde, mei ferskate kosten.
De host bliuwt SSH beantwurdzje nei't in VPN mei folsleine tunnel omheech komt, wylst in mei Docker publisearre tsjinst op deselde masine stil wurdt. Der is neat mis mei de listener: de kontener rint, de poartmapping bestiet en it pakket komt oan. De kontener is sûn en it fersyk berikt him echt. It ferskil is wêr't it antwurd begjint as Linux syn rûte kiest, en dat ferskil beslút hokker fan de twa ûntwerpen hjirûnder jo nedich hawwe.
Folgje de tuple troch de bestimming-NAT
Nim in host op 192.0.2.10, dy't TCP 2222 publisearret nei in kontener op 172.30.240.5:22. In fersyk fan 198.51.100.25 wurdt oerset foardat it de kontener berikt, en de kontener antwurdet as himsels.
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
By de rûtebeslissing fan de host draacht it antwurd noch it boarneadres fan de kontener. De omkearde oersetting set it publisearre tuple letter werom, en dêrom liket it pakket ferkeard krekt op it momint dat de rûte keazen wurdt.
Wêrom't in regel allinnich foar de host it mist
In regel dy't de WAN-tabel allinnich kiest foar pakketten fan 192.0.2.10 dekt de eigen daemons fan de host en mist dit trochstjoerde antwurd folslein. It boarneadres op it antwurd is 172.30.240.5, net de host.
De oerkorreksje is alles fan de kontener troch de WAN te rûtsjen, wat ek de net-relatearre útgeande ferbiningen fan de kontener fan de VPN frijstelt. Dat is in oar belied as dat frege waard, en it ferrast meastentiids immen letter.
Post-DNAT-oerienkomst is in oare hook
De dokumintaasje fan Docker oer firewalls merkt op dat gewoane brûkersfiltering de bestimming nei DNAT sjocht, dus it oerienkomme fan de publisearre poarte 2222 yn in normale regel is net itselde as it oerienkomme fan kontenerpoarte 22. As it oarspronklike tuple fan belang is, brûk dan it stipe oarspronklike-bestimming-meganisme yn stee fan te rieden hokker poarte sichtber is.
Dizze hook-ferbjustering produsearret regels dy't korrekt lykje en nea oerienkomme. Kontrolearje de tellers op de regel sels foardat jo it belied oerskriuwe. In regel sûnder treffers fertelt jo dat er evaluearre wurdt op in plak dêr't it pakket nea komt.
Untwerp A: draach de beslissing as ferbiningstastân
In ferbiningsteken kin de yngongsbeslissing troch de oersetting drage, mar it moat weromset wurde op it pakket foar de rûtesyktocht dy't fan belang is. De stappen binne:
- Reservearje in tekenfjild en in regelprioriteit dy't net botsen mei Docker, de VPN of in oare beliedseigner.
- Identifisearje allinnich de bedoelde nije WAN-ferbining op in punt foar DNAT dêr't ferbiningstracking beskikber is.
- Registrearje de beslissing op it ferbiningsteken, sûnder it oarspronklike fersyk sels nei de WAN-tabel te twingen.
- Set yn de antwurd-rjochting allinnich jo eigen tekenbits werom op it pakket foar it rûtsjen.
- Kies in folsleine WAN-tabel betiid genôch sadat in VPN-regel net earst winne kin.
Dy tabel hat de echte ferbûne rûtes en de gateway nedich. Hy hat ek definiearre gedrach nedich as de rûte ûntbrekt. Stil trochfallen yn de tunnel is it minste resultaat, want de konfiguraasje liket noch altyd te wurkjen. Fal hjiryn ynstee sletten en log it.
Untwerp B: einigje op de host
In bewust konfigurearre frontend oan de hostkant, lykas in TCP-proxy of in omkearde proxy foar de kontener, hâldt it antwurd ôfkomstich fan it hostadres. Regels skreaun foar de host gedrage har dan as ferwachte, en de kontener bliuwt op syn partikuliere netwurk.
De kosten binne noch in bewegend part mei eigen konfiguraasje, boarneadresôfhanneling en tagongskontrôles. It is meastentiids de ienfâldiger stipe grins, en it is faak it juste antwurd as it rûtebelied ûnderholden wurde soe troch ien persoan dy't miskien fuortgiet.
Ferifiearje de feroaring, net de bedoeling
Iepenje in nije autorisearre ferbining fan de iepenbiere kant en befêstigje dat it antwurd de bedoelde ynterface ferlit. Kontrolearje dan dat in net-relatearre fersyk dat de kontener begjint noch altyd de VPN folget.
Meitsje de ferbiningstabel fan de masine net leech om ien regel te testen: besteande yngongen hâlde har eardere mapping, en it leegmeitsjen brekt al it oare op de host. In poarte publisearje definiearret berikberens. It definiearret net it antwurdpaad. Skriuw it keazen ûntwerp del mei syn tabelnammen, sadat de folgjende persoan it net op nij ûntdekke moat by in ynsidint.