Openconnect va vpn-slice yordamida Linux-da korporativ VPN-ga qanday ulanish mumkin

Ishda Linuxdan foydalanmoqchimisiz, lekin korporativ VPN sizga ruxsat bermaydi? Keyin bu maqola yordam berishi mumkin, garchi bu aniq emas. Men sizni oldindan ogohlantirmoqchimanki, men tarmoqni boshqarish masalalarini yaxshi tushunmayapman, shuning uchun men hamma narsani noto'g'ri qilgan bo'lishim mumkin. Boshqa tomondan, oddiy odamlarga tushunarli bo'ladigan tarzda qo'llanma yozishim mumkin, shuning uchun sinab ko'rishingizni maslahat beraman.

Maqolada juda ko'p keraksiz ma'lumotlar mavjud, ammo bu ma'lumotsiz men VPN-ni o'rnatishda kutilmaganda paydo bo'lgan muammolarni hal qila olmasdim. O'ylaymanki, ushbu qo'llanmadan foydalanishga harakat qilgan har bir kishi menda bo'lmagan muammolarga duch keladi va bu qo'shimcha ma'lumotlar ushbu muammolarni o'z-o'zidan hal qilishga yordam beradi deb umid qilaman.

Ushbu qo'llanmada ishlatiladigan buyruqlarning aksariyati sudo orqali bajarilishi kerak, bu qisqalik uchun olib tashlangan. Yodingizda tuting.

Aksariyat IP-manzillar jiddiy tarzda xiralashgan, shuning uchun agar siz 435.435.435.435 kabi manzilni ko'rsangiz, u yerda sizning holatingizga xos bo'lgan oddiy IP bo'lishi kerak.

Menda Ubuntu 18.04 bor, lekin menimcha, kichik o'zgarishlar bilan qo'llanma boshqa tarqatishlarga ham qo'llanilishi mumkin. Biroq, ushbu matnda Linux == Ubuntu.

Cisco Connect

Windows yoki MacOS operatsion tizimida bo'lganlar korporativ VPN-ga Cisco Connect orqali ulanishi mumkin, u shlyuz manzilini ko'rsatishi va har safar ulanganingizda Google Authenticator tomonidan ishlab chiqarilgan sobit qism va koddan iborat parolni kiritishi kerak.

Linux holatida men Cisco Connect-ni ishga tushira olmadim, lekin men Google-da Cisco Connect-ni almashtirish uchun maxsus tayyorlangan openconnect-dan foydalanish bo'yicha tavsiyani olishga muvaffaq bo'ldim.

Ochiq ulanish

Nazariy jihatdan, Ubuntu'da openconnect uchun maxsus grafik interfeys mavjud, ammo bu men uchun ishlamadi. Balki bu yaxshilik uchundir.

Ubuntu'da openconnect paket menejeridan o'rnatiladi.

apt install openconnect

O'rnatishdan so'ng darhol VPN-ga ulanishga urinib ko'rishingiz mumkin

openconnect --user poxvuibr vpn.evilcorp.com

vpn.evilcorp.com - bu xayoliy VPN manzili
poxvuibr - xayoliy foydalanuvchi nomi

openconnect sizdan parolni kiritishingizni so'raydi, u sizga eslatib o'taman, sobit qism va Google Authenticator kodidan iborat bo'lib, keyin u vpn-ga ulanishga harakat qiladi. Agar u ishlayotgan bo'lsa, tabriklaymiz, siz o'rtani xavfsiz o'tkazib yuborishingiz mumkin, bu juda ko'p og'riqli va fonda ishlaydigan openconnect haqida nuqtaga o'ting. Agar u ishlamasa, davom etishingiz mumkin. Garchi u, masalan, ish joyidagi mehmon Wi-Fi-ga ulanishda ishlagan bo'lsa ham, xursand bo'lishga hali erta bo'lishi mumkin, siz protsedurani uydan takrorlashga harakat qilishingiz kerak.

Sertifikat

Hech narsa boshlanmasligi ehtimoli yuqori va openconnect chiqishi quyidagicha ko'rinadi:

