Административна страница одговара са телефона на мобилним подацима и истиче са преносног рачунара придруженог VPN-у. На тунелу ништа није покварено, јер захтев никада не улази у њега. Име домаћина се разрешава на јавну адресу пролаза, а та адреса је доступна само споља из тунела који он завршава. Поправка значи дати услузи приватан улаз, а не премештати спољну крајњу тачку.

Страница се учитава споља, а не кроз тунел

Пореде се два различита захтева. Са мобилних података прегледач директно стиже до јавне адресе. Из унутрашњости тунела исто име се разрешава на исту јавну адресу, а пакет сада мора да изађе кроз тунел да би стигао до адресе на сопственој далекој страни тунела. Исто име, иста адреса, две сасвим различите позиције.

Рута одредишта бира адресу, а не порт. Ништа у табели рутирања не зна да је порт 443 за администрацију, а порт 1194 транспорт, па се оба третирају као исто одредиште.

Зато страница понекад ради, а понекад не, зависно од тога које је име и коју мрежу клијент користио. Ово је проблем путање, а не проблем аутентификације. Оба клијента се аутентификују сасвим добро.

Држите спољну крајњу тачку доступном

Профили пуног тунела траже руту-изузетак за крајњу тачку VPN-а, а опција redirect-gateway у OpenVPN-у документује управо то: удаљена крајња тачка задржава руту кроз претходно постојећи пролаз, да тунел не би рутирао у себе. Уклоните тај изузетак и шифровани транспорт следи тунел, што завршава сесију у петљи. Управо због тог изузетка адреса крајње тачке остаје доступна из унутрашњости тунела.

Последица је да јавна адреса остаје доступна са клијента, због чега и захтев прегледача на ту адресу може да следи исти изузетак и изађе без уласка у тунел. Изузетак ради свој посао, а штету прави име.

Пре него што било шта промените, читајте одлуку руте, а не списак интерфејса. Команде испод штампају одлуку, а не инвентар. Покрените их са клијента који није успео.

ip -4 route get 203.0.113.77
ip -4 rule show
ip -4 route show table all

Ако претрага покаже руту крајње тачке кроз физички пролаз, понашање је исправно и административна страница се једноставно шаље погрешним путем. Тамо разрешавање имена постаје поправка.

Дајте услузи приватно име

Услузи треба име које се унутар тунела разрешава на адресу пролаза, уз задржавање семантике сертификата и имена домаћина коју апликација очекује. Приватни запис зоне за административно име је уобичајен одговор, и он оставља име транспорта нетакнутим.

Не преусмеравајте име транспорта на унутрашњу адресу, јер би следеће успостављање тунела онда покушало да стигне до адресе која постоји само унутар тунела. Та грешка даје VPN који ради тачно једном.

Проверите и обе фамилије адреса, јер заостали запис AAAA може да пошаље прегледач негде где приватни план никада није допро.

dig +short admin.hq.internal
dig +short -t AAAA admin.hq.internal
curl -sS -o /dev/null -w '%{http_code} %{remote_ip}\n' https://admin.hq.internal/

Ускладите политику са местом где процес ради

До нативног процеса који слуша на пролазу стиже се путем локалног улаза, па улазни ланац и везивање сокета одлучују да ли се захтев прихвата. Правила прослеђивања и IP прослеђивање не терају локалног слушаоца да одговори. Дозволите изворе тунела у улазној политици и потврдите да је процес везан за адресу до које тунел може да стигне.

Контејнер објављен на порту домаћина следи другачију путању, јер се пакет преводи по одредишту и прослеђује. Тај захтев среће политику прослеђивања домаћина и сопствена правила Docker-а, зато радни нативни слушалац може да постоји поред контејнера који одбија исти порт.

Редослед покретања је важан у оба случаја, јер везивање за адресу која се појави тек након што се тунел подигне тихо пада при подизању.

Проверите приватан приступ и одбијену јавну путању

Направите нови именовани захтев са овлашћеног клијента, са недирнутим сопственим проверама идентитета апликације. Затим пробајте исту услугу споља из тунела и потврдите да не одговара. Приватно име је погодност, а не ограничење, а слушалац који је још везан за јавну адресу још је изложен. Управо ту последњу проверу већина прегледа прескочи.

Читајте везивања и стање филтера, а не име домаћина које су корисници добили. Изложеност је својство сокета, а не имена. Та разлика преживљава сваку промену DNS-а.

ss -lntp | grep ':443'
nft list ruleset | grep -n 443
curl -sS -m 5 -o /dev/null -w '%{http_code}\n' https://203.0.113.77/

Када унутрашњи захтев врати страницу, а спољни захтев истекне, услуга има једну намерну приватну путању и транспорт остаје доступан. Када спољни захтев још одговара, слушалац или објављени запис контејнера треба сузити пре него што било ко опише услугу као само унутрашњу.

Повезани чланци