Hook ya client-connect ya OpenVPN: anwani yako inakwenda wapi hasa
Skript ya client-connect haiwezi kurudisha anwani kwa kuichapisha. Tazama jinsi faili ya muda ya hook, hali ya kutoka na topolojia huamua IP ya mteja.
Kurudisha anwani kutoka skript ya client-connect inaonekana kana kwamba inapaswa kuweka IP ya mteja. Lakini haifanyi hivyo: njia pekee ya hook kwa seva ni faili ya muda ambayo njia yake inakuja kama hoja ya mwisho ya skript, na anwani lazima iandikwe hapo katika sintaksia ya ifconfig-push. Skript inayochapisha anwani au kutoka kwa sifuri bila kuandika chochote huzalisha mteja aliyounganishwa na anwani kutoka kwenye bwawa, na kumbukumbu ya seva inaonekana nzuri kabisa.
Machafuko ni ya kueleweka, kwa sababu hook nyingine kadhaa hujibu kwa kweli kupitia misimbo ya kutoka au vigezo vya mazingira. Hii ina mkataba wake, na mkataba unaanza na jina la faili.
Hook huandika faili, sio thamani ya kurudisha
Tangazo ni mistari miwili: script-security 2 kuruhusu wito, kisha client-connect /etc/openvpn/server/assign-address.sh. Mteja anapothibitisha, seva huendesha skript hiyo ikiwa imeongeza njia ya faili iliyozalishwa kama hoja ya mwisho, ambayo ni $1 tu ikiwa tangazo halipitishi hoja zake za ziada. Kila kitu kinachotumika kwa mteja huyo huenda kwenye faili hiyo kama maagizo ya kawaida, moja kwa kila mstari, sawa kabisa na jinsi yangeonekana katika usanidi. Kifuniko kinachoongeza vigezo vyake huhamisha nafasi, na dalili ya kawaida ni skript inayoandika kwenye njia inayofanana na --verbose.
Hali ya kutoka ni nusu nyingine ya mkataba. Sifuri inamaanisha kubali na usome faili; kitu kingine chochote hukataa muunganisho, na hivyo ndivyo utambulisho usiochorwa hukataliwa badala ya kurudi kimyakimya kwenye bwawa. Andika maagizo kamili kabla ya kurudisha mafanikio, ili faili iliyoandikwa nusu isiwe kamwe usanidi wa mteja.
Maagizo mawili yanastahili umakini kwa sababu yanaingiliana na kila kitu kingine. ifconfig-push huweka anwani, wakati route iliyotumwa humwambia mteja kile kinachofikiwa kupitia handaki; rudisha ya kwanza na usahau ya pili na utapata mteja mwenye anwani na asiye na mahali pa kwenda. Mpangilio ndani ya faili haujalishi, lakini ukamilifu unajalisha. Hook inayotuma njia kwa kiambishi awali ambacho hakuna mwenzake anayeweza kufikia ni kosa lile lile linaloonekana kutoka upande mwingine.
Ingizo huja kupitia vigezo vya mazingira: common_name, trusted_ip, ifconfig_pool_remote_ip na vingine. Vichukulie vyote kama mifuatano kutoka nje ya seva, kamwe sio vipande vya shell.
Uchoraji wa anwani ni sera, sio hesabu
Njia ya mkato inayovutia ni kuchanganua jina la cheti na kutumia tarakimu zake kama okteti ya mwisho. Hiyo sio mgawaji, na inashindwa kwa njia za kawaida: majina mawili yenye kiambishi kimoja hugongana, jina linaloishia na 300 sio anwani, na cheti kilichopewa jina jipya na msimamizi huhamisha kifaa kimyakimya. Thibitisha uanachama wa subnet, safu ya wenyeji inayoweza kutumika, anwani zilizotengwa na upekee katika kila wito, na uweke uchoraji kwenye jedwali ambalo mtu anaweza kusoma.
Yeyote anayedhibiti jina anadhibiti anwani, kwa hivyo amua common_name inawakilisha nini hasa katika usambazaji huu. Ikiwa username-as-common-name imewezeshwa, utambulisho ni kuingia na sio somo la cheti. Kamwe usipitishe thamani hiyo kwenye tathmini ya shell, na kamwe usiruhusu mteja kuathiri njia ya faili.
Mgawaji unaotegemea rejista lazima ustahimili usawa. Hifadhi anwani kwa njia ya atomiki, shughulikia uandishi ulioshindwa bila kukubali mteja aliyesanidiwa nusu, na weka alama kwa kila mgao na muunganisho unaomiliki, ili kukatwa kwa marehemu kutoka kipindi cha zamani hakuwezi kuachilia anwani ambayo mpya tayari inaishikilia. Matukio kadhaa ya seva yanayoshiriki bwawa moja hufanya hitaji hilo kuwa kali zaidi badala ya hiari.
Topolojia huamua maana ya ifconfig-push
Kwa topology subnet kwenye 10.77.0.0/24, ifconfig-push 10.77.0.20 255.255.255.0 ni anwani pamoja na barakoa yake ya mtandao. Chini ya topology net30 hoja ya pili sio barakoa hata kidogo bali ni anwani ya mwenzake, kwa hivyo kunakili umbo la subnet kwenye seva ya net30 hukupa mteja anayeunganisha na hawezi kupitisha trafiki. Badilisha topolojia kwa makusudi, kamwe sio ili mfano uonekane thabiti. Seva inayoendesha net30 tayari ina wateja hai kwenye uanwani wa zamani, kwa hivyo kubadili ni uhamiaji wenye dirisha la matengenezo, sio uhariri wa mstari mmoja.
Anwani tuli lazima ziwe nje ya bwawa linalobadilika na nje ya kila mgao mwingine tuli, ikiwa ni pamoja na zile zinazotolewa na faili za kawaida za client-config-dir. Ikiwa mifumo miwili inaweza kuzalisha anwani moja kwa wateja tofauti, mmoja wao hatimaye atafanya hivyo.
Jaribu hali nne kabla ya kuiamini
Endesha ukaguzi huo huo kwa utambulisho uliochorwa, usiochorwa, muunganisho upya na hitilafu ya rejista iliyoigwa. openvpn --config client.ovpn --verb 4 huonyesha anwani iliyotengwa katika jibu la push, na kwenye seva grep -A2 PUSH_REPLY /var/log/openvpn/openvpn.log huthibitisha kile kilichotumwa kwa kweli. Kwa utambulisho usiochorwa matokeo yanayotarajiwa ni muunganisho uliokataliwa, sio anwani ya bwawa.
Kisha kagua saraka ambayo daemon huandika faili hizo za muda. Skript huendeshwa katika muktadha wa huduma iliyopunguzwa, kwa hivyo njia ambayo root anaweza kuandika lakini daemon hawezi hugeuza kila muunganisho kuwa kukataliwa na hitilafu ya ruhusa iliyozikwa mistari kadhaa chini kwenye kumbukumbu.
Ugawaji sio idhini: anwani iliyobandikwa bado haitoi ufikiaji wa kila marudio nyuma ya seva. Weka sera ya uelekezaji na ukuta wa moto katika tabaka lake, na uthibitishe dhidi ya anwani uliyoweka sasa hivi.