Innstillinger for VPN-verktøy: miljø ved oppstart eller eksport i en hook?
En hook starter sine egne barn, ikke skallet du allerede har åpnet. Et miljø ved oppstart holder det private endepunktet bare på den ene kommandoen som trenger det.
En VPN-hook som eksporterer et API-endepunkt, endrer miljøet til prosessene den starter, ikke til terminalen som allerede var åpen da tunnelen kom opp. Den ene forskjellen forklarer de fleste rapportene om at «verktøyet fortsatt kaller det offentlige endepunktet». Det finnes to brukbare steder å legge innstillingen, og valget avhenger av hvem som bruker den og hvor ofte den endres. Sammenlign dem før du legger til nok et oppstartsskript.
To steder innstillingen kan bo
Alternativ én er et prefiks på selve kommandoen: verdien finnes for nettopp det ene kallet og forsvinner med det. Alternativ to er en eksport inne i tilkoblingshooken, som når hver prosess hooken starter etter det punktet. De skiller seg i rekkevidde og levetid, ikke i syntaks, og den forskjellen avgjør de fleste feilene.
| Property | Prefix on the command | Export from the hook |
|---|---|---|
| Who receives it | That invocation only | Children the hook starts |
| Lifetime | Until the process exits | Until the hook's own session ends |
| Leakage | Scoped to one command | Applies to later commands in that session |
| Repeat cost | Every invocation | Once per connection |
| Works for an open editor | No, unless the editor is started with it | No |
Tabellen får hooken til å se billig ut og skjuler den egentlige regningen: den velger også et privat endepunkt for kommandoer som ikke har noe med oppgaven å gjøre. Les hver rad som en begrensning, ikke som en preferanse. Hvis endepunktet endres per oppgave, vinner prefikset på presisjon selv om det koster ett tastetrykk.
Hvorfor hooken ikke kan nå et skall som allerede er åpent
Miljøvariabler overleveres til en prosess når prosessbildet opprettes. Et skall som startet før tilkoblingen, beholder kopien det fikk, og en eksport som kjøres inne i hooken, er ikke en utsendelse til hver prosess på maskinen. Bare hookens egne barn arver den. Et skalls egne barn tar det skallet har i det øyeblikket de starter, og derfor kan samme kommando virke i én terminal og feile i en annen.
Det samme gjelder en grafisk editor. Utvidelsesverten, den integrerte terminalen og språkserveren i bakgrunnen ble forgrenet ved oppstart og har egne kopier. Å åpne en mappe på nytt starter ikke nødvendigvis disse barna på nytt, så innstillingen du la til, kommer fortsatt aldri frem.
Den billigste testen er å skrive ut variabelen fra stedet som feiler, ikke fra skallet som virker. Hvis prosessen som feiler, startet før tunnelen, hadde eksporten aldri en sjanse.
Formen per kommando, skrevet ut
Et prefiks holder valget synlig i kommandoen som bruker det, noe som hjelper når endepunktet endres mellom oppgaver:
env INTERNAL_API='https://internal-api.example.net:8443' my-work-tool
Kommandoen er bare et eksempel: my-work-tool er en plassholder, og INTERNAL_API er ikke en VPN-standard, så bytt inn den dokumenterte innstillingen til programmet du faktisk kjører, og din egen godkjente vert. Ikke sett et token eller passord på samme linje, for det havner i skallets historikk.
Når flere kommandoer hører til én oppgave, setter et kort gjennomgått innpakningsskript variablene og starter dem deretter. Det holder én definisjon uten å gjøre verdien global for hver fremtidige kommando i terminalen.
Last inn på nytt, start på nytt eller la det være
For et verktøy som allerede kjører, foretrekk dets egen omlasting eller arbeidsområdeprofil når det har en. Ellers lagre arbeidet og start komponenten som leser innstillingen på nytt, og det er ofte en språkserver og ikke editorvinduet. Å starte vinduet på nytt og anta at barneprosessene fulgte med, er nettopp grunnen til at en omlasting ser ut til ikke å virke.
Frakobling er en egen beslutning. Pause, lukking eller gjentilkobling hører til programmet, og endepunktvariabelen styrer ikke det. Behandle variabelen som konfigurasjon som velger en adresse, ikke som en regel om hvilken nettverkstrafikk som kan brukes etterpå, og de to sakene forblir adskilte.