Systemd эсвэл NetworkManager: ачаалах үед VPN-г хэн эхлүүлдэг вэ?
Гурван механизм нэг Ubuntu профайлыг өргөж чадна, тус бүр өөр триггертэй. Тэднийг харьцуулж, нэг эзэмшигчийг үлдээж, давхардлыг арилгаарай.
Нэг образоос гарсан хоёр Ubuntu машин, нэг VPN профайл, нэвтрэх үед эсрэг үр дүн: нэгэн дээр ажлын ширээ гарч ирэхээс өмнө туннель ажиллаж байгаа бол нөгөө дээр огт өргөгддөггүй. Энд профайл нь хувьсагч биш. Ялгаа нь гурван бүрэлдэхүүний алийг нь эхлүүлэх тушаал өгсөнд байгаа бөгөөд тэдгээр гурав нэг унтраалгыг хуваалцдаггүй.
Тэднийг зэрэгцүүлэн харьцуулах нь таамаглахаас хурдан. Тус бүр нь танигдах аргаар бүтэлгүйтдэг бөгөөд энэ нь харьцуулалтыг үнэ цэнэтэй болгодог.
Гурван өөр триггертэй гурван эхлүүлэгч
Багцлагдсан openvpn үйлчилгээ нь хамгийн хуучин зам. Түүний init скрипт /etc/default/openvpn файлаас автомат эхлүүлэх жагсаалтыг уншдаг. Хэрэв тэр жагсаалт тайлбарласан эсвэл хоосон үлдээсэн бол скрипт таны нэмсэн ганц тохиргоог биш, тэр хавтсанд байгаа бүх тохиргоог эхлүүлнэ. Нэг туннельд зориулж нэмсэн нэг файл чимээгүйгээр хэдийг ч өргөж болно.
| Starter | What triggers it | Typical failure |
|---|---|---|
| Init script and templated units | Boot, plus anything in the autostart list | Starts every config, not the one you meant |
| NetworkManager secondary | Activation of the base Wi-Fi or Ethernet profile | Nothing happens until that base link comes up |
| Hand-written unit or wrapper | Whatever its WantedBy and ExecStart say | Runs a different binary or environment than your shell |
Хүмүүсийн буруу тохируулдаг нь хоёр дахь мөр. NetworkManager импортолсон профайлыг хадгалж, эхлүүлнэ, гэхдээ зөвхөн өөр холболтын хоёрдогч болгон, өөрөөр хэлбэл триггер нь VPN-д биш, сүлжээний холбоосд хамаарна.
Тохиргооны зардал ба хамрах хүрээг харьцуул
init скриптийн зам нэг мөрөнд тооцогдож, машины бүх тохиргоог хамарна. Энэ нь чиглүүлэгчид тохиромжтой, өөр өөр сүлжээнд холбогддог зөөврийн компьютерт тохиромжгүй. NetworkManager-ийн зам UUID хайлт шаардаж, туннелийг нэг үндсэн холболтод уяна. Ажлын SSID дээр өргөгдөж, зочид буудлын сүлжээнд доошоо хэвээр үлдэнэ.
Гараар бичсэн unit нь хамгийн үнэтэй бөгөөд бусад үйлчилгээнүүдтэй харьцуулахад дараалал зэрэг хамгийн их хяналт өгдөг. Шийдвэрлэх хүчин зүйл нь хамрах хүрээ. Хэрэв машин нэг сүлжээ, нэг туннельтэй бол багцлагдсан үйлчилгээ шударга, урьдчилан таамаглах боломжтой. Хэрэв туннель тодорхой Wi-Fi сүлжээг дагах ёстой бол нэмэлт скриптгүйгээр тэр нөхцөлийг илэрхийлдэг нь гуравын дотроос хоёрдогч нь л юм.
Нэг эзэмшигчийг сонгоод бусдыг нь хас
Хоёр эзэмшигчийн эхлүүлдэг профайл ачаалал хооронд өөрчлөгддөг хугацаа үүсгэдэг, энэ нь аль нэг механизмаас ч дор. Эзэмшигчийг сонгоод, дараа нь өрсөлдөгч замыг санамсаргүй биш, зориуд унтраа.
# who is configured to start something?
grep -v '^#' /etc/default/openvpn
systemctl list-units 'openvpn*'
nmcli -g connection.secondaries connection show 'Work Wi-Fi'
# NetworkManager: attach the tunnel to the base link by UUID
TUNNEL=$(nmcli -g UUID connection show 'Corp Tunnel')
nmcli connection modify 'Work Wi-Fi' +connection.secondaries "$TUNNEL"
Хэрэв хасагдаж байгаа нь багцлагдсан зам бол зөв дарааллаар хий: AUTOSTART-г none болгож, үүссэн unit-ууд шинэ жагсаалтыг авахын тулд systemctl daemon-reload-г ажиллуул, дараа нь хэрэггүй болсон загварын хувилбарыг унтраа. Дахин ачаалахыг алгасвал хуучин unit-ууд идэвхтэй үлдэж, өөрчлөлт нөлөөгүй мэт харагдана.
Тасалдсан зогсолт нь хязгаарлагдмал хариулттай тусдаа асуудал. TimeoutStopSec нь systemd SIGKILL илгээхээс өмнө хэр удаан хүлээхийг хязгаарлана. Үүнийг тохируулах зөв газар нь drop-in файл, учир нь багцлагдсан unit-ийг засварлавал дараагийн шинэчлэлтэд өөрчлөлт алдагдана.
Бодитоор юу эхэлснийг шалга
Дахин ачаалж, тохиргооны файлд итгэхийн оронд нотолгоог унш. Туннелийг эзэмшдэг unit идэвхтэй төлөв болон ачаалалтай тохирох эхлэлийн цагийн тэмдгийг харуулж, VPN интерфейс таны нэвтрэхээс өмнө бий болно.
systemctl is-enabled openvpn-client@office
systemctl status openvpn-client@office --no-pager
nmcli -f GENERAL.STATE,connection.secondaries connection show 'Work Wi-Fi'
ip -brief link show tun0
Энд бас нэг шалгалт хамаарна: unit-ийн ExecStart таны бодож байгаа бинари руу чиглэж байгаа эсэхийг батал. Орон нутгийн хөрвүүлсэн клиент эсвэл snap багц нь ихэвчлэн тодорхой зам эсвэл snap run боолт шаарддаг, учир нь systemd таны бүрхүүлийн хайлтын дарааллыг өвлөдөггүй. command -v openvpn-г unit файлтай харьцуулбал үүнийг секундын дотор шийднэ.
Сонгосон эзэмшигчийг профайлын нэрийн дэргэд машины тэмдэглэлд бич. Алга болсон туннелийг дибаг хийх дараагийн хүн харьцуулалтыг давтахгүй, тэр мөрөөс эхэлнэ.