Зашто је привилеговани режим шири него што је VPN-у потребан
Привилеговани контејнер даје уређаје и могућности које немају везе са тунелом. Пронађите једини предуслов иза грешке пре него што га употребите као прекидач.
Контејнер није хтео да отвори свој тунел, зато је додата привилегована заставица, и сада ради. Тај редослед је утврдио само да је недостајала бар једна дозвола, и не каже ништа о томе која. Привилеговани режим даје скуп могућности и приступ уређајима много шири од онога што је потребно једном тунелском интерфејсу.
Шта заставица заправо мења
Привилеговани контејнер добија широке могућности и приступ уређајима домаћина, што је много веће одобрење него што захтева мрежна путања. Тачан скуп документује извршно окружење, а не одређује предање, и Docker документација о покретању контејнера описује доступне опције привилегија. Једно читање је довољно да се види да је тунел мали део целине.
Два ужа захтева покривају већину VPN контејнера. Конфигурисање интерфејса захтева могућност мрежне администрације, а отварање тунелског уређаја захтева приступ баш том чвору уређаја. То су одвојена одобрења, и чак и оба заједно су ужа од опште опције. Остатак привилегованог скупа нема никакве везе са тунелом. Он постоји за радна оптерећења којима је заиста потребан приступ на нивоу домаћина, а VPN контејнер обично није једно од њих.
Повежите сваку грешку са једним предусловом
Порука о грешци вам каже који предуслов недостаје ако је прочитате пре него што је потиснете. Порука о чвору уређаја именује уређај, порука о недозвољеној операцији именује могућност, а порука о модулу или sysctl именује подршку језгра. Свака од њих има другачију поправку, и само једна од њих је могућност.
Конфигурациона датотека која недостаје остаје непостојећа и након што се дају све могућности, због чега привилеговани режим понекад не мења апсолутно ништа. Контејнер се покреће, тунел и даље не успева, а права грешка никада није била о дозволама. Подршка језгра је трећи случај и најлакше се чита погрешно. Модул који није учитан на домаћину не може се учитати из унутрашњости непривилегованог контејнера, а давање више могућности унутар контејнера не мења стање домаћина.
Проверите предуслов, не симптом
Почните од минималног позива који слика документује, покрените га и сачувајте тачан текст неуспеха. Затим додајте једну дозволу одједном и забележите који додатак је променио резултат.
ls -l /dev/net/tun
docker run --rm --cap-add NET_ADMIN --device /dev/net/tun image:tag
ip -br link show type tunКонтејнер који види уређај и има могућност али ипак не успева говори вам да је проблем негде другде. То је користан резултат, а привилеговани режим би га сакрио.
Проверите и дозволе уређаја на домаћину, јер правилно додељен чвор уређаја са погрешним власништвом групе даје исту грешку као дозвола која недостаје.
Запишите најужу дозволу која ради
Запишите сваки уређај и сваку могућност који су потребни распоређивању, заједно са грешком која их је оправдала. Управо тај запис омогућава следећој особи да безбедно уклони нешто, и управо то ће затражити ревизор када контејнер буде пријављен као привилегован.
Прегледајте и околни контекст, јер мрежа домаћина, монтирања домаћина и опције извршног окружења могу свако да прошире утицај дозволе. Изоловани лабораторијски позив који их све комбинује није производна конфигурација, колико год добро радио. Тестирајте апликацију, њено понашање у DNS-у и неуспех тунела пре него што распоређивање прогласите завршеним. Дозвола да направите интерфејс није излазна политика, а контејнер који савршено тунелира и даље усмерава све што апликација пошаље.