Nid yw sgript sy'n cychwyn OpenVPN ac na fydd byth yn cysylltu fel arfer yn broblem rhwydwaith: mae'r cleient yn eistedd wrth anogyn heb derfynell i'w dynnu arni. OpenVPN sydd â dau ffordd gynorthwyedig yn union i ateb yr anogyn hwnnw heb ddyn, ffeil gymwysterau y tu ôl i auth-user-pass a'r soced rheoli, ac nid ydynt yn gyfnewidiol. Mae'r ffeil yn costio un gorchymyn ac yn ateb un anogyn; mae'r soced yn ateb pob anogyn ac yn rhoi i unrhyw beth all agor porth loopback sianel reoli heb ei dilysu. Pa un sy'n perthyn i'ch gosodiad yn dibynnu ar ba anogyn sy'n rhwystro mewn gwirionedd, ac ar ba gyfrinach y gallwch fforddio ei gadael yn llonydd.

Enwch yr anogyn cyn i chi ddewis mecanwaith

Mae pedwar anogyn yn edrych yr un fath ar derfynell. Daw'r pâr cyfrif o osodiad PAM neu auth-user-pass-verify y gweinydd ac mae auth-user-pass yn ei ateb. Mae cyfrinair allwedd breifat yn perthyn i'r ffeil allwedd ac yn cael ei ddarllen drwy --askpass neu ei deipio â llaw. Mae bwndel PKCS#12 yn gofyn am gyfrinair ei hun. Mae dilysu dirprwy yn defnyddio'r ffeil auth y mae --http-proxy yn ei chymryd, nid cymwysterau'r cyfrif.

Pan fydd OpenVPN yn rhedeg fel plentyn systemd, PHP neu Node nid oes terfynell, felly mae unrhyw un o'r rhain yn rhwystro'n dawel. Mae'r broses yn eistedd yno, mae'r log yn stopio ar ôl y llinell seiffr, ac mae'r uned yn goramser yn y pen draw; y distawrwydd hwnnw yw'r rheswm y mae pobl yn ychwanegu dolen ailgynnig neu sleep yn lle edrych pa anogyn sy'n disgwyl. Dim ond y soced rheoli all ateb y pedwar. Mae'r ffeil gymwysterau yn ateb yr un cyntaf a dim byd arall.

auth-user-pass: un ffeil, un anogyn

Mae'r ffeil yn dal yr enw defnyddiwr ar linell un a'r cyfrinair ar linell dau, a dim byd arall: dim dyfyniadau, dim enwau allweddi, dim sylw. Gosodwch fodd 600 a gwnewch y perchennog yn y cyfrif sy'n rhedeg openvpn, sydd ar gyfer gwasanaeth yn aml yn ddefnyddiwr dynodedig yn hytrach na'ch mewngofnod. Mae ffeil sy'n eiddo i root o dan /root yn y gwahaniaeth rhwng gorchymyn sy'n gweithio yn eich cragen ac uned sy'n methu wrth gychwyn.

Mae dau fanylyn yn troi ffeil gywir yn anogyn. Mae golygydd sy'n cadw CRLF yn gadael dychweliad car llusg wedi'i ludio wrth y cyfrinair, felly mae'r gweinydd yn gwrthod cyfrinair sy'n edrych yn gywir yn y ffeil; gwiriwch â cat -A neu od -c yn hytrach nag â'r llygad. Ac mae auth-user-pass heb ddadl y tu mewn i'r proffil yn golygu «gofyn i'r defnyddiwr» yn ôl dyluniad, na fydd ail orchymyn ar y llinell orchymyn efallai yn ei drechu, oherwydd mae'r proffil yn cael ei dosrannu lle mae'n sefyll.

Trefn yr opsiynau yw'r drydydd trap, ac mae'n benodol i fersiwn. Mae rhai adeiladau OpenVPN 2.4 yn anwybyddu --auth-user-pass pan fydd yn ymddangos cyn --config, felly mae'r un dau opsiwn yn y drefn arall yn cysylltu. Rhowch y gorchymyn y tu mewn i'r proffil, neu ar ôl --config ar y llinell orchymyn, a grep y proffil am bob digwyddiad cyn newid unrhyw beth arall.

Mae auth-nocache yn perthyn i'r mecanwaith hwn ond nid yw'n cyflenwi dim. Mae'n cyfyngu pa mor hir y mae'r cleient yn cadw'r cymhwyster yn y cof, sy'n helpu ar ôl damwain ac yn helpu dim pan fo'r ffeil ar goll. Mae ailgysylltiad ar ôl goramser sesiwn ar ochr y gweinydd yn ailddarllen y ffeil, felly gall cymhwyster a weithiodd wrth gychwyn ddod i ben yng nghanol y dydd.

Y soced rheoli: pob anogyn, mwy o arwynebedd

Cychwynnwch y cleient â gwrandäwr a datganwch yn benodol y bydd anogynnau'n cael eu hadrodd arno, gan ddefnyddio'r gorchmynion a ddogfenir yn llawlyfr OpenVPN 2.6:

management 127.0.0.1 3030
management-query-passwords

