Unganisha wateja wawili wa OpenVPN kwenye mwenyeji mmoja wa Linux kwa fwmark
Wateja wote wawili wanataka njia chaguo-msingi. Bandika seva ya ndani kwa njia ya mwenyeji, zuia mteja wa pili kuandika upya majedwali, kisha elekeza mitiririko kwa fwmark.
Kuongeza mteja wa pili wa OpenVPN kwenye mwenyeji mmoja wa Linux hushindikana katika moja ya maeneo mawili. Ama mteja wa ndani hawezi kufikia seva yake mwenyewe kwa sababu handaki ya nje imechukua usafirishaji huo, au mteja wa pili huandika upya jedwali la njia na handaki ya kwanza huacha kufanya kazi. Matatizo yote mawili yako katika uelekezaji, si katika usimbaji fiche, na yote mawili hutatuliwa kabla handaki mpya kubeba trafiki yoyote ya programu. Anwani hapa ni za mfano: tun0 ni handaki ya nje, 203.0.113.9 ni seva ya ndani, na TCP 9999 ni mtiririko ambao lazima utumie njia ya ndani.
Njia mbili za kushindikana, jedwali moja la njia
Mteja wa ndani hufungua soketi ya UDP kuelekea seva yake, na soketi hiyo hufuata jedwali la sasa la njia kama nyingine yoyote. Ikiwa handaki ya nje tayari inamiliki chaguo-msingi, pakiti za kupeana mkono huingia kwenye handaki ya nje. Hiyo hufanya kazi tu wakati seva ya nje inaweza kufikia seva ya ndani na upande wa pili unakubali kubeba mtiririko; vinginevyo kupeana mkono husimama na mteja hujaribu tena.
Kushindikana kwa pili hutoka kwenye push ya seva. Push ya kawaida ni redirect-gateway def1, ambayo husakinisha 0.0.0.0/1 na 128.0.0.0/1 badala ya kubadilisha njia chaguo-msingi. Kwa hiyo wateja wawili ambao kila mmoja husakinisha jozi yake ya /1 hugongana, na jozi mpya zaidi hushinda kwa karibu kila lengwa. Tafuta viambishi hivyo viwili kwenye jedwali wakati handaki inakufa baada ya ya pili kuunganishwa, kwa sababu njia chaguo-msingi yenyewe inaweza kuwa haikubadilika kamwe.
Weka alama kwenye mtiririko na uupe jedwali
Elekeza trafiki iliyochaguliwa kwa kuiwekea alama kwenye jedwali la mangle na kulinganisha alama katika kanuni ya sera. Kanuni huelekeza kwenye jedwali maalum ambalo njia yake chaguo-msingi ni kifaa cha ndani, kwa hiyo pakiti zilizowekwa alama pekee huchukua njia ya ndani.
iptables -t mangle -A PREROUTING -p tcp -m multiport --dport 9999 -j MARK --set-mark 0x9999
ip rule add fwmark 0x9999 table 200 pref 1000
ip route add default dev tun1 table 200Mengi ya kushindikana katika seti hii ya kanuni hutoka kwenye makosa mawili. Thamani ya alama inayowekwa na firewall na thamani inayolinganishwa na kanuni lazima ziwe sawa, kwa sababu kutofautiana hakuleti kosa wala athari. Na PREROUTING huona pakiti zinazokuja kutoka nje pekee, kwa hiyo muunganisho unaoanzishwa kwenye mwenyeji huyu unahitaji kanuni ya OUTPUT yenye ulinganisho huo kabla ya kuwekwa alama kabisa.
Chukua umiliki wa njia kutoka kwa mteja wa pili
Chaguo mbili huzuia mteja wa pili kuhariri jedwali, na hufanya kazi katika sehemu tofauti. route-nopull hupuuza chaguo za njia zilizotumwa kwa push, kwa hiyo hakuna kinachosakinishwa. route-noexec hukubali chaguo zilizotumwa katika mazingira ya mteja lakini huacha mabadiliko ya jedwali kwa hook, na hicho ndicho unachotaka unapohitaji kuona seva ilitoa nini.
Hook huendeshwa na thamani zilizotumwa katika mazingira yake, na inapaswa kuongeza tu maingizo uliyoidhinisha. Ifanye idempotent: futa jedwali analomiliki kabla ya kujenga upya, na usidhani kwamba uendeshaji uliopita uliacha hali safi. Kuunganisha tena huita hook tena, na hook inayoongeza bila kusafisha hukusanya njia rudufu.
Chagua mmiliki mmoja na uandike. Profaili inayoweka chaguo zote mbili, au hook inayoshindana na script ya mkono, huzalisha jedwali ambalo hakuna anayeweza kulielezea baadaye.
Bandika anwani zote mbili za seva
Seva ya ndani inahitaji njia ya mwenyeji kupitia kifaa cha nje kabla mteja wa ndani kuunganishwa. Ingizo hilo ndilo linalobakiza usafirishaji wa ndani ndani ya handaki ya nje badala ya kuuacha ufuate chaguo-msingi.
ip route add 203.0.113.9/32 dev tun0
ip route get 203.0.113.9Ongeza pia njia ya mwenyeji inayolingana kwa seva ya nje kwenye jedwali kuu, vinginevyo kuunganisha tena kunaweza kuelekeza usafirishaji wa mteja wa nje wenyewe ndani ya handaki yake. Mpangilio si hiari: ongeza maingizo haya baada ya kiolesura husika kuwepo, yaani hook au script inayoendeshwa baada ya muunganisho. Njia inayoelekeza kwenye kifaa kilichozimwa huondolewa au hupuuzwa, kwa hiyo ingizo lililoandikwa wakati wa kuwasha halidumu katika mpangilio uliodhani.
Angalia utafutaji badala ya kusoma jedwali lote. Matokeo ya utafutaji wa njia hueleza kifaa na anwani ya chanzo ambavyo kernel itatumia, na ndivyo mteja anapata anapofungua soketi yake.
Jaribu mnyororo na ufanye kushindikana kuonekana
Nasa kwenye kiolesura cha nje wakati mteja wa ndani anaunganishwa. Kupeana mkono kwa ndani kunapaswa kuonekana kama mzigo uliosimbwa fiche ndani ya handaki ya nje; ikiwa unaonekana kama UDP tupu kuelekea 203.0.113.9, njia ya mwenyeji haipo na mnyororo haukujengwa kamwe.
Mnyororo unaorudi kimya kimya kwenye uplink halisi ndio matokeo mabaya zaidi, kwa sababu hali ya kiolesura haitangazi kitu na trafiki ya ndani hutoka kwa anwani ya chanzo isiyo sahihi. Ikiwa mteja wa pili anaweza kuunganisha tena moja kwa moja wakati handaki ya nje inaanguka, zima njia hiyo au ifunge kwenye kiolesura cha nje ili kushindikana kuonekana.
Maliza kwa mitiririko miwili na dump moja ya kanuni: muunganisho uliowekwa alama na usio na alama unapaswa kuchukua njia tofauti, na ip rule show inapaswa kuorodhesha kipaumbele ulichokusudia. Ikiwa mitiririko yote miwili inachukua njia moja, alama haitumiki pale unapofikiri.