LXD контейнери /dev/net/tun файлын ача албай жатабы? unix-char жазуусун текшериңиз
VPN кардары аны колдоно алышы үчүн LXD хосттун TUN түзмөгүн контейнерге өткөрүшү керек. unix-char эмнени кошот, эмнени кошпойт жана аны кантип текшерүү керектигин караңыз.
LXD хосттун белгилүү түзмөгүн контейнерге түзмөк түйүнүн кошуу аркылуу сунуштайт, конокко аны түзүүнү үйрөтүү аркылуу эмес. Эгер контейнерде /dev/net/tun жок болсо, түзмөк хостто болушу мүмкүн жана конок аны баары бир ача албашы мүмкүн. unix-char жазуусу ошол жолдун башкаруучу тарабындагы жарымы жана ал артыкчылыктуу контейнерден атайын кууш. Ошондуктан хост түйүнү жана контейнер түйүнү өзүнчө текшерүүгө татыктуу.
Механизм көз алдында кармоого жетиштүү кыска: LXD хосттун жолун чечет, инстанстын ичинде тиешелүү түйүн түзөт жана түзмөктү контейнердин түзмөк cgroup'уна кошот. Андан кийин конок процессине түйүндү бир нерсеге колдонуу үчүн өз уруксаты жана жөндөмү керек.
unix-char жазуусу чын эле эмнени өзгөртөт
unix-char түзмөгү LXD'ге хосттун бир белгилүү түзмөгүн контейнердин ичиндеги тандалган жолдо сунуштоону айтат. Жазуунун үч маанилүү бөлүгү бар: башкаруучу колдонгон түзмөк белгиси, хосттогу source жолу жана конок көргөн path. Акыркы экөө гана түзмөктүн өзүн сүрөттөйт. Алардын биринде теруу катасы кардар эч качан ачпаган жерде түйүн жаратат.
Хостто түзмөк адатта /dev/net/tun болот. Контейнердин ичинде ошол эле жолду кармасаңыз же башкасын тандасаңыз болот, бирок жол VPN кардары күткөнгө туура келиши керек. /dev/net/tun жолун кармоо экинчи конфигурация маселесин болтурбайт, анткени кардарлардын көбү ал жолду сурабастан ачат.
Башкаруучу жазууну инстанс башталганда же түзмөк ысык туташтырылганда колдонот. Ал конокко драйвер көчүрбөйт жана туннель интерфейсин түзбөйт. Түйүндү көрүнүктүү кылат жана контейнердин түзмөк көзөмөл тобу аркылуу кирүүгө уруксат берет.
Түзмөктү коноктун ичинде эмес, инстанста жарыялаңыз
Жазууну LXD административдик контекстен кошуңуз, инстанстын атын жана кийин тааный турган белгини көрсөтүңүз. vpnbox аттуу контейнер үчүн буйрук мындай:
lxc config device add vpnbox tun unix-char source=/dev/net/tun path=/dev/net/tun
lxc config device show vpnbox
tun белгиси инстанстын конфигурациясына гана тиешелүү. Ал интерфейстин аты эмес жана коноктогу эч нерсеге туура келиши милдеттүү эмес. Эгер профиль ошол эле түзмөктү мурунтан берип жатса, экинчи жазуу ашыкчалык эмес, карама-каршылык жаратат, ошондуктан адегенде иштеп жаткан конфигурацияны карап чыгыңыз.
Контейнердин ичиндеги файлдарды оңдоо туура эмес катмар. Баштоо скриптиндеги mknod артыкчылыктуу контейнерде иштеп жаткандай көрүнүп, кийин кайра түзүүдө жоголушу же азыраак артыкчылыктуу контейнерде ишке ашпай калышы мүмкүн. Инстанстын түзмөк жыйындысы башкаруучуга таандык; түйүн да ага таандык болсун.
Менчик жана режимди конок процессине ылайыктаңыз
unix-char жазуусу контейнердин ичиндеги түйүн үчүн uid, gid жана mode орното алат. Аларды бардык колдонуучуга түзмөктү ачуунун же контейнерди артыкчылыктуу режимге которуунун ордуна, VPN кардарын иштеткен эсепке ылайыкташ үчүн колдонуңуз.
Көрүнүү уруксат менен бирдей эмес. root'ко таандык жана режими 600 болгон түйүн артыкчылыксыз колдонуучу катары иштеген кызматка көрүнөт жана ошого карабастан ал аны ача албайт. Адегенде коноктун эсебин текшериңиз, андан кийин менчикти ошол эсепке бериңиз жана режимди кардарга керектүүдөн кенен кармабаңыз.
Процесске туннель интерфейсин конфигурациялоо жөндөмү да керек, адатта контейнердин тармактык ат мейкиндигиндеги CAP_NET_ADMIN. Түзмөктү өткөрүп берүү бул жөндөмдү бербейт, жөндөмдү берүү түзмөктү камсыз кылбайт; булар көз карандысыз талаптар.
Жазуу эмнени бербей турганын билиңиз
Көрүнүп турган түйүн иштеп жаткан VPN эмес. Кардардын пакетин дагы орнотуу керек, профиль дагы жарактуу болушу керек жана кызмат дагы башталышы керек. Аутентификация, маршруттар жана DNS кардардын иши бойдон калат, ал жердеги ийгиликсиздик түзмөк жазуусу туура эмес экенине далил эмес.
systemd дагы бир чектөө кошо алат. DeviceAllow бар же катууланган түзмөк саясаты бар бирдик контейнер башкаруучусу берген түйүнгө кирүүдөн баш тартышы мүмкүн. Түйүн бар болсо да кызмат уруксат катасын билдиргенде бирдиктин түзмөк саясатын текшериңиз жана контейнерди кеңейтүүнүн ордуна ошол саясатты өзгөртүңүз.
Ысык туташтыруу милдеттүү эмес жана ачык. required=false бар жазууга булак жолу керек жана хосттун түзмөгү өзгөргөндө пайда болушу же жоголушу мүмкүн. Мындай жашоо циклин келип-кетүүчү аппаратка ылайыктуу; VPN'ге жүктөө учурунда керектүү TUN түзмөгү үчүн милдеттүү эмес жазуу кызматты анын шарты пайда боло электе эле баштоого жол бериши мүмкүн.
Көрүнүүнү, ачылууну жана интерфейсти ушул тартипте текшериңиз
Адегенде көздөлгөн контейнердин ичиндеги түйүндү ырастаңыз. Жол, негизги жана кошумча номур жана менчик хосттун түзмөгүнө жана сиз кошкон жазууга туура келиши керек. Түйүн жок болсо, башкаруучу жазууну колдонгон эмес же аны башка инстанска колдонгон.
lxc exec vpnbox -- ls -l /dev/net/tun
lxc exec vpnbox -- sh -c 'test -c /dev/net/tun && echo char-device-ok'
Андан кийин кызмат эсеби аны ача аларын ырастаңыз. Ошол эсеп менен кыска сыноо менчик маселесин кызмат маселесинен ажыратат. Акырында кардарды иштетип, туннель интерфейси пайда болгонун ырастаңыз; биринчи экөө өтүп кетиши мүмкүн, ал эми кардардын профили же жөндөмү дагы туура эмес болушу мүмкүн болгондуктан, бүт жолду далилдеген үчүнчү кадам гана.
Өзгөртүү бекитилгенде инстансты, түзмөк белгисин, хост булагын, коноктун жолун жана ээлик эсебин жазып алыңыз. Ушул беш маани кийинки кайра түзүү, көчүрүү же профиль өзгөртүү сакташы керек болгон нерсе жана аларды контекстсиз уруксат катасына салыштырганда алда канча оңой.