O bash, daliwch y cysylltiad ar ddisgrifydd ffeil sbâr ac atebwch yn ôl enw'r anogyn yn hytrach nag yn ôl safle, oherwydd gall ailgysylltiad ofyn mewn trefn wahanol:

exec 3<>/dev/tcp/127.0.0.1/3030
while read -r -u 3 line; do
  case "$line" in
    *"Need 'Auth' username/password"*)
      echo 'username "Auth" alice' >&3
      echo 'password "Auth" secret' >&3 ;;
    *"Need 'Private Key' password"*)
      echo 'password "Private Key" secret' >&3 ;;
  esac
done

Y ffin yw'r cludiant. Mae'r protocol rheoli yn destun plaen dros TCP ar loopback, felly ni chaiff y gwrandäwr gael ei gyhoeddi ar gyfeiriad LAN na thwnnel i adael rheolydd o bell gyrraedd ato; mae rheolydd o bell yn golygu anfon SSH ymlaen, nid rhwymo ehangach. Mae'r daemon cymunedol hefyd yn derbyn un cleient rheoli ar y tro, felly ni all GUI na monitor rannu'r soced â'ch sgript. Mae'r ail gysylltiad yn cael ei wrthod, nid ei giwio, ac mae'r methiant yn edrych fel sgript sydd wedi mynd yn fyddar.

Mae'r soced hwnnw hefyd yn sianel reoli. Heb gyfrinair rheoli, gall unrhyw beth all gysylltu â 127.0.0.1:3030 ddarllen statws, lladd y twnnel neu ateb anogyn ei hun. Mae'r cyfrinair rheoli a'r ffeil gymwysterau o'r un dosbarth o gyfrinach, ac mae'r ddau yn haeddu'r un gofal.

Pa un sy'n addas i'r gosodiad

Dewiswch y ffeil gymwysterau pan mai'r unig anogyn yw'r pâr cyfrif, mae'r cleient yn rhedeg fel gwasanaeth â pherchennog sefydlog, ac y gallwch gadw ffeil 600 allan o gopïau wrth gefn nad ydych yn eu rheoli. Dewiswch y soced rheoli pan fo cyfrinair allwedd neu gyfrinair PKCS#12 ar waith, pan fo'r lapio eisoes yn goruchwylio'r broses, neu pan fydd angen ichi wylio statws ac anogynnau wrth ddadfygio ailgysylltiad.

Mae dau amod yn symud y penderfyniad. Os mai /bin/sh yw'r lapio, uned systemd sy'n galw'r deuaidd yn uniongyrchol, neu gynhwysydd lleiaf, nid yw'r glud soced ar gyfer bash yn unig ar gael a'r ffeil yw'r ateb rhatach. Os yw'r gyfrinach yn cylchdroi'n aml, nid yw'r un ffeil yn gartref da iddi: holwch gylch allweddi o lapio bach a gadewch i'r uned alw'r lapio, sy'n cadw'r cylchdro mewn un man a'r cyfrinair allan o hanes y gragen.

Mae amnewid proses yn sefyll rhwng y ddau ac yn perthyn i'r un. Mae'r un-liniad isod yn gweithio oherwydd bod bash yn ei ehangu cyn i openvpn gychwyn, nid oherwydd bod y cleient yn deall y gystrawen:

openvpn --config client.ovpn --auth-user-pass <(printf "%s
%s
" "$USER" "$PASS")

Mae'n torri o dan /bin/sh, mewn uned sy'n osgoi'r gragen, ac mewn delweddau heb bash na /dev/fd. Cadwch ef ar gyfer profion rhyngweithiol, byth fel y contract y mae gwasanaeth yn dibynnu arno.

Diogelwch y gyfrinach, yna gwiriwch o'r log

Mae'r ddau fecanwaith yn gadael cyfrinach y gall proses OpenVPN ei darllen. Peidiwch byth â rhoi'r cyfrinair ar y llinell orchymyn nac yn ffeil yr uned, lle mae ps a systemctl yn ei ddangos i bob defnyddiwr lleol; trosglwyddwch lwybr y ffeil, nid y gwerth y tu mewn. Lle gall tystysgrifau ddisodli'r pâr cyfrif, mae hynny'n dileu'r categori anogyn yn lle ei guddio.

Mae rhediad cywir yn dangos y dilyniant anogynnau'n cwblhau a'r sesiwn yn cyrraedd «Initialization Sequence Completed». Os yw'r cleient yn stopio wrth yr un anogyn, methodd y cyfateb: printiwch yr union linellau a anfonodd y soced, gwiriwch y dyfyniadau ac enw'r anogyn, a thrwsiwch y patrwm yn lle ychwanegu sleep. Mae twnnel sy'n adrodd llwyddiant ac yn cario dim yn broblem llwybro neu push, nid un gymwysterau.

Yna profwch yr ailgysylltiad, nid y cychwyn cyntaf yn unig. Gollyngwch sesiwn ochr y gweinydd neu arhoswch ei goramser; mae'r cleient yn gofyn eto, a dyna lle mae ffeil a edrychai'n gywir wrth gychwyn yn dangos a yw'n dal yn ddarllenadwy i'r cyfrif sy'n ailgysylltu.

Erthyglau cysylltiedig