Өлтүрүлгөн openconnect: маршруттар жана DNS дагы эле туннелди көрсөтүп турат
Өлүк openconnect процесси орнотулган маршруттарды жана resolver жазууларын калтырышы мүмкүн. Өчүү жолун басып өтүңүз, build'иңиз документтеген сигналды жөнөтүңүз жана тазалаңыз.
Туннель өчүк, бирок машина дагы эле ал күйүп тургандай аракеттенет: сурам убакыт бүткөнгө чейин илинип турат, ал эми маршрут эми жок интерфейске көрсөтөт. Бул ажыратуу жардамчысын иштетпей өлгөн openconnect процессинин белгиси. Ал түзгөн тармак абалы дагы эле орнотулган, жана системадагы башка эч нерсе аны кантип алып салууну билбейт.
Машинаны абал түзүлгөн тартипте басып өтүңүз: процесс, байланыш, маршрут, resolver. Ар бир кадам кардар чын эле кеттиби же терминиңизден гана ажырадыбы, ошону айтат, жана бул айырма бир нерсени оңдоо керекпи же жокпу чечет.
Процесстен баштаңыз, конфигурациядан эмес
Маршрутка тийүүдөн мурун терминал ачып, эмне дагы эле иштеп жатканын сураңыз. pgrep -a openconnect ар бир экземплярды анын аргументтери менен тизмелейт, бул pid файлын жана ага берилген скриптти көрсөтөт. Күтүлбөгөн процесс фантом туннелди каалаган логдон тезирээк түшүндүрөт.
Эгер эч нерсе иштебесе, байланышка караңыз. ip link show tun0 интерфейс аман калганын айтат, жана ip route show dev tun0 дагы эле ага байланган маршруттарды тизмелейт. Анан resolver'ди муну менен текшериңиз resolvectl status. Аларды өзгөртүүдөн мурун үч чыгууну тең жазып коюңуз, анткени ошол жазуу кийин эскирген жазууну жаңыдан ажыратуунун жолу.
Жоголгон интерфейс адатта өз маршруттарын өзү менен алып кетет. Байланыштан кийин калган маршруттар адатта процесс дагы эле тирүү же түзмөктү экинчи кардар ээлейт дегенди билдирет.
Дал жардамчы скрипт өзгөртүүлөрдү артка кайтарат
openconnect интерфейсти, маршруттарды же resolver жазууларын өзү жок кылбайт. Ал сырткы жардамчыны чакырат, /etc/vpnc/vpnc-script upstream build'де жана /usr/share/vpnc-scripts/vpnc-script Debian жана Ubuntu пакеттеринде, тандоо мындай: -s. Туннелди тургузган скрипт аны бузган скрипт да ошол.
Эгер процесс ошол жардамчыны чакырбай чыгып кетсе, абал калат. OpenConnect колдонмосу скриптсиз маршруттоо жана ат кызматы туура иштебей турганын ачык айтат жана жардамчыны чыгууда интерфейс абалын бузган компонент катары сүрөттөйт. Ошондуктан кардарды иштеткенде жол маанилүү: -s.
Кайсы сигнал ошол жолго жетээри версиялардын ортосунда өзгөрдү. 7.06 колдонмосу SIGTERM'ди скриптти өткөрүп жиберген дароо чыгуу деп эсептейт. Азыркы build'лер INT жана TERM'ди таза токтоо катары документтейт, анда сессия чыгарылат жана жардамчы иштейт. Эки жүрүм-турумдун бирин болжолдоонун ордуна колуңуздагы бинардык файлдын SIGNALS бөлүмүн окуңуз.
man openconnect | sed -n '/^SIGNALS/,/^LIMITATIONS/p'
Build'иңиз документтеген сигналды жөнөтүңүз
Сигналды билгенден кийин процессти үлгү менен эмес, pid менен токтотуңуз.
pgrep -a openconnect
sudo kill -INT "$(cat /var/run/openconnect.pid)"
Анан чыгуу статусуна ишенүүнүн ордуна биринчи бөлүмдөгү үч текшерүүнү кайталаңыз. ip link show tun0 ишке ашпашы керек, ip route show dev tun0 эч нерсе басып чыгарбашы керек, жана resolvectl status эми VPN байланышын тизмелебеши керек.
SIGHUP токтотуу баскычы эмес: ал ажыратат, скриптти иштетет жана сессияны улантууга боло тургандай калтырат: --cookie. SIGUSR2 дароо кайра туташууга мажбурлайт. SIGKILL тазалоону толугу менен өткөрүп жиберет, жана бул дал ушул макала жөнүндөгү абал.
resolv.conf'ту алмаштырбай resolver'ди оңдоңуз
Ubuntu системаларынын көбүндө /etc/resolv.conf systemd-resolved'ге символдук шилтеме, түзөтүүгө тийиш файл эмес. Аны алмаштыруу бардык тармак үчүн ат чечүүнү бузат, VPN үчүн гана эмес. Анын ордуна туннелдин каттоосун алып салыңыз:
resolvectl revert tun0
resolvectl query example.com
Эгер система systemd-resolved'дин ордуна resolvconf колдонсо, интерфейс боюнча жазуу байланышты таштоо айтылганга чейин калат, жана resolvconf -d tun0 барабар аракет болуп саналат. Буйрукту тандоодон мурун кайсы resolver колдонулаарын текшериңиз.
Өлүк байланыштын артындагы серверге дагы эле багытталган сурам убакыт бүткөнгө чейин илинип турат, жана бул кечигүү калган маршруттан көрө бузулган DNS серверине окшош.
Кийинки ажыратууну зериктирерлик кылыңыз
pid файлынын жолун иштетүү жана өчүрүү учурунда бирдей кармаңыз, ар жолу --pid-file берүү аркылуу, же openconnect'ти unit астында иштетиңиз анын KillSignal версияңыз документтеген сигналга дал келет. Адегенде алдыңкы планда сыноо жардамчы басып чыгарган өчүрүү билдирүүлөрүн көрсөтөт.
Туташыңыз, ажыратыңыз жана үч текшерүүнү бир жолу аткарыңыз. Таза чыгуу VPN байланышын да, VPN маршрутун да, VPN resolver жазуусун да калтырбайт. Үчөөнүн бири аман калса, кайсы компонент тазалаган жок экенин эми билесиз. Кийинки иликтөө ошондо илинген сурамдан эмес, ошол жооптон башталат.