Ne, connection string ne može pokrenuti vaš VPN tunel
VPN posjeduje operativni sustav ili klijent, nikada upravljački program. Prvo podignite tunel, proslijedite domenske vjerodajnice uz netonly, pa provjerite kružna putovanja pokazivača.
Programeri stalno traže mjesto gdje connection string, JDBC URL ili unos u tnsnames.ora odabire VPN. Takvo mjesto ne postoji. Tunel uspostavlja operativni sustav ili klijent proizvođača koji registrira virtualni adapter, a svaka biblioteka baze podataka iznad njega koristi sloj socketa koji iz toga proizlazi. Connection string imenuje host, port i vjerodajnicu, i to je cijeli rječnik.
Mit: connection string može odabrati tunel
Upravljački program otvara TCP socket prema hostu i portu. Nema API za podizanje tunela, nema polje za profil tunela i nema način da se autentificira na VPN gateway.
Zato se alati ponašaju jednako kada ruta postoji. SSMS, DBeaver, Eclipse Data Tools i obični sqlcmd djeluju kao da je poslužitelj na lokalnoj mreži, jer sa stajališta socketa i jest. Virtualni adapter učinio je podmrežu baze dostupnom, a upravljački program nikada ne zna kako.
To objašnjava i zašto connection string ne može popraviti prekinuti tunel. Kada veza umre, upravljački program prijavi timeout ili opću mrežnu grešku, a aplikacijski kod koji to tretira kao problem upita zauvijek ponavlja pogrešan sloj.
Podignite tunel prije nego što upravljački program krene
Povežite VPN na razini operativnog sustava, prema uputama davatelja usluge ili mrežnog tima, i tek onda otvorite alat. U praksi to znači da ruta do podmreže baze postoji prije nego što upravljački program razriješi ime hosta.
Držite nadzor nad tunelom izvan aplikacije. PHP ili Java servis koji sam pokušava podići vezu upisuje ponašanje jednog davatelja u poslovni kod, i svaki failover postaje izdanje aplikacije. Nadzornik koji posjeduje tunel, prati ga i restartira je odvojena stvar od puta upita.
Provjerite rutu prije nego okrivite upravljački program: ako se host ne razrješava ili port ne odgovara iz ljuske, nijedan connection string to neće promijeniti.
Mit: Windows greška autentifikacije znači da je ruta pokvarena
Windows autentifikacija preko VPN-a često pada s greškom koja izgleda kao mrežni kvar, a ruta je u redu. Kada račun pripada drugoj domeni i prijenosnik joj se ne može pridružiti, pokrenite klijent s eksplicitnim vjerodajnicama umjesto identiteta desktop sesije.
runas /noprofile /netonly /user:CORP\dbreader "C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\Ssms.exe"/netonly prekidač čuva te vjerodajnice samo za udaljenu autentifikaciju. Potvrdite što je poslužitelj zaista primio pomoću SELECT SUSER_SNAME(), umjesto da vjerujete dijalogu veze. Navodi se da spremanje vjerodajnica za adresu poslužitelja u Windows Credential Manager radi za SSMS, ali ne uvijek za servis koji radi pod drugim računom, pa provjerite koji identitet proces koristi prije nego promijenite prijavu.
Latencija pretvara pokazivač na strani poslužitelja u timeout
Pokazivač na strani poslužitelja traži od baze da drži rezultat i dohvaća ga postupno, što jedan veliki rezultat pretvara u mnogo malih kružnih putovanja. Na LAN-u je to jeftino. Preko tunela s desecima milisekundi dodatne latencije isti upit može premašiti timeout naredbe, a da gotovo ne prenese podatke.
Prijeđite na pokazivač na strani klijenta ili povećajte veličinu dohvaćanja i grupirajte retke, i broj kružnih putovanja pada. Usko grlo je broj razmjena, ne nominalna brzina veze, pa će vas mjerenje propusnosti zavesti, dok mjerenje kružnih putovanja neće. Testirajte s najvećim skupom rezultata koji vaši korisnici zaista povlače, ne s upitom od jednog retka koji se vraća trenutno. Ako se timeout pomiče ali ne nestaje, povećajte timeout naredbe i veličinu dohvaćanja zajedno i mjerite ponovno.
Ista aritmetika vrijedi za brbljave ORM-ove i za svakog klijenta koji izdaje jednu naredbu po retku. Ako je plan upita dobar i prijenos mali, prebrojite mrežne razmjene prije nego podesite bazu.
Provjerite port, instancu i lokalni filtar
Imenovana instanca sluša na dinamičkom portu, pa potvrdite port umjesto da pretpostavljate 1433. Na zadanoj instanci vrijednost se može pročitati iz registarske vrijednosti TcpPort pod ključem SuperSocketNetLib te instance. Za Oracle provjerite da se host u tnsnames.ora razrješava, da adresa odgovara i da je port listenera dopušten; 1521 je uobičajena zadana vrijednost, ne jamstvo.
Zatim isključite vlastiti popis dopuštenja tunela i, konačno, lokalni antivirus ili host firewall koji blokira vezu čak i kada su klijent i poslužitelj na istom stroju. Zabilježite fazu kvara prije nego promijenite konfiguraciju, jer razrješavanje imena, TCP dostupnost i TLS ili prijava svaki padaju s drugom porukom.
Upišite fazu u tiket. Inače će sljedeća osoba ponoviti istu potragu za connection stringom s koje je sve počelo.