OpenVPN iroute и рута у језгру: која недостаје?
Сервер има руту, а саобраћај ипак стаје. Једна одлука о путањи припада језгру, друга peer-у; сазнајте која недостаје и шта проверити.
Пакет за 10.77.20.0/24 доноси две одвојене одлуке на OpenVPN серверу: оперативни систем мора да га преда VPN интерфејсу, а OpenVPN мора да зна који повезани клијент поседује тај префикс. Рута у језгру која недостаје одбацује га пре тунела, а рута peer-а која недостаје после њега. Обе грешке изгледају исто са удаљеног LAN-а, а дијагностика која је ваша захтева по једну команду са сваке стране.
У класичној путањи података у корисничком простору, рута у језгру уводи пакет у процес тунела, а iroute том процесу каже који peer треба да га прими. Ниједна не замењује другу, а конфигурација са само једном од њих изгледаће разумно до првог ping-а.
Две одлуке, а не једна рута
Замислите везу између локација где 10.77.20.0/24 стоји иза једног клијента. Рута у језгру сервера, на пример ip route add 10.77.20.0/24 dev tun0, шаље одговарајуће пакете уређају тунела. Затим OpenVPN прегледа своју унутрашњу табелу, изграђену од iroute уноса у директоријуму конфигурације клијента, да одлучи која веза peer-а ће их примити. Без руте у језгру пакет никада не стиже до процеса, а без руте peer-а стиже до процеса и не одлази никуда.
Ту поделу је лако заборавити, јер један ред руте у профилу клијента може изгледати као да обавља оба посла. Не обавља: гурање руте каже клијентима шта да шаљу кроз тунел, док iroute каже серверу ко поседује опсег адреса иза клијента. Они живе у различитим датотекама, читају их различите стране и падају у супротним смеровима.
Где припада iroute и шта каже
Унос иде у датотеку за појединачног клијента названу по common_name клијента, под client-config-dir, као iroute 10.77.20.0/24. Подударање имена датотеке није козметичко: OpenVPN тражи аутентификовани идентитет и чита датотеку са тачно тим именом, па датотека под именом site-a важи само за клијента чије је заједничко име site-a. Додајте ccd-exclusive ако клијенте без такве датотеке треба одмах одбити, што је исправно подешавање када је сваки клијент мрежна капија локације. Држите по једну датотеку за сваку капију и назовите је по субјекту сертификата који заиста издајете.
Тестирајте унос са сервера пре него што окривите удаљени LAN. Статусна датотека наводи повезане клијенте са њиховим заједничким именима, а сервер покренут са --verb 4 бележи инсталацију iroute у тренутку када се peer повеже. Ако се при повезивању ништа не појави, датотека је у погрешном директоријуму или именује погрешан идентитет.
Замка: датотека постоји, идентитет је погрешан
Исправно изгледајући iroute повезан са погрешним peer-ом губи више времена од датотеке која недостаје, јер на диску све изгледа исправно. Преименовање сертификата, дуплирана заједничка имена и username-as-common-name који мења ефективни идентитет све то производе. Проверите који је идентитет сервер аутентификовао, а не који сте очекивали: статусни излаз је меродаван, док је име датотеке само кључ за претрагу.
Рута може надживети свог власника. Статичке руте и iroute уноси описују префикс, а не гаранцију доступности, па саобраћај може наставити да се усмерава ка peer-у који је тренутно искључен.
Довршите путању иза peer-а
Власништво над peer-ом је средина путање, а не крај. Клијент мора да прослеђује пакете из тунела у свој LAN, што значи да је на том домаћину омогућено прослеђивање IP-а и да правило заштитног зида дозвољава пролаз. Домаћини на удаљеном LAN-у требају повратну путању за адресу тунела: или руту која показује назад ка капији, или намерно пројектован NAT на страни клијента. Потврдите подешавање прослеђивања на клијенту помоћу sysctl net.ipv4.ip_forward, уместо да претпостављате подразумевану вредност дистрибуције.
Ако други VPN клијенти треба да достигну ту подмрежу, распоред поново расте: серверу треба client-to-client, а ти клијенти морају да усмере префикс кроз тунел. Ништа од тога не произлази из сопствене табеле рута сервера.
Проверите једну дестинацију из стварног извора, а не са самог сервера. Ping са неповезаног LAN домаћина до домаћина иза клијента вежба повратну путању, правило прослеђивања и власништво над peer-ом у једном потезу, док успешно руковање доказује само идентитет. Затим искључите peer који је власник и запишите шта рута ради, јер тај одговор је ваш начин отказа.