VPN klienta adreses saglabāšana līdz pat lietotnei nozīmē, ka katra žurnāla rinda un katrs atļauto saraksta ieraksts nozīmē vienu un to pašu. Pārrakstīšana mākoņa malā padara maršrutēšanas tabulu vienkāršāku, bet žurnālus mazāk noderīgus. Neviens no abiem variantiem pats par sevi nav nepareizs, un to izšķirošais arguments reti attiecas uz veiktspēju. Izšķir trīs nosacījumi: vai lietotnei jāzina, kurš cilvēks pieslēdzās, vai mākoņa audums pieņems avotu, ko plānojat sūtīt, un kas vēlāk uzņemsies atgriešanās maršruta atbildību.

Izšķir trīs nosacījumi

Sāciet ar lietotnes prasību, nevis ar tīkla diagrammu. Ja autorizācija vai audits ir atkarīgs no atsevišķa klienta adreses, tad tās saglabāšana ir funkcionāla prasība un tulkošana ir regresija. Ja lietotnei tikai jāzina, ka plūsma ieradās attālinātās piekļuves ceļā, pietiek ar tulkotu adresi, un to ir daudz lētāk uzturēt.

Otrais nosacījums ir mehānisks. Virtuālais tīkls automātiski neuzticas paketei, kas apgalvo adresi, kas netika piešķirta sūtošajai saskarnei. Lielākā daļa mākoņa audumu to īsteno dažādos veidos un ar dažādiem nosaukumiem, un dizains, kas to ignorē, diagrammā izskatīsies pareizi, bet ražošanā klusi kritīs.

Trešais ir organizatorisks. Avotu saglabāšana nozīmē, ka lietotnes apakštīkla maršrutēšanas tabulai ir jānorāda atpakaļ uz vārteju klienta prefiksam, un katrai komandai, kas vēlāk pievieno apakštīklu, šis maršruts ir jāsaglabā konsekvents. Tās ir vienreizējas nelielas izmaksas un atkārtotas izmaksas desmitiem kontu. Izlemiet, kas to maksā, pirms apsolāt uzvedību.

Maršruts nav atļauja viltošanai

Atgriešanās maršruta pievienošana pasaka jūsu apakštīklam, kur jāiet atbildēm. Tas nepasaka audumam, ka instancei, kas pārsūta šos paketes, ir tiesības tās izsūtīt ar svešu avotu. AWS attiecīgā kontrole ir avota un galamērķa pārbaude, un tā ir redzama katrai instancei:

aws ec2 describe-instances --instance-ids i-0a1b2c3d4e5f60718 \
  --query "Reservations[].Instances[].SourceDestCheck"
aws ec2 modify-instance-attribute --instance-id i-0a1b2c3d4e5f60718 \
  --no-source-dest-check

Izslēdziet to tikai tai instancei, kuras dokumentētais darbs ir pārsūtīšana, un nekam citam. Katra lietotnes VM, kas atstāj pārbaudi ieslēgtu, ir par vienu mašīnu mazāk, ko var izmantot plūsmas izsūtīšanai ar aizņemtu avotu. Ja jūsu platforma nav AWS, meklējiet līdzvērtīgu viltošanas novēršanas vai atļauto adrešu iestatījumu, nevis pieņemiet, ka uzvedība pārnāks.

Ātra pakešu uztveršana atrisina jautājumu ātrāk nekā konsoles lasīšana. Ja atbildes aiziet un klients tās nekad neredz, audums izmet viltoto avotu, nevis lietotne neizdodas.

Ko tulkošana pērk un cik tā maksā

Avota pārrakstīšana vārtejā novērš atgriešanās ceļa problēmu. Lietotne redz vienu adresi, kurai jau zina, kā piekļūt, un klienta prefiksam nekad nav jāparādās mākoņa maršrutēšanas tabulā. Linux noteikums ir viena rinda, un ir vērts rakstīt šaurāko versiju, ko varat:

sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s 172.20.8.0/24 -o ens5 -j SNAT --to-source 10.40.3.10

Pievērsiet uzmanību tam, ko lietotne tagad ieraksta: 10.40.3.10 katram lietotājam, katrā savienojumā, mūžīgi. Jebkurš adrešu atļauto saraksts, kas veidots uz šīs vērtības, tagad piešķir piekļuvi visai attālinātās piekļuves populācijai, un jebkurai incidenta pārbaudei jāatgriežas pie vārtejas, lai atbildētu, kas tas bija.

Risinājums nav atteikties no tulkošanas, bet pārstāt izlikties, ka adrese ir identitāte. Nesiet klienta identitāti autentificētā laukā, ierakstiet to vārtejā kopā ar tulkoto kortežu, un ļaujiet lietotnei piesaistīties tam. Bez piesaistes atslēgas tulkošana pārvērš tīkla problēmu pastāvīgā kriminālistikas problēmā.

Retranslators ir cita saskarne

Apgrieztais starpniekserveris lietotnes priekšā pilnībā apiet maršrutētā ceļa jautājumu. Starpniekserveris atver savu backend savienojumu, tāpēc klienta prefiksam nekad nav jābūt maršrutējamam virtuālajā tīklā, un lietotne var saņemt identitāti galvenē, ko starpniekserveris iestata.

Šī galvene ir uzticama tikai tad, kad backend to pieņem no starpniekservera un ne no kā cita. nginx izteiksmē tas nozīmē skaidri nosaukt uzticamo partneri, nevis ticēt visam, kas pienāk:

set_real_ip_from 10.40.3.10;
real_ip_header X-Forwarded-For;
real_ip_recursive on;

Jebkurš klients, kas var tieši sasniegt backend, var viltot to pašu galveni, tāpēc backend ir jābūt nesasniedzamam, izņemot caur starpniekserveri. Tas ir ugunsmūra fakts, nevis konfigurācijas viedoklis, un tieši šo pieņēmumu cilvēki izlaiž, kopējot fragmentu.

Retranslators maina arī to, ko jūs pērkat. Jūs iegūstat lietotnes līmeņa identitāti un dabisku vietu, kur to reģistrēt; jūs atsakāties no vispārīguma, jo katram jaunam protokolam ir vajadzīgs savs starpniekservera atbalsts. HTTP pakalpojumiem šis maiņa parasti ir laba, un visam, kas nav HTTP, tā parasti nav pieejama vispār.

Pierakstiet, ko redz katra robeža

Lai ko jūs izvēlētos, dizaina pārskatam jābeidzas ar vienu tabulu, kas nosauc avota adresi un pierādāmo identitāti katrā lēcienā. Bez tās pirmais incidents rada trīs komandas, no kurām katra apraksta citu klientu.

BoundarySource the next hop seesWhat is actually proven
Client to gateway172.20.8.14A certificate or credential was presented
Gateway to app subnet, preserved172.20.8.14The same session, if the return route exists
Gateway to app subnet, translated10.40.3.10Only that traffic came through the gateway
Proxy to backend10.40.3.10 plus a headerThe proxy asserted an identity it authenticated

Tad izvēlieties. Saglabājiet avotu, kad lietotnes autorizācija patiešām ir atkarīga no klienta adreses un varat uzņemties maršrutu. Tulkot, kad tas tā nav un varat nest identitāti ārpus joslas, un izmantojiet AWS norādes par pārsūtīšanas instancēm platformai raksturīgajiem pārsūtīšanas iestatījumiem. Vērsieties pie retranslatora, kad pakalpojums runā HTTP un jūs vēlaties, lai identitāte pārstātu būt adrese.

Saistītie raksti