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 kindSource of truthWhere it lives
Connected clientThe address OpenVPN just assignedGenerated hosts file, rewritten per session
Service behind the tunnelA fixed address you choseStatic address= drop-in
Anything with a certificate nameThe certificate, not the poolEither, 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.

Erthyglau cysylltiedig