POST https://vpn.evilcorp.com/
Connected to 777.777.777.777:443
SSL negotiation with vpn.evilcorp.com
Server certificate verify failed: signer not found

Certificate from VPN server "vpn.evilcorp.com" failed verification.
Reason: signer not found
To trust this server in future, perhaps add this to your command line:
    --servercert sha256:4444444444444444444444444444444444444444444444444444444444444444
Enter 'yes' to accept, 'no' to abort; anything else to view: fgets (stdin): Operation now in progress

Bir tomondan, bu yoqimsiz, chunki VPN-ga ulanish yo'q edi, lekin boshqa tomondan, bu muammoni qanday hal qilish kerakligi, printsipial jihatdan aniq.

Bu erda server bizga sertifikat yubordi, uning yordamida biz ulanish yovuz firibgarga emas, balki bizning mahalliy korporatsiya serveriga o'tkazilayotganligini aniqlashimiz mumkin va bu sertifikat tizimga noma'lum. Va shuning uchun u server haqiqiy yoki yo'qligini tekshira olmaydi. Va shuning uchun, har qanday holatda, u ishlashni to'xtatadi.

Openconnect serverga ulanishi uchun unga β€”servercert kaliti yordamida VPN serveridan qaysi sertifikat kelishi kerakligini aniq aytishingiz kerak.

Va server bizga to'g'ridan-to'g'ri qaysi sertifikat yuborganligini qaysi openconnect chop etilganidan bilib olishingiz mumkin. Mana bu parchadan:

To trust this server in future, perhaps add this to your command line:
    --servercert sha256:4444444444444444444444444444444444444444444444444444444444444444
Enter 'yes' to accept, 'no' to abort; anything else to view: fgets (stdin): Operation now in progress

Ushbu buyruq bilan siz qayta ulanishga urinib ko'rishingiz mumkin

openconnect --servercert sha256:4444444444444444444444444444444444444444444444444444444444444444 --user poxvuibr vpn.evilcorp.com

Ehtimol, hozir u ishlayapti, keyin siz oxirigacha o'tishingiz mumkin. Lekin shaxsan, Ubunta menga bu shakldagi anjirni ko'rsatdi

POST https://vpn.evilcorp.com/
Connected to 777.777.777.777:443
SSL negotiation with vpn.evilcorp.com
Server certificate verify failed: signer not found
Connected to HTTPS on vpn.evilcorp.com
XML POST enabled
Please enter your username and password.
POST https://vpn.evilcorp.com/
Got CONNECT response: HTTP/1.1 200 OK
CSTP connected. DPD 300, Keepalive 30
Set up DTLS failed; using SSL instead
Connected as 192.168.333.222, using SSL
NOSSSSSHHHHHHHDDDDD
3
NOSSSSSHHHHHHHDDDDD
3
RTNETLINK answers: File exists
/etc/resolvconf/update.d/libc: Warning: /etc/resolv.conf is not a symbolic link to /run/resolvconf/resolv.conf

/etc/resolv.conf

# Generated by NetworkManager
search gst.evilcorpguest.com
nameserver 127.0.0.53

/run/resolvconf/resolv.conf

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual nameservers.

nameserver 192.168.430.534
nameserver 127.0.0.53
search evilcorp.com gst.publicevilcorp.com

habr.com hal qiladi, lekin siz u erga bora olmaysiz. Jira.evilcorp.com kabi manzillar umuman hal etilmaydi.

Bu erda nima sodir bo'lganligi menga aniq emas. Ammo tajriba shuni ko'rsatadiki, agar siz /etc/resolv.conf ga chiziq qo'shsangiz

nameserver 192.168.430.534

keyin VPN ichidagi manzillar sehrli tarzda hal qila boshlaydi va siz ular orqali yurishingiz mumkin, ya'ni manzillarni hal qilish uchun DNS qidirayotgan narsa boshqa joyda emas, balki /etc/resolv.conf da ko'rinadi.

Siz VPN ga ulanish mavjudligini va u /etc/resolv.conf ga hech qanday o'zgartirish kiritmasdan ishlashini tekshirishingiz mumkin; buning uchun brauzerga VPN dan manbaning ramziy nomini emas, balki uning IP manzilini kiritish kifoya.

