Иста IP адреса сервера, две путање: означавање спољашњег тока OpenVPN
Рута домаћина која изузима VPN сервер изузима и HTTPS ка њему. Означите уместо тога шифровану коверту, а затим дајте тунел неозначеном саобраћају.
Уобичајена заштита од петље је рута домаћина: пошаљите саобраћај на јавну адресу VPN сервера кроз uplink, тако да шифрована сесија никада не уђе у сопствени тунел. То функционише тачно до тренутка када желите кроз тунел да достигнете и веб услугу на истом серверу, јер је изузетак везан за одредиште, а одредиште је идентично. Излаз је престати класификовати по одредишту и почети класификовати по томе који је сокет послао пакет.
Почните са два тока која желите да раздвојите
Један ток је сам шифровани OpenVPN транспорт, који мора изаћи кроз uplink, иначе би тунел носио сопствену спољашњу везу. Други је обичан HTTPS захтев на исту јавну адресу, који желите унутар тунела да би до услуге стигао из извора тунела. Исто одредиште, у многим случајевима исти број порта, другачији потребни пут.
За овај преглед претпоставите клијента на 10.90.0.10 преко tun1, јавну адресу сервера 198.51.100.25 и нетакнуту главну табелу чија задата рута показује на уобичајени uplink. Страна сервера такође мора да прихвати веб услугу на унутрашњем путу и враћа саобраћај извору тунела; слање пакета на јавну адресу не заобилази listener ни firewall политику сервера.
Пре него што било шта промените, забележите тренутна правила домаћина и одаберите вредности које нико други не користи: ознаку, број табеле и три приоритета правила. Одржите пут назад у машину који не иде кроз ову везу, јер грешка овде уклања ваш сопствени удаљени приступ, а не само квари картицу прегледача.
Означите сокет који носи коверту
Конфигурација клијента добија ознаку за своје шифроване одлазне пакете и престаје сама да инсталира руте, тако да је заменска политика једина која одлучује о путевима:
mark 42
route-noexec
disable-dco
Децимално 42 је хексадецимално 0x2a, и хексадецимални облик је оно на шта ће се руте правила подударати. Референца за link-options описује mark као нешто што се примењује на шифроване одлазне пакете на Linux-у, што је управо сокет чијим путем морате управљати. Искључивање offload-а data канала задржава овај пример на путу корисничког простора, где је понашање ознаке оно описано.
route-noexec потискује аутоматско додавање и уклањање рута од стране OpenVPN-а. Не инсталира ништа на њихово место, па од овог тренутка власник рута мора да одржава сваку руту коју тунел треба. Ако приватно одредиште нестане након промене, то је недостајућа заменска политика, а не грешка у ознаци.
Не држите руту домаћина у главној табели за 198.51.100.25 док ово радите. Таква рута поново уводи управо изузетак који дизајн покушава да сузи, и победиће за HTTPS ток пре него што се консултује било која од политика испод.
Пошаљите све остало у табелу тунела
Када интерфејс тунела постоји и има своју адресу, политика изгледа овако:
ip -4 route add default dev tun1 src 10.90.0.10 table 47100
ip -4 rule add priority 20000 lookup main suppress_prefixlength 0
ip -4 rule add priority 20001 not fwmark 0x2a lookup 47100
ip -4 rule add priority 20002 not fwmark 0x2a unreachable
Прво правило држи специфичне руте домаћина видљивим, укључујући сваку одобрену локалну мрежу, док задату руту главне табеле чини невидљивом за ову претрагу. Та разлика је важна: потискивање задате руте није исто што и игнорисање табеле, а локални изузеци који су вам још потребни преживљавају управо због тога. Читајте те изузетке један по један уместо да претпоставите да је резултат универзални прекидач за нужду.
Неозначени саобраћај тада пада у табелу тунела, преузима извор тунела и излази кроз VPN. Означени саобраћај пада на fwmark тесту на следећа два правила и наставља до обичне главне претраге ниже на листи, где још стоји задата рута uplink-а. Завршно unreachable правило је оно које спречава неозначени ток да тихо падне назад на uplink када недостаје рута тунела. Селектор је ознака од почетка до краја, а адреса одредишта никада не улази у одлуку.
Држите ту заштиту на месту кроз прекиде везе и инсталирајте је заједно са остатком политике, а не ручно. Правило које нестане са интерфејсом није политика, то је случајност. Брисање политике када тунел падне мења начин квара са „блокирано” на „процурело”, а застарела рута тунела која касније истекне је много лакши проблем за објашњавање од саобраћаја који је изашао кроз погрешан интерфејс.
Нека повратни пут види исту ознаку
Одлазне ознаке су само половина механизма, и ово је део који већина репродукција изоставља. Одговори на шифровану сесију долазе кроз uplink и подлежу валидацији повратног пута, која пита би ли извор био рутиран назад истим путем. Без помоћи, та претрага примењује вашу неозначену политику тунела и закључује да је пакет на погрешном интерфејсу.
Исправка припада власнику firewall-а: сачувајте ознаку на одлазној вези, вратите је на одговарајуће долазне пакете и омогућите обраду ознака валидирану извором за релевантни пут. То што OpenVPN поставља сокет ознаку не чини ниједну од те три ствари, а рецепт који наводи само клијентске опције је непотпун. Затражите ту интеграцију писмено, јер је то најмање видљив део дизајна и најлакше се губи при поновној изградњи.
Ни лабава провера повратног пута није замена. Лабав режим и даље захтева да постоји нека рута за извор, а unreachable заштита коју сте додали намерно уклања једну за неозначене претраге. Довршите и прегледајте интеграцију ознаке везе пре него што се поуздате у овај дизајн, и третирајте филтере домаћина као одвојено питање: ознака је сигнал рутирања, а не дозвола. Ако интеграција недостаје, симптом је сесија која се успостави и затим утихне чим одговори почну да пристижу.
Докажите то са две претраге рута
Упоредите шта језгро одлучује за два контекста и читајте поља dev и src уместо излазног статуса:
ip -4 route get 198.51.100.25
ip -4 route get 198.51.100.25 mark 0x2a
Прва претрага би требало да реши на tun1 са извором тунела, а друга на uplink. То су синтетичке претраге, па доказују политику, а не процес који ради: потврдите одвојено стварни транспортни пут клијента који ради, а затим упутите прави HTTPS захтев са укљученом провером сертификата.
Запишите шта дизајн не покрива пре него што га прогласите завршеним. DNS, IPv6 и животни циклус правила требају сваки своју одлуку, а ово је пример IPv4 рутирања, а не потпуна конфигурација приватности. Његова вредност је селектор: коверта добија изузетак uplink-а, а обична услуга на истој адреси не мора да га наследи.