OpenVPN bezeroen izenak dnsmasq-en: scripta edo sarrera estatikoa?
Bezeroen helbideak aldatzen dira, zerbitzuen izenak ez. Sortu bezero-izenak VPN saiotik, finkatu zerbitzu-izenak drop-in fitxategi batean, eta gero egin bezeroek hura erabil dezaten.
Bi izen-arazo agertzen dira ia OpenVPN ate txiki guztietan. Konektatutako ordenagailu eramangarrira ezin duzu iritsi bere ziurtagiriko izenaren bidez, eta tunelaren atzeko zerbitzuek ez dute izenik. Arazo bakarra dirudite eta kontrako tratamenduak behar dituzte, helbide bat saio bakoitzean mugitzen delako eta bestea ez. Erabaki zer-nolako izena gehitzen ari zaren ezer editatu aurretik.
Erabaki izenka, ez ateka
Proba erraza da: helbide hau aldatzen al da bezeroa berriro konektatzen denean? Baietz, orduan izena VPN saiotik sortu behar da. Ezetz, orduan irakurri eta berrikusi dezakezun sarrera estatiko batean dago.
| Name kind | Source of truth | Where it lives |
|---|---|---|
| Connected client | The address OpenVPN just assigned | Generated hosts file, rewritten per session |
| Service behind the tunnel | A fixed address you chose | Static address= drop-in |
| Anything with a certificate name | The certificate, not the pool | Either, but the name must match the certificate |
Biak nahastea da ohiko hutsa. Sortutako fitxategian finkatutako zerbitzua desagertu egiten da scriptak lehen aldiz berridazten duenean, eta sarrera estatikoan idatzitako bezeroa helbide hura azkenekoz izan zuenari begira dago. Bi erroreak ikusezin geratzen dira izen bat makina okerrean ebazten den arte. Ordurako arazketa egiten ari denak DNS hondatuta dagoela suposatzen du, fitxategia ez.
Bide dinamikoa: learn-address eta poola
OpenVPN esleipena ezagutzen du, beraz utzi hari esaten. Zerbitzariaren aukera hauek esleipena iraunkorra eta scriptagarria egiten dute:
client-config-dir /etc/openvpn/ccd
ifconfig-pool-persist /etc/openvpn/ip-pool 60
script-security 2
learn-address /etc/openvpn/learn-address.sh
learn-address-k zure scripta exekutatzen du helbide bat gehitu, eguneratu edo ezabatzen den bakoitzean, eta eragiketa, helbidea eta izen arrunta pasatzen ditu. Gutxieneko script batek lerro bat gehitzen du bezero bakoitzeko eta ezabatzean kentzen du:
#!/bin/sh
HOSTS=/etc/openvpn/hosts.lan
case "$1" in
add|update) echo "$2 $3" >> "$HOSTS" ;;
delete) sed -i "/^$2 /d" "$HOSTS" ;;
esac
kill -HUP $(cat /var/run/dnsmasq.pid)
tun gailu batean bigarren argumentua bezeroaren tunel-helbidea da, beraz lerroa zuzenean erabil daiteke. tap gailu batean OpenVPN-k bezeroaren MAC helbidea pasatzen du horren ordez, tap segmentu batek IPv4 ez den beste protokoloak ere eraman ditzakeelako, eta orduan helbidea pool fitxategian bilatu behar duzu izen arruntaren arabera ezer idatzi aurretik.
Izan argi sortutako fitxategia zer den: oraintxe konektatuta dagoenaren argazkia. Izenak deskonektatzean desagertzen dira, eta hori da sareen artean mugitzen diren ordenagailu eramangarrientzat nahi duzuna, eta ez duzu nahi gau osoan piztuta dagoen zerbitzari batentzat.
Bide estatikoa: address= eta domeinuaren hedapena
Bideratu dnsmasq sortutako fitxategira sistemaren hosts fitxategiaren ordez, eta eman domeinu bat izen laburrak erabat kualifikatutako izenetara heda daitezen:
domain=corp.example
no-hosts
addn-hosts=/etc/openvpn/hosts.lan
listen-address=127.0.0.1,10.8.0.1
bind-interfaces
domain ezarrita dagoenean, 10.8.0.6 alice bezalako lerro batek alice eta alice.corp.example bietarako erantzuten du. Eutsi listen-address tunel ateari eta loopback-i soilik, LAN interfazean ustekabean argitaratutako ebazle bat eskaintzeko asmorik ez zenuen zerbitzua delako.
Inoiz poletik etortzen ez diren zerbitzuek beren sarrerak dituzte. Jarri horiek distribuzioaren konfigurazio direktorioan dagoen drop-in fitxategi bereizi batean, pakete-eguneratze batek gainidatzi ez ditzan:
address=/files.corp.example/10.8.0.20
address=/db.corp.example/10.9.0.5
Eman ebazlea edo ez da ezer gertatuko
Inork galdetzen ez duen ebazle batek ez du ezer aldatzen. Zerbitzariak iragarri egin behar du:
push "dhcp-option DNS 10.8.0.1"
push "dhcp-option DOMAIN corp.example"
Windows bezeroek bi aukerak beren kabuz aplikatzen dituzte. Linux bezero gehienek ez: onartutako ebazle-integrazioa behar dute, hala nola distribuzioaren update-resolv-conf kakoa edo NetworkManager-en DNS kudeaketa, edo eskuz ezarritako bilaketa-domeinua eta izen-zerbitzaria. Egiazta ezazu bezeroaren benetako ebazlea push-a errespetatu zela suposatu beharrean, push ignoratua erantzuten ez duen zerbitzari baten berdin-berdina dirudielako.
Egiaztatu hiru geruzatan
Galdetu lehenik zerbitzariari zuzenean, gero bezero bati, eta azkenik aplikazioari:
dig +short @10.8.0.1 alice.corp.example
getent hosts files.corp.example
Zuzeneko kontsultek erantzuten badute eta aplikazioak ez, errua bezeroari ematean dago, ez zonan. Izena ebazten bada eta konexioak huts egiten badu oraindik, izena ondo dago eta hurrengoa ibilbidea edo suebakia da.
Idatzi bi kategoriak konfigurazioaren ondoan: zein izen sortzen diren, zein dauden finkatuta eta zein ziurtagirirekin bat etorri behar duen bakoitzak. Zerbitzari bat gehituko duen hurrengo pertsonak aurkitzen duen lehen eredua kopiatuko du.