Natijada ikkita muammo yuzaga keladi

  • VPN ga ulanayotganda uning DNS-lari olinmaydi
  • barcha trafik VPN orqali o'tadi, bu Internetga kirishga ruxsat bermaydi

Men sizga hozir nima qilish kerakligini aytaman, lekin birinchi navbatda bir oz avtomatlashtirish.

Parolning belgilangan qismini avtomatik kiritish

Hozirgacha siz parolingizni kamida besh marta kiritgansiz va bu protsedura allaqachon sizni charchatib qo'ygan. Birinchidan, parol uzoq bo'lgani uchun, ikkinchidan, chunki kirishda siz belgilangan vaqt oralig'iga mos kelishingiz kerak

Muammoning yakuniy yechimi maqolaga kiritilmagan, ammo parolning belgilangan qismini ko'p marta kiritish shart emasligiga ishonch hosil qilishingiz mumkin.

Faraz qilaylik, parolning o'zgarmas qismi fixedPassword, Google Authenticator qismi esa 567 987. Parolni to'liq --passwd-on-stdin argumenti yordamida standart kiritish orqali openconnectga o'tkazish mumkin.

echo "fixedPassword567987" | openconnect --servercert sha256:4444444444444444444444444444444444444444444444444444444444444444 --user poxvuibr vpn.evilcorp.com --passwd-on-stdin

Endi siz doimiy ravishda oxirgi kiritilgan buyruqqa qaytishingiz va u yerda Google Authenticator-ning faqat bir qismini o'zgartirishingiz mumkin.

Korporativ VPN Internetda kezishingizga ruxsat bermaydi.

Umuman olganda, Habrga borish uchun alohida kompyuterdan foydalanish kerak bo'lganda, bu juda noqulay emas. Stackoverfow-dan nusxa ko'chirish va joylashtirishning mumkin emasligi odatda ishni falaj qilishi mumkin, shuning uchun biror narsa qilish kerak.

Biz uni qandaydir tarzda tashkil qilishimiz kerakki, ichki tarmoqdan resursga kirish kerak bo'lganda, Linux VPN-ga o'tadi va Habr-ga o'tish kerak bo'lganda u Internetga o'tadi.

openconnect, vpn bilan ulanishni ishga tushirgandan va o'rnatgandan so'ng, /usr/share/vpnc-scripts/vpnc-script-da joylashgan maxsus skriptni bajaradi. Ba'zi o'zgaruvchilar skriptga kirish sifatida uzatiladi va u VPN ni sozlaydi. Afsuski, men mahalliy skript yordamida korporativ VPN va Internetning qolgan qismi o'rtasida trafik oqimlarini qanday ajratishni tushunolmadim.

Ko'rinishidan, vpn-slice yordam dasturi, ayniqsa, men kabi odamlar uchun ishlab chiqilgan bo'lib, bu sizga daf bilan raqsga tushmasdan trafikni ikki kanal orqali yuborish imkonini beradi. Xo'sh, ya'ni siz raqsga tushishingiz kerak bo'ladi, lekin siz shaman bo'lishingiz shart emas.

vpn-slice yordamida trafikni ajratish

Birinchidan, siz vpn-slice o'rnatishingiz kerak, buni o'zingiz aniqlab olishingiz kerak bo'ladi. Agar sharhlarda savollar bo'lsa, men bu haqda alohida post yozaman. Ammo bu oddiy Python dasturi, shuning uchun hech qanday qiyinchiliklar bo'lmasligi kerak. virtualenv yordamida o'rnatdim.

Va keyin standart skript o'rniga vpn-slice-dan foydalanish kerakligini ko'rsatuvchi -script kaliti yordamida yordamchi dastur qo'llanilishi kerak.

echo "fixedPassword567987" | openconnect --servercert sha256:4444444444444444444444444444444444444444444444444444444444444444 --user poxvuibr --passwd-on-stdin 
--script "./bin/vpn-slice 192.168.430.0/24  " vpn.evilcorp.com 

