En tilkoblingskrok er sesjonspolitikk, ikke et pakkefilter
Client-connect-kroken kjører én gang per sesjon og ser aldri nyttelasten. Legg adgangskontrollen der sesjonene finnes, og innholdsendringen der forespørslene finnes.
Noen vil undersøke hva klientene sender gjennom tunnelen, finner tilkoblingskroken i dokumentasjonen og begynner å skrive et skript som aldri vil motta én eneste pakke. Kroken er ekte og nyttig, men arbeidsenheten er en sesjon, ikke en byte. Å velge riktig komponent er en sammenligning mellom tre steder der arbeid kan skje, og det avgjørende spørsmålet er hvilken enhet hver av dem faktisk kan se.
Hva kroken mottar, og hva den aldri mottar
En client-connect-krok kjører én gang når en autentisert klient etablerer en sesjon, i serverens prosesskontekst, med dokumenterte argumenter og miljøverdier som det felles navnet og den tildelte adressen. Den kan skrive konfigurasjon per klient, ta en adgangsbeslutning, tildele en ekstern ressurs eller registrere at tilkoblingen skjedde. Det den ikke kan, er å observere trafikk, for når den første pakken krysser tunnelen, har kroken allerede returnert.
Dette er ikke en begrensning man skal jobbe seg rundt. En sesjonstilbakeringing som forsøkte å behandle en strøm, måtte kjøre i hele tilkoblingens levetid, og skriptkontrakten til daemonen er ikke bygget for den formen. Spør hva kroken er til før du bestemmer deg for at den står i veien.
Gjenoppkoblinger teller også. En klient som faller ut og kobler til på nytt, er en ny sesjon, så alt kroken tildeler, må være idempotent eller kobles til en frakoblingshendelse som rydder opp. Tilstand som lekker ved hver gjenoppkobling, er den vanlige første feilen i et krokbasert design.
Sesjonspolitikk hører hjemme i kroken
Adgang er krokens naturlige arbeid. Du vet hvem som koblet til, hvorfra og med hvilket sertifikat, og du kan avgjøre om denne sesjonen skal fortsette eller avvises. Den beslutningen er billig, den skjer én gang, og den krever ikke å se på en eneste nyttelastbyte.
Konfigurasjonstildeling passer i samme form. En krok kan velge klientens adresse, sende valg som passer til den identiteten, eller skrive et fragment som serveren leser for denne klienten. Fordi beslutningen er per sesjon, forblir den forståelig når noe går galt og noen må forklare hvorfor en bestemt klient fikk en bestemt adresse.
Registrering er den tredje passformen. En revisjonsoppføring som sier at en sesjon ble tillatt, med identitet og tid, hører nøyaktig her. Det er ikke en trafikklogg og bør ikke late som det. Hvis noen senere spør hva en klient gjorde inne i tunnelen, må svaret komme fra et annet sted.
Pakkearbeid hører hjemme på en pakkevei
Hvis kravet er å se eller endre byte underveis, må komponenten ligge på videresendingsveien: en brannmurregel med kø, en krok for trafikkontroll eller en videresender i brukerrommet. Disse mekanismene ser pakker, og de har sin egen tilstand, sine egne feilmoduser og sin egen ytelsesprofil.
Å redigere nyttelasten på det laget er vanskeligere enn å lese den. En endret byte kan ugyldiggjøre et lengdefelt, en sjekksum eller en protokolltilstandsmaskin, og en tunnel på tredje lag beskytter deg ikke mot noe av dette. Det betyr bare at de ytre hodene ikke er dem du redigerer. Budsjetter med den reparasjonen før du lover noen en innholdsskriving.
En grensesnittopptak er det billigste verktøyet i denne kategorien, og det er en observasjon, ikke en editor. Folk blander de to fordi begge beskrives som å se trafikk, men et opptak lager en fil og en pakkevei lager en beslutning.
Applikasjonsendringer hører hjemme i applikasjonen
Når målet er å endre hva en forespørsel inneholder eller hvordan et svar formes, er riktig sted tjenesten selv eller en proxy som bevisst avslutter protokollen. Disse komponentene forstår allerede forespørsler, svar og den autentiseringen applikasjonen forventer, og det er nettopp den konteksten et pakkefilter mangler.
Adresseoversettelse ligger nederst på denne listen av en grunn. Den skriver om adresser og porter og lar nyttelasten være, så den er ikke et innholdsverktøy, uansett hvor ofte den dukker opp i en oppskrift som også nevner innhold.
Å holde disse grensene adskilt er det som gjør et design forklarlig. Sesjonspolitikk i kroken, pakkehåndtering på en pakkevei og applikasjonsendring der protokollen bevisst avsluttes: tre setninger som også tjener som sjekkliste for gjennomgang.
Der TLS fortsatt avslutter samtalen
Én ting overlever alt ovenfor: trafikk inne i tunnelen som bærer HTTPS, beholder sin egen transportkryptering. Å ha VPN-nøklene gir deg den indre IP-pakken og gir deg ikke sesjonsnøklene til nettstedet i den andre enden.
Derfor kan en krok ikke inspisere innhold selv i prinsippet, og derfor ser en pakkevei chiffertekst med mindre utrullingen bevisst avslutter den indre TLS-en. skriptkontrakt beskriver hva kroken får; den sier ingenting om nyttelast fordi det ikke er noen nyttelast å gi.