Enwau cleientiaid OpenVPN yn dnsmasq: sgript neu gofnodion statig?
Mae cyfeiriadau cleientiaid yn newid, nid enwau gwasanaethau. Cynhyrchwch enwau cleientiaid o sesiwn VPN, pinnwch enwau gwasanaethau mewn ffeil drop-in, yna gwnewch i gleientiaid ei defnyddio.
Mae dwy broblem enwi yn ymddangos ar bron bob porth OpenVPN bach. Ni allwch gyrraedd gliniadur cysylltiedig wrth yr enw ar ei dystysgrif, ac nid oes gan y gwasanaethau y tu ôl i’r tiwnel unrhyw enwau o gwbl. Maent yn edrych fel un broblem ac maent angen triniaethau cyferbyniol, oherwydd mae un cyfeiriad yn symud gyda phob sesiwn ac nid yw’r llall. Penderfynwch pa fath o enw rydych yn ei ychwanegu cyn i chi olygu unrhyw beth.
Penderfynwch fesul enw, nid fesul porth
Mae’r prawf yn syml: a yw’r cyfeiriad hwn yn newid pan fydd cleient yn ailgysylltu? Os ydyw, rhaid cynhyrchu’r enw o sesiwn VPN. Os nag ydyw, mae’n perthyn i gofnod statig y gallwch ei ddarllen a’i adolygu.
| 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 |
Cymysgu’r ddau yw’r methiant arferol. Mae gwasanaeth a binwyd yn y ffeil a gynhyrchwyd yn diflannu’r tro cyntaf i’r sgript ei hailysgrifennu, ac mae cleient a ysgrifennwyd mewn cofnod statig yn pwyntio at bwy bynnag a ddaliodd y cyfeiriad hwnnw ddiwethaf. Mae’r ddau gamgymeriad yn aros yn anweladwy nes bod enw’n datrys i’r peiriant anghywir. Erbyn hynny mae’r sawl sy’n dadfygio yn tybio bod DNS wedi torri yn hytrach na’r ffeil.
Y llwybr dynamig: learn-address a’r pwll
OpenVPN sy’n gwybod y neilltuad, felly gadewch iddo ddweud wrthych. Mae’r opsiynau gweinydd hyn yn gwneud y neilltuad yn barhaus ac yn sgriptadwy:
client-config-dir /etc/openvpn/ccd
ifconfig-pool-persist /etc/openvpn/ip-pool 60
script-security 2
learn-address /etc/openvpn/learn-address.sh
Mae learn-address yn rhedeg eich sgript pryd bynnag y caiff cyfeiriad ei ychwanegu, ei ddiweddaru neu ei ddileu, ac yn trosglwyddo’r llawdriniaeth, y cyfeiriad a’r enw cyffredin. Mae sgript leiaf yn ychwanegu un llinell fesul cleient ac yn ei thynnu pan gaiff ei dileu:
#!/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)
Ar ddyfais tun, yr ail ymresymiad yw cyfeiriad tiwnel y cleient, felly gellir defnyddio’r llinell yn uniongyrchol. Ar ddyfais tap mae OpenVPN yn trosglwyddo cyfeiriad MAC y cleient yn lle hynny, oherwydd gall segment tap gario protocolau heblaw IPv4, ac yna rhaid i chi chwilio’r cyfeiriad yn y ffeil pwll wrth yr enw cyffredin cyn ysgrifennu unrhyw beth.
Byddwch yn glir ynghylch beth yw’r ffeil a gynhyrchwyd: ciplun o bwy sydd wedi’i gysylltu ar hyn o bryd. Mae enwau’n diflannu wrth ddatgysylltu, sef yn union yr hyn rydych ei eisiau ar gyfer gliniaduron sy’n symud rhwng rhwydweithiau, ac yn union yr hyn nad ydych ei eisiau ar gyfer gweinydd sy’n rhedeg drwy’r nos.
Y llwybr statig: address= ac ehangu parth
Pwyntiwch dnsmasq at y ffeil a gynhyrchwyd yn lle ffeil hosts y system, a rhowch barth iddo fel bod enwau byr yn ehangu’n enwau cwbl gymwys:
domain=corp.example
no-hosts
addn-hosts=/etc/openvpn/hosts.lan
listen-address=127.0.0.1,10.8.0.1
bind-interfaces
Pan fydd domain wedi’i osod, mae llinell fel 10.8.0.6 alice yn ateb ar gyfer alice a alice.corp.example ill dau. Cadwch listen-address at borth y tiwnel a loopback, oherwydd mae datryswr a gyhoeddir ar ryngwyneb LAN ar ddamwain yn wasanaeth nad oeddech yn bwriadu ei gynnig.
Mae gwasanaethau nad ydynt byth yn dod o’r pwll yn cael eu cofnodion eu hunain. Rhowch nhw mewn ffeil drop-in ar wahân yng nghyfeiriadur ffurfweddu’r dosbarthiad fel na all uwchraddiad pecyn eu trosysgrifo:
address=/files.corp.example/10.8.0.20
address=/db.corp.example/10.9.0.5
Trosglwyddwch y datryswr neu ni fydd dim yn digwydd
Nid yw datryswr nad oes neb yn gofyn iddo yn newid dim. Rhaid i’r gweinydd ei hysbysebu:
push "dhcp-option DNS 10.8.0.1"
push "dhcp-option DOMAIN corp.example"
Mae cleientiaid Windows yn cymhwyso’r ddau opsiwn eu hunain. Nid yw’r rhan fwyaf o gleientiaid Linux yn gwneud: maent angen integrasiwn datryswr a gefnogir fel bachyn update-resolv-conf y dosbarthiad neu driniaeth DNS NetworkManager, neu barth chwilio a gweinydd enwau â llaw. Gwiriwch ddatryswr gwirioneddol y cleient yn hytrach na thybio bod y push wedi’i anrhydeddu, oherwydd mae push a anwybyddir yn edrych yn union fel gweinydd nad yw’n ateb.
Gwiriwch ar dair haen
Gofynnwch i’r gweinydd yn uniongyrchol yn gyntaf, yna i gleient, yna i’r cymhwysiad:
dig +short @10.8.0.1 alice.corp.example
getent hosts files.corp.example
Os yw ymholiadau uniongyrchol yn ateb ac nad yw’r cymhwysiad yn gwneud, y bai yw’r trosglwyddiad i’r cleient yn hytrach na’r parth. Os yw’r enw’n datrys ac mae’r cysylltiad yn dal i fethu, mae’r enw’n iawn a’r llwybr neu’r mur tân yw’r peth nesaf i’w edrych arno.
Ysgrifennwch y ddau gategori wrth ymyl y ffurfweddiad: pa enwau sy’n cael eu cynhyrchu, pa rai sy’n bin, a pha dystysgrif y mae’n rhaid i bob un gydweddu â hi. Bydd y person nesaf sy’n ychwanegu gweinydd yn copïo pa batrwm bynnag y daw o hyd iddo gyntaf.