--skript skript o'rniga chaqirilishi kerak bo'lgan buyruq bilan string uzatiladi. ./bin/vpn-slice - vpn-slice bajariladigan faylga yo'l 192.168.430.0/24 - vpn-ga o'tish uchun manzillar niqobi. Bu erda biz shuni nazarda tutamizki, agar manzil 192.168.430 bilan boshlangan bo'lsa, u holda ushbu manzilga ega resurs VPN ichidan izlanishi kerak.

Endi vaziyat deyarli normal bo'lishi kerak. Deyarli. Endi siz Habr-ga borishingiz mumkin va korporativ ichidagi resursga ip orqali kirishingiz mumkin, lekin ramziy nom bilan korporativ ichidagi resursga kira olmaysiz. Xostlarda ramziy nom va manzil o'rtasida moslikni belgilasangiz, hamma narsa ishlashi kerak. Va ip o'zgarmaguncha ishlang. Linux endi IP-ga qarab Internet yoki intranetga kirishi mumkin. Ammo manzilni aniqlash uchun korporativ bo'lmagan DNS hali ham qo'llaniladi.

Muammo bu shaklda ham o'zini namoyon qilishi mumkin - ishda hamma narsa yaxshi, lekin uyda faqat IP orqali ichki korporativ resurslarga kirishingiz mumkin. Buning sababi, korporativ Wi-Fi tarmog'iga ulanganingizda korporativ DNS-dan ham foydalaniladi va VPN-dan foydalanmasdan bunday manzilga haligacha borishning iloji yo'qligiga qaramay, unda VPN-dan ramziy manzillar hal qilinadi.

Xostlar faylini avtomatik ravishda o'zgartirish

Agar vpn-slice xushmuomalalik bilan so'ralsa, u holda VPN-ni ko'targandan so'ng, u o'zining DNS-ga o'tishi, u erda ramziy nomlar bo'yicha kerakli resurslarning IP-manzillarini topib, ularni xostlarga kiritishi mumkin. VPN o'chirilgandan so'ng, bu manzillar xostlardan o'chiriladi. Buning uchun ramziy nomlarni argument sifatida vpn-slice-ga o'tkazishingiz kerak. Mana bunday.

echo "fixedPassword567987" | openconnect --servercert sha256:4444444444444444444444444444444444444444444444444444444444444444 --user poxvuibr --passwd-on-stdin
--script "./bin/vpn-slice 192.168.430.0/24  jira.vpn.evilcorp.com git.vpn.evilcorp.com " vpn.evilcorp.com 

Endi hamma narsa ofisda ham, plyajda ham ishlashi kerak.

VPN tomonidan berilgan DNS-dagi barcha subdomenlarning manzillarini qidiring

Agar tarmoq ichida bir nechta manzillar bo'lsa, xostlar faylini avtomatik ravishda o'zgartirish yondashuvi juda yaxshi ishlaydi. Ammo agar tarmoqda juda ko'p resurslar mavjud bo'lsa, unda siz doimiy ravishda zoidberg.test.evilcorp.com kabi qatorlarni qo'shishingiz kerak bo'ladi skript zoidberg test skameykalaridan birining nomi.

Ammo endi biz bu ehtiyojni nima uchun yo'q qilish mumkinligini bir oz tushunamiz.

Agar VPN-ni ko'targaningizdan so'ng, /etc/hosts-ga qarasangiz, ushbu qatorni ko'rishingiz mumkin

192.168.430.534 dns0.tun0 # vpn-slice-tun0 AVTOYaRADI

Va resolv.conf ga yangi qator qo'shildi. Qisqasi, vpn-slice qandaydir tarzda vpn uchun DNS serveri qayerda joylashganligini aniqladi.

Endi biz evilcorp.com bilan tugaydigan domen nomining IP-manzilini bilish uchun Linux korporativ DNS-ga, agar boshqa narsa kerak bo'lsa, standartga o'tishiga ishonch hosil qilishimiz kerak.

