Drie routes geven je een OpenConnect-client op een Mac, en ze laten verschillende dingen op de schijf achter. Een Homebrew-formule installeert een gecompileerd binair bestand plus het netwerkscript dat routes en DNS instelt. Een release-archief geeft je broncode met een gegenereerd bouwsysteem. Een git-checkout geeft je broncode zonder. De verkeerde kiezen is de reden dat mensen een ontbrekende configure tegenkomen een paar minuten in een tutorial.

Twee verschillende machines onder dezelfde naam

De pakketroute is één opdracht, en dat is de juiste standaard voor iedereen wiens werk verbinden is in plaats van ontwikkelen.

brew install openconnect

Wat het installeert is belangrijker dan de opdracht. Je krijgt het binaire bestand van de client, en je krijgt ook een vpnc-script dat de client aanroept om de interface, de routes en de resolver te programmeren. De twee werken als een paar: het binaire bestand beëindigt de TLS-sessie en geeft de resulterende interface door aan het script, en het script is het deel dat weet hoe dit besturingssysteem zijn netwerk wil laten veranderen.

Die splitsing verklaart een hele klasse verwarrende rapporten. Een client die verbindt, succes meldt en dan verkeer de verkeerde kant op stuurt, heeft meestal een scriptprobleem, geen tunnelprobleem, en de formule opnieuw installeren lost het alleen op omdat het script ook opnieuw wordt geïnstalleerd. Controleer de huidige macOS- en CPU-architectuurondersteuning van de formule voordat je erop plant; een Mac die een shell perfect uitvoert, heeft misschien nog steeds geen actueel pakket dat ervoor is gebouwd.

Wat de bronroute werkelijk doet

Een release-archief komt met een gegenereerd bouwsysteem, dus de bekende ./configure bestaat vanaf het begin. Een git-checkout niet, omdat de gegenereerde bestanden bouwproducten zijn en geen dingen die het project bewaart. Dat is de hele reden dat ./autogen.sh in de instructies voor checkouts staat en niet voor release-archieven.

./autogen.sh
./configure
make
make install

Elke regel doet iets specifieks, en weten welke is mislukt scheelt veel giswerk. De autogen-stap draait de autotools om configure te produceren. De configure-stap controleert de compiler, bibliotheken en headers die de client nodig heeft, en schrijft dan de makefiles die weerspiegelen wat hij vond. De make-stap compileert. De install-stap kopieert de resultaten ergens in je pad.

Bij die laatste regel gaat advies vaak mis. Installatie is geen bewijs dat de build werkte, en het uitvoeren in een willekeurige downloadmap met verhoogde rechten is een goede manier om bestanden te verspreiden die je later niet meer herinnert. Als configure faalt op een ontbrekende bibliotheek, is de nuttige uitvoer de eerste fout die het afdrukte, niet de laatste twintig regels van het log.

De sessie en de netwerkconfiguratie zijn gescheiden

Dit onderscheid beslist of een verbinding echt verkeer draagt. De TLS-sessie opzetten geeft je een interface aan de clientkant. Routes, adressen en DNS-resolvers toepassen is een tweede stap via het netwerkscript, en een build die een binair bestand zonder het script opleverde, heeft een halve client.

Dezelfde scheiding verklaart waarom twee machines met identieke clients zich anders gedragen: het script raadpleegt de netwerkconfiguratie van het systeem, en die configuratie omvat alles wat een route heeft opgeëist. Wanneer een gesplitste tunnel verkeer naar een onverwachte plek stuurt, doet de tunnel zijn werk en is de routeringsbeslissing het ding om te onderzoeken.

Dus als je debugt, vraag welk niveau faalde. Een sessie die nooit tot stand komt is protocol, certificaat of inloggegevens. Een sessie die tot stand komt en niets doorstuurt is de interface en het script. Een geïnstalleerde client die vanaf het ene netwerk werkt en vanaf het andere niet is bereikbaarheid, en geen enkele herbouw verandert dat.

Weet welk binair bestand je uitvoert

Een handmatig geïnstalleerde build en een verpakt binair bestand kunnen vreedzaam naast elkaar bestaan, en welke draait hangt van je pad af en niet van je bedoelingen. Zoek dat uit voordat je iemand een versienummer meldt.

which -a openconnect
openconnect --version
brew list --versions openconnect

De eerste opdracht somt elke kopie op die je shell ziet, in de volgorde waarin hij ze zou proberen. De tweede vertelt je welke antwoordde. Als dat niet klopt met wat je verwacht, draai je een build uit een oud experiment, en geen configuratiewijziging zal dat verplaatsen.

Een client installeren is geen goedkeuring van een gateway

Een werkend binair bestand maakt een uitrol niet compatibel. Bevestig het protocol van de gateway, de authenticatiestroom en eventuele eisen voor beheerde apparaten met de mensen die hem bezitten, want dat zijn beleids- en applicatielaagfeiten die een build niet kan leveren.

De buildinstructies van het project behandelen de autotools-reeks en de eis van het netwerkscript uitgebreider, en die moet je volgen in plaats van een blogpost die ouder is dan je macOS-versie. Als het doel alleen verbinden is, neem het pakket, houd het script en laat de compiler erbuiten.

Gerelateerde artikelen