Men Google'da ancha vaqt qidirdim va bunday funksiya Ubuntu-da qutidan tashqarida mavjudligini aniqladim. Bu nomlarni hal qilish uchun dnsmasq mahalliy DNS serveridan foydalanish imkoniyatini bildiradi.

Ya'ni, Linux har doim IP manzillar uchun mahalliy DNS serveriga o'tishiga ishonch hosil qilishingiz mumkin, bu esa o'z navbatida domen nomiga qarab, tegishli tashqi DNS serverida IP-ni qidiradi.

Tarmoqlar va tarmoq ulanishlari bilan bog'liq hamma narsani boshqarish uchun Ubuntu NetworkManager-dan foydalanadi va masalan, Wi-Fi ulanishlarini tanlash uchun grafik interfeys uning old qismidir.

Biz uning konfiguratsiyasida ko'tarilishimiz kerak.

  1. /etc/NetworkManager/dnsmasq.d/evilcorp da fayl yarating

manzil=/.evilcorp.com/192.168.430.534

Evilcorp oldidagi nuqtaga e'tibor bering. Bu dnsmasqga evilcorp.com ning barcha subdomenlarini korporativ DNS da qidirish kerakligini bildiradi.

  1. NetworkManager-ga nomni aniqlash uchun dnsmasq-dan foydalanishni ayting

Tarmoq boshqaruvchisi konfiguratsiyasi /etc/NetworkManager/NetworkManager.conf da joylashgan. Siz u yerga qo'shishingiz kerak:

[asosiy] dns=dnsmasq

  1. NetworkManager-ni qayta ishga tushiring

service network-manager restart

Endi VPN-ga openconnect va vpn-slice orqali ulanganingizdan so'ng, vpnslice-ga argumentlarga ramziy manzillarni qo'shmasangiz ham, IP odatiy tarzda aniqlanadi.

VPN orqali individual xizmatlarga qanday kirish mumkin

VPN-ga ulanishga muvaffaq bo'lganimdan so'ng, men ikki kun davomida juda xursand bo'ldim, keyin ma'lum bo'ldiki, VPN-ga ofis tarmog'idan tashqaridan ulansam, pochta ishlamaydi. Alomat tanish, shunday emasmi?

Bizning pochtamiz mail.publicevilcorp.com da joylashgan, ya'ni u dnsmasq qoidasiga kirmaydi va pochta serveri manzili umumiy DNS orqali qidiriladi.

Xo'sh, ofis hali ham ushbu manzilni o'z ichiga olgan DNS-dan foydalanadi. Men shunday deb o'yladim. Aslida, chiziqni dnsmasq ga qo'shgandan so'ng

address=/mail.publicevilcorp.com/192.168.430.534

vaziyat umuman o'zgarmadi. ip o'zgarishsiz qoldi. Men ishga borishim kerak edi.

Va faqat keyinroq, vaziyatga chuqurroq kirib, muammoni biroz tushunganimda, bir aqlli odam menga uni qanday hal qilishni aytdi. Pochta serveriga shunchaki emas, balki VPN orqali ulanish kerak edi

Men VPN orqali 192.168.430 bilan boshlanadigan manzillarga o'tish uchun vpn-slice-dan foydalanaman. Pochta serveri nafaqat evilcorp subdomeni bo'lmagan ramziy manzilga ega, balki 192.168.430 bilan boshlanadigan IP manziliga ham ega emas. Va, albatta, u umumiy tarmoqdan hech kimning unga kelishiga ruxsat bermaydi.

Linux VPN orqali va pochta serveriga o'tishi uchun uni vpn-slice-ga ham qo'shishingiz kerak. Aytaylik, pochta manzili 555.555.555.555.

echo "fixedPassword567987" | openconnect --servercert sha256:4444444444444444444444444444444444444444444444444444444444444444 --user poxvuibr --passwd-on-stdin
--script "./bin/vpn-slice 555.555.555.555 192.168.430.0/24" vpn.evilcorp.com 

Bitta argument bilan VPNni ko'tarish uchun skript

Bularning barchasi, albatta, juda qulay emas. Ha, siz matnni faylga saqlashingiz va uni qo'lda yozish o'rniga konsolga nusxa ko'chirishingiz mumkin, lekin bu hali ham juda yoqimli emas. Jarayonni osonlashtirish uchun siz buyruqni PATHda joylashgan skriptga o'rashingiz mumkin. Va keyin siz faqat Google Authenticator-dan olingan kodni kiritishingiz kerak bo'ladi

#!/bin/sh  
echo "fixedPassword$1" | openconnect --servercert sha256:4444444444444444444444444444444444444444444444444444444444444444 --user poxvuibr --passwd-on-stdin 
--script "./bin/vpn-slice 192.168.430.0/24  jira.vpn.evilcorp.com git.vpn.evilcorp.com " vpn.evilcorp.com 

Agar siz skriptni connect~evilcorp~-ga qo'ysangiz, shunchaki konsolda yozishingiz mumkin

connect_evil_corp 567987

Lekin endi siz hali ham negadir openconnect ishlayotgan konsolni ochiq saqlashingiz kerak

Orqa fonda openconnect ishga tushirilmoqda

Yaxshiyamki, openconnect mualliflari bizga g'amxo'rlik qilishdi va dasturga maxsus kalitni qo'shdilar - fon, bu dastur ishga tushirilgandan keyin fonda ishlaydi. Agar siz uni shunday ishga tushirsangiz, ishga tushirilgandan so'ng konsolni yopishingiz mumkin

#!/bin/sh  
echo "fixedPassword$1" | openconnect --servercert sha256:4444444444444444444444444444444444444444444444444444444444444444 
--user poxvuibr 
--passwd-on-stdin 
--background 
--script "./bin/vpn-slice 192.168.430.0/24  jira.vpn.evilcorp.com git.vpn.evilcorp.com " vpn.evilcorp.com  

Endi jurnallar qaerga ketishi aniq emas. Umuman olganda, bizga jurnallar kerak emas, lekin siz hech qachon bilmaysiz. openconnect ularni syslogga yo'naltirishi mumkin, u erda ular xavfsiz va xavfsiz saqlanadi. buyruqqa –syslog kalitini qo'shishingiz kerak

#!/bin/sh  
echo "fixedPassword$1" | openconnect --servercert sha256:4444444444444444444444444444444444444444444444444444444444444444 
--user poxvuibr 
--passwd-on-stdin 
--background 
--syslog 
--script "./bin/vpn-slice 192.168.430.0/24  jira.vpn.evilcorp.com git.vpn.evilcorp.com " vpn.evilcorp.com  

Shunday qilib, ma'lum bo'lishicha, openconnect biron bir joyda fonda ishlaydi va hech kimni bezovta qilmaydi, lekin uni qanday to'xtatish kerakligi aniq emas. Ya'ni, siz, albatta, grep yordamida ps chiqishini filtrlashingiz va nomi openconnect bo'lgan jarayonni qidirishingiz mumkin, ammo bu qandaydir zerikarli. Bu haqda o'ylagan mualliflarga ham rahmat. Openconnect-da -pid-fayl kaliti mavjud bo'lib, uning yordamida siz openconnect-ga jarayon identifikatorini faylga yozishni buyurishingiz mumkin.

#!/bin/sh  
echo "fixedPassword$1" | openconnect --servercert sha256:4444444444444444444444444444444444444444444444444444444444444444 
--user poxvuibr 
--passwd-on-stdin 
--background  
--syslog 
--script "./bin/vpn-slice 192.168.430.0/24  jira.vpn.evilcorp.com git.vpn.evilcorp.com " vpn.evilcorp.com  
--pid-file ~/vpn-pid

Endi siz har doim buyruq bilan jarayonni o'ldirishingiz mumkin

kill $(cat ~/vpn-pid)

Agar jarayon bo'lmasa, kill la'natlaydi, lekin xato qilmaydi. Agar fayl mavjud bo'lmasa, unda hech qanday yomon narsa bo'lmaydi, shuning uchun siz skriptning birinchi qatorida jarayonni xavfsiz o'ldirishingiz mumkin.

kill $(cat ~/vpn-pid)
#!/bin/sh  
echo "fixedPassword$1" | openconnect --servercert sha256:4444444444444444444444444444444444444444444444444444444444444444 
--user poxvuibr 
--passwd-on-stdin 
--background 
--syslog 
--script "./bin/vpn-slice 192.168.430.0/24  jira.vpn.evilcorp.com git.vpn.evilcorp.com " vpn.evilcorp.com  
--pid-file ~/vpn-pid

Endi siz kompyuteringizni yoqishingiz, konsolni ochishingiz va buyruqni ishga tushirishingiz, unga Google Authenticator kodini yuborishingiz mumkin. Keyin konsolni mixlash mumkin.

VPN tilimsiz. Keyingi so'z o'rniga

VPN-tilimsiz qanday yashashni tushunish juda qiyin bo'lib chiqdi. Men juda ko'p o'qishim va Google'da ishlashim kerak edi. Yaxshiyamki, muammoga ko'p vaqt sarflaganingizdan so'ng, texnik qo'llanmalar va hatto man openconnect ham hayajonli romanlar kabi o'qiladi.

Natijada, men vpn-slice, mahalliy skript kabi, marshrutlash jadvalini alohida tarmoqlarga o'zgartirishini bilib oldim.

Marshrutlash jadvali

Oddiy qilib aytganda, bu birinchi ustundagi jadval bo'lib, unda Linux o'tmoqchi bo'lgan manzil nimadan boshlanishi kerak, ikkinchi ustunda esa ushbu manzilda qaysi tarmoq adapteri orqali o'tish kerak. Aslida, ma'ruzachilar ko'proq, ammo bu mohiyatni o'zgartirmaydi.

Marshrutlash jadvalini ko'rish uchun siz ip route buyrug'ini ishga tushirishingiz kerak

default via 192.168.1.1 dev wlp3s0 proto dhcp metric 600 
192.168.430.0/24 dev tun0 scope link 
192.168.1.0/24 dev wlp3s0 proto kernel scope link src 192.168.1.534 metric 600 
192.168.430.534 dev tun0 scope link 

Bu erda har bir satr qaysidir manzilga xabar yuborish uchun qayerga borish kerakligi uchun javobgardir. Birinchisi, manzilni qaerdan boshlash kerakligi tavsifi. 192.168.0.0/16 manzil 192.168 bilan boshlanishi kerakligini qanday aniqlashni tushunish uchun siz IP-manzil maskasi nima ekanligini google-da topishingiz kerak. Dev-dan keyin xabar yuborilishi kerak bo'lgan adapterning nomi mavjud.

VPN uchun Linux virtual adapterni yaratdi - tun0. Chiziq 192.168.dan boshlanadigan barcha manzillar uchun trafik u orqali o'tishini ta'minlaydi

192.168.0.0/16 dev tun0 scope link 

Buyruq yordamida marshrutlash jadvalining joriy holatini ham ko'rishingiz mumkin marshrut -n (IP manzillar aqlli ravishda anonimlashtiriladi) Bu buyruq boshqa shaklda natijalar beradi va odatda eskirgan, lekin uning chiqishi ko'pincha Internetdagi qo'llanmalarda topiladi va siz uni o'qiy olishingiz kerak.

Marshrutning IP manzili qayerdan boshlanishi kerakligini Destination va Genmask ustunlari kombinatsiyasidan tushunish mumkin. IP-manzilning Genmask-dagi 255 raqamlariga mos keladigan qismlari hisobga olinadi, ammo 0 bo'lganlar hisobga olinmaydi. Ya'ni, Destination 192.168.0.0 va Genmask 255.255.255.0 kombinatsiyasi, agar manzil 192.168.0 bilan boshlansa, unga so'rov ushbu yo'nalish bo'ylab ketishini anglatadi. Va agar maqsad 192.168.0.0, lekin Genmask 255.255.0.0 bo'lsa, 192.168 bilan boshlanadigan manzillarga so'rovlar ushbu yo'nalish bo'ylab boradi.

Vpn-slice aslida nima qilishini tushunish uchun men jadvallarning oldingi va keyingi holatini ko'rib chiqishga qaror qildim.

VPNni yoqishdan oldin bu shunday edi

route -n 

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         222.222.222.1   0.0.0.0         UG    600    0        0 wlp3s0
222.222.222.0   0.0.0.0         255.255.255.0   U     600    0        0 wlp3s0
333.333.333.333 222.222.222.1   255.255.255.255 UGH   0      0        0 wlp3s0

Openconnect-ga vpn-slicesiz qo'ng'iroq qilgandan so'ng, shunday bo'ldi

route -n

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 tun0
0.0.0.0         222.222.222.1   0.0.0.0         UG    600    0        0 wlp3s0
222.222.222.0   0.0.0.0         255.255.255.0   U     600    0        0 wlp3s0
333.333.333.333 222.222.222.1   255.255.255.255 UGH   0      0        0 wlp3s0
192.168.430.0   0.0.0.0         255.255.255.0   U     0      0        0 tun0
192.168.430.534 0.0.0.0         255.255.255.255 UH    0      0        0 tun0

Va shu kabi vpn-slice bilan birgalikda openconnect-ga qo'ng'iroq qilgandan keyin

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         222.222.222.1   0.0.0.0         UG    600    0        0 wlp3s0
222.222.222.0   0.0.0.0         255.255.255.0   U     600    0        0 wlp3s0
333.333.333.333 222.222.222.1   255.255.255.255 UGH   0      0        0 wlp3s0
192.168.430.0   0.0.0.0         255.255.255.0   U     0      0        0 tun0
192.168.430.534 0.0.0.0         255.255.255.255 UH    0      0        0 tun0

Ko'rinib turibdiki, agar siz vpn-slice-dan foydalanmasangiz, openconnect aniq ko'rsatilganlardan tashqari barcha manzillarga vpn orqali kirish kerakligini yozadi.

Mana shu yerda:

0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 tun0

U erda, uning yonida darhol boshqa yo'l ko'rsatiladi, agar Linux orqali o'tmoqchi bo'lgan manzil jadvaldagi hech qanday niqobga mos kelmasa, undan foydalanish kerak.

0.0.0.0         222.222.222.1   0.0.0.0         UG    600    0        0 wlp3s0

Bu erda allaqachon yozilgan, bu holda siz standart Wi-Fi adapteridan foydalanishingiz kerak.

Men VPN yo'lidan foydalanilganiga ishonaman, chunki u marshrutlash jadvalidagi birinchisidir.

Va nazariy jihatdan, agar siz ushbu standart yo'lni marshrutlash jadvalidan olib tashlasangiz, dnsmasq openconnect bilan birgalikda normal ishlashni ta'minlashi kerak.

Men harakat qilib ko'rdim

route del default

Va hamma narsa ishladi.

So'rovlarni vpn tilimsiz pochta serveriga yo'naltirish

Lekin menda 555.555.555.555 manzilli pochta serverim ham bor, unga VPN orqali ham kirish kerak. Unga marshrut ham qo'lda qo'shilishi kerak.

ip route add 555.555.555.555 via dev tun0

Va endi hammasi yaxshi. Shunday qilib, siz vpn-slicesiz qila olasiz, lekin nima qilayotganingizni yaxshi bilishingiz kerak. Endi men mahalliy openconnect skriptining oxirgi qatoriga sukut boΚ»yicha marshrutni olib tashlash va vpn-ga ulangandan soΚ»ng pochta joΚ»natuvchisi uchun marshrutni qoΚ»shish haqida oΚ»ylayapman, shunda velosipedimda harakatlanuvchi qismlar kamroq boΚ»ladi.

Ehtimol, ushbu keyingi so'z kimdir VPNni qanday o'rnatishni tushunishi uchun etarli bo'ladi. Ammo men nima va qanday qilishni tushunishga harakat qilayotib, muallif uchun ishlaydigan, ammo negadir men uchun ishlamaydigan ko'plab qo'llanmalarni o'qib chiqdim va men topgan barcha qismlarni bu erga qo'shishga qaror qildim. Men shunga o'xshash narsadan juda xursand bo'lardim.

Manba: www.habr.com

a Izoh qo'shish