Openconnect və vpn-slice istifadə edərək Linux-da korporativ VPN-ə necə qoşulmaq olar

Linux-u iş yerində istifadə etmək istəyirsiniz, lakin korporativ VPN-niz bunu etmir? Sonra bu məqalə dəqiq olmasa da kömək edə bilər. Mən sizi əvvəlcədən xəbərdar etmək istəyirəm ki, mən şəbəkə administrasiyası məsələlərini yaxşı başa düşmürəm, ona görə də hər şeyi səhv etmişəm. Digər tərəfdən, ola bilsin ki, mən adi insanlar üçün başa düşüləcək şəkildə dərslik yaza biləcəyəm, ona görə də sınamağı məsləhət görürəm.

Məqalədə çoxlu lazımsız məlumatlar var, lakin bu məlumat olmasaydı, mən birdən-birə vpn quraşdırma ilə qarşılaşdığım problemləri həll edə bilməzdim. Düşünürəm ki, bu bələdçidən istifadə etməyə çalışan hər kəs mənim olmayan problemlərlə üzləşəcək və ümid edirəm ki, bu əlavə məlumat bu problemləri özünüz həll etməyə kömək edəcəkdir.

Təlimatda istifadə olunan əmrlərin əksəriyyəti qısalıq üçün çıxarılan sudo vasitəsilə işlənməlidir. Yadında saxla.

Əksər IP ünvanları ciddi çaşqınlığa məruz qalıb, ona görə də 435.435.435.435 kimi bir ünvan görsəniz, işinizə xas olan bəzi normal IP olmalıdır.

Məndə Ubuntu 18.04 var, amma düşünürəm ki, bir neçə dəyişikliklə bələdçi digər paylanmalara da tətbiq oluna bilər. Bununla belə, bu mətndə Linux == Ubuntu.

Cisco Connect

Windows və ya MacOS sistemində olanlar korporativ VPN-imizə Cisco Connect vasitəsilə qoşula bilərlər. Bu, şlüz ünvanını göstərməli və hər dəfə qoşulduqda sabit hissədən və Google Authenticator tərəfindən yaradılan koddan ibarət parol daxil etməlidir.

Linux vəziyyətində, Cisco Connect-i işə salmaq mümkün olmadı, lakin Google-da Cisco Connect-i əvəz etmək üçün xüsusi olaraq hazırlanmış openconnect-dən istifadə etmək tövsiyəsi məlum oldu.

Açıq əlaqə

Teorik olaraq, Ubuntunun openconnect üçün xüsusi qrafik interfeysi var, lakin bu mənim üçün işləmədi. Bəlkə də ən yaxşısı üçündür.

Ubuntu-da openconnect paket menecerindən quraşdırılır.

apt install openconnect

Quraşdırıldıqdan dərhal sonra VPN-ə qoşulmağa cəhd edə bilərsiniz

openconnect --user poxvuibr vpn.evilcorp.com

vpn.evilcorp.com uydurma VPN ünvanıdır
poxvuibr - uydurma istifadəçi adı

openconnect sizdən parol daxil etməyinizi xahiş edəcək, o, sizə xatırladıram ki, Google Authenticator-dan sabit hissə və koddan ibarətdir və sonra o, vpn-yə qoşulmağa çalışacaq. İşlədisə, təbrik edirəm, çox ağrı olan ortadan etibarlı şəkildə keçib arxa planda openconnect-in işi ilə bağlı nöqtəyə keçə bilərsiniz. Əgər işə yaramırsa, davam edə bilərsiniz. Baxmayaraq ki, məsələn, iş yerindəki qonaq Wi-Fi-dan qoşulduqda, sevinmək olar və hələ tezdir, proseduru evdən təkrarlamağa çalışmalısınız.

Sertifikat

Yüksək ehtimalla heç nə başlamayacaq və openconnect çıxışı belə görünəcək:

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 tərəfdən bu xoşagəlməz haldır, çünki VPN-ə heç bir əlaqə yox idi, amma digər tərəfdən bu problemi necə həll etmək prinsipcə aydındır.

Burada server bizə bir sertifikat göndərdi, onunla əlaqənin pis fırıldaqçıya deyil, yerli korporasiyanın serverinə olduğunu müəyyən edə bilərik və bu sertifikat sistemə məlum deyil. Buna görə də serverin real olub olmadığını yoxlaya bilmir. Və beləliklə, hər halda, işləməyi dayandırır.

Openconnect-in hələ də serverə qoşulması üçün ona --servercert açarından istifadə edərək VPN serverindən hansı sertifikatın gəlməsini açıq şəkildə bildirməlisiniz.

Serverin bizə hansı sertifikatı göndərdiyini birbaşa hansı openconnect-in çap etdiyindən öyrənə bilərsiniz. Bu parçadan:

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

Bu əmrlə siz yenidən qoşulmağa cəhd edə bilərsiniz

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

Bəlkə indi işləyir, sonra sona qədər gedə bilərsiniz. Amma şəxsən Ubuntu mənə bu formada əncir göstərdi

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 həll olunacaq, amma ora getmək mümkün olmayacaq. Jira.evilcorp.com kimi ünvanlar ümumiyyətlə həll edilmir.

Burada nə baş verib, başa düşə bilmirəm. Amma təcrübə göstərir ki, əgər xətti /etc/resolv.conf-a əlavə etsəniz

nameserver 192.168.430.534

onda VPN daxilindəki ünvanlar sehrli şəkildə həll olunmağa başlayacaq və onların üzərində gəzmək mümkün olacaq, yəni ünvanları həll etmək üçün hansı DNS-in axtardığı başqa yerdə deyil, /etc/resolv.conf-da görünür.

Siz əmin ola bilərsiniz ki, VPN ilə əlaqə var və /etc/resolv.conf redaktə etmədən işləyir, bunun üçün brauzerə vpn-dən resursun simvolik adını deyil, onun ip ünvanını daxil etmək kifayətdir.

Nəticədə iki problem yaranır

  • VPN-ə qoşulduqda onun dns-ləri götürülmür
  • bütün trafik vpn-dən keçir, bu da internetə girməyə imkan vermir

İndi nə edəcəyinizi söyləyəcəyəm, amma əvvəlcə bir az avtomatlaşdırma.

Parolun sabit hissəsinin avtomatik daxil edilməsi

İndiyə qədər, çox güman ki, parolunuzu ən azı beş dəfə daxil etmisiniz və bu prosedur sizi çox yormuşdur. Birincisi, ona görə ki, parol uzundur, ikincisi, ona görə ki, daxil olarkən müəyyən müddətə cavab vermək lazımdır

Problemin son həlli məqaləyə daxil edilmədi, ancaq parolun sabit hissəsinin dəfələrlə daxil edilməsinə ehtiyac olmadığından əmin ola bilərsiniz.

Deyək ki, parolun sabit hissəsi fixedPassword, hissəsi isə Google Authenticator 567 987-dəndir. Bütün openconnect parolu --passwd-on-stdin arqumentindən istifadə edərək standart daxiletmə vasitəsilə ötürülə bilər.

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

İndi siz daima son daxil edilmiş əmrə qayıda və orada Google Authenticator-un yalnız bir hissəsini dəyişə bilərsiniz.

Korporativ VPN sizə İnternetə girməyə imkan vermir.

Ümumiyyətlə, habrə getmək üçün ayrıca kompüterdən istifadə etməli olduğunuz zaman çox da əlverişsiz deyil. Stackoverfow ilə kopyalayıb yapışdırmaq qabiliyyətinin olmaması işi ümumiyyətlə iflic edə bilər, buna görə də bir şey etmək lazımdır.

Onu elə təşkil etməlisiniz ki, daxili şəbəkədən resursa daxil olmaq lazım olanda Linux vpn-ə, Habr-a getmək lazım olanda isə internetə keçəsiniz.

openconnect işə saldıqdan və vpn ilə əlaqə qurduqdan sonra /usr/share/vpnc-scripts/vpnc-script-də yerləşən xüsusi skripti icra edir. Bəzi dəyişənlər giriş skriptinə ötürülür və o, vpn quraşdırmasını edir. Təəssüf ki, mən yerli skriptdən istifadə edərək korporativ vpn ilə internetin qalan hissəsi arasında trafik axınlarını necə ayıra biləcəyimi anlaya bilmədim.

Göründüyü kimi, xüsusi olaraq mənim kimi insanlar üçün, qavalla rəqs etmədən trafiki iki kanal vasitəsilə istiqamətləndirməyə imkan verən vpn-slice yardım proqramı hazırlanmışdır. Yaxşı, yəni rəqs etməli olacaqsan, amma şaman olmaq lazım deyil.

vpn dilimləri ilə trafikin kəsilməsi

Əvvəlcə vpn dilimi quraşdırmalı olacaqsınız, onu özünüz başa düşməlisiniz. Şərhlərdə suallar olarsa, bu barədə ayrıca yazı yazacam. Ancaq bu normal bir python proqramıdır, ona görə də heç bir çətinlik olmamalıdır. virtualenv istifadə edərək quraşdırdım.

Və sonra standart skript əvəzinə vpn dilimindən istifadə etməyiniz lazım olduğunu göstərən openconnect --script düyməsini istifadə edərək, yardım proqramı tətbiq edilməlidir.

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

--skriptinə skript əvəzinə çağırılacaq əmri olan sətir ötürülür. ./bin/vpn-slice - vpn-slice icra edilə bilən faylına yol 192.168.430.0/24 - vpn-ə getmək üçün ünvan maskası. Bu o deməkdir ki, əgər ünvan 192.168.430 ilə başlayırsa, onda bu ünvana malik resurs vpn daxilində axtarılmalıdır.

İndi vəziyyət demək olar ki, normal olmalıdır. Təxminən. İndi siz Habr-a gedə bilərsiniz və ip ilə daxili korporativ resursa gedə bilərsiniz, ancaq simvolik adla daxili korporativ resursa gedə bilməzsiniz. Simvolik ad və ünvanın uyğunluğunu hostlarda qeyd etsəniz, hər şey işləməlidir. Və ip ​​dəyişənə qədər işləyin. Linux indi ip-dən asılı olaraq İnternetə və ya intranetə gedə bilir. Lakin ünvanı həll etmək üçün qeyri-korporativ DNS hələ də istifadə olunur.

Problem hələ də bu formada özünü göstərə bilər - işdə hər şey yaxşıdır, ancaq evdə daxili korporativ resurslara yalnız ip vasitəsilə daxil ola bilərsiniz. Bunun səbəbi, korporativ Wi-Fi-a qoşulduğunuz zaman korporativ DNS-dən də istifadə olunur və VPN-dən istifadə etmədən belə bir ünvana hələ də gedə bilmədiyinizə baxmayaraq, VPN-dən simvolik ünvanlar həll olunur.

Host faylının avtomatik modifikasiyası

Əgər nəzakətlə vpn-slice soruşsanız, VPN-i qaldırdıqdan sonra o, öz DNS-inə gedə, orada lazımi resursların ip ünvanlarını simvolik adları ilə tapıb hostlara daxil edə bilər. VPN söndürüldükdən sonra bu ünvanlar hostlardan silinəcək. Bunun üçün simvolik adları arqument kimi vpn-slice-ə ötürməlisiniz. Bunun kimi.

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 

İndi hər şey həm ofisdə, həm də çimərlikdə işləməlidir.

VPN tərəfindən verilən DNS-də bütün subdomenlərin ünvanlarını axtarın

Şəbəkədə bir neçə ünvan varsa, host faylının avtomatik modifikasiyası ilə yanaşma olduqca işləyir. Ancaq şəbəkədə çoxlu resurs varsa, onda siz daima zoidberg.test.evilcorp.com kimi sətirləri skriptə əlavə etməlisiniz. Zoidberg test skamyalarından birinin adıdır.

Amma indi bir az anladığımız zaman bu ehtiyacın nə olduğunu aradan qaldırmaq olar.

Əgər VPN-i qaldırdıqdan sonra /etc/hosts-a baxsanız, bu xətti görə bilərsiniz

192.168.430.534 dns0.tun0 # vpn-slice-tun0 AUTOCREATED

Və resolv.conf-a yeni sətir əlavə edildi. Bir sözlə, vpn dilimi bir şəkildə vpn üçün dns serverinin harada yerləşdiyini müəyyən edir.

İndi əmin olmalıyıq ki, evilcorp.com ilə bitən bir domen adının IP ünvanını tapmaq üçün Linux korporativ dns-ə, başqa bir şey lazım olarsa, standart birinə gedir.

Mən uzun müddət google-da axtarış etdim və bildim ki, belə funksionallıq ubuntu-da mövcuddur. Bu adların həlli üçün yerli dns server dnsmasq-dan istifadə etmək qabiliyyətinə aiddir.

Yəni əmin ola bilərsiniz ki, Linux həmişə IP ünvanları üçün yerli dns serverinə gedir ki, bu da öz növbəsində domen adından asılı olaraq müvafiq xarici dns serverində ip axtaracaq.

Şəbəkələr və şəbəkə əlaqələri ilə əlaqəli hər şeyi idarə etmək üçün Ubuntu NetworkManager-dən istifadə edir və məsələn, WiFi bağlantılarını seçmək üçün GUI-dən sadəcə olaraq istifadə olunur.

Biz onun konfiqurasiyasına dırmaşmalıyıq.

  1. /etc/NetworkManager/dnsmasq.d/evilcorp-da fayl yaradın

ünvan=/.evilcorp.com/192.168.430.534

Evilcorpdan əvvəl nöqtəyə diqqət yetirin. Bu dnsmasq-a siqnal verir ki, bütün evilcorp.com subdomenləri korporativ DNS-də axtarılmalıdır.

  1. NetworkManager-ə deyin ki, adları həll etmək üçün dnsmasq-dan istifadə etsin

Şəbəkə meneceri konfiqurasiyası /etc/NetworkManager/NetworkManager.conf ünvanında yerləşir Siz oraya əlavə etməlisiniz:

[əsas] dns=dnsmasq

  1. NetworkManager-i yenidən başladın

service network-manager restart

İndi openconnect və vpn-slice paketindən istifadə edərək VPN-ə qoşulduqdan sonra vpnslice-ə arqumentlərə simvolik ünvanlar əlavə etməsəniz belə, ip normal olaraq təyin olunacaq.

VPN-dən fərdi xidmətlərə necə keçmək olar

Mən vpn-ə qoşulmağı bacarandan sonra iki gün çox sevindim və sonra məlum oldu ki, vpn-ə ofis şəbəkəsindən deyil qoşulursansa, poçt işləmir. Simptom tanışdır, elə deyilmi?

Bizim poçtumuz mail.publicevilcorp.com saytında yerləşir, yəni dnsmasq-da qaydaya düşmür və poçt serverinin ünvanı ictimai DNS vasitəsilə axtarılır.

Yaxşı, ofis hələ də bu ünvanın olduğu DNS-dən istifadə edir. Demək, mən belə düşünürdüm. Əslində dnsmasq-a xətti əlavə etdikdən sonra

ünvan=/mail.publicevilcorp.com/192.168.430.534

vəziyyət dəyişməyib. ip eyni qalır. Mən işə getməli idim.

Və yalnız sonra, vəziyyəti araşdırıb problemi bir az başa düşəndə, bir ağıllı adam mənə bunu necə həll edəcəyimi söylədi. Poçt serverinə sadəcə belə deyil, vpn vasitəsilə qoşulmaq lazım idi

192.168.430 ilə başlayan ünvanlara VPN-də sörf etmək üçün vpn dilimindən istifadə edirəm. Və təkcə poçt serverinin simvolik ünvanı evilcorp-un alt domeni deyil, həm də 192.168.430 ilə başlamayan bir ip ünvanı var. Və təbii ki, ümumi şəbəkədən heç kimi içəri buraxmır.

Linux-un VPN-dən və poçt serverinə keçməsi üçün onu vpn-slice-ə də əlavə etməlisiniz. Tutaq ki, poçt ünvanı 555.555.555.555-dir

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 

Bir arqumentlə VPN artırmaq üçün skript

Bütün bunlar, əlbəttə ki, çox rahat deyil. Bəli, mətni əl ilə yazmaq əvəzinə faylda saxlaya və kopyalayıb konsola yapışdıra bilərsiniz, lakin bu, hələ də kifayət qədər xoş deyil. Prosesi asanlaşdırmaq üçün əmri PATH-də yerləşəcək bir skriptə sarıya bilərsiniz. Və sonra yalnız Google Authenticator-dan alınan kodu daxil etməlisiniz

#!/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 

Skripti connect~evilcorp~-a yerləşdirsəniz, sadəcə konsolda yaza bilərsiniz

connect_evil_corp 567987

Ancaq indi, nədənsə, hələ də openconnect-in işlədiyi konsolu açıq saxlamalısınız

Arxa fonda openconnect işləyir

Xoşbəxtlikdən, openconnect-in müəllifləri bizimlə maraqlandılar və proqrama xüsusi bir açar əlavə etdilər - arxa planda proqram işə salındıqdan sonra fonda işləyir. Əgər onu belə işlədirsinizsə, o zaman konsol işə salındıqdan sonra bağlana bilər

#!/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  

İndi logların hara getdiyi bəlli deyil. Ümumiyyətlə, loglara ehtiyacımız yoxdur, amma heç vaxt bilmirsiniz. openconnect onları təhlükəsiz və sağlam saxlanacaq syslog-a yönləndirə bilər. əmrə --syslog düyməsini əlavə etməlisiniz

#!/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  

Beləliklə, məlum olur ki, openconnect hardasa arxa planda işləyir və heç kimi narahat etmir, amma onu necə dayandırmaq aydın deyil. Yəni, əlbəttə ki, ps-in çıxışını grep ilə süzgəcdən keçirə və adında openconnect olan bir proses axtara bilərsiniz, lakin bu, nədənsə üzücüdür. Bu barədə düşünən müəlliflərə təşəkkür edirəm. openconnect-in --pid-fayl keçidi var, ondan openconnect-ə öz proses identifikatorunu fayla yazmaq üçün göstəriş vermək üçün istifadə edilə bilər.

#!/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

İndi hər zaman əmrlə prosesi öldürə bilərsiniz

kill $(cat ~/vpn-pid)

Proses yoxdursa, kill and içəcək, lakin səhv atmayacaq. Fayl mövcud deyilsə, o zaman da dəhşətli bir şey olmayacaq, buna görə skriptin ilk sətirində prosesi təhlükəsiz şəkildə öldürə bilərsiniz.

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

İndi siz kompüteri yandıra, konsolu aça və ona Google Authenticator-dan kodu ötürərək əmri işlədə bilərsiniz. Bundan sonra konsol döyülə bilər.

vpn dilim olmadan. Son söz əvəzinə

Vpn dilimi olmadan necə yaşamağı başa düşmək çox çətin oldu. Çox oxumalı və google-da gəzməli oldum. Xoşbəxtlikdən, bir problemlə çox vaxt keçirdikdən sonra texniki təlimatlar və hətta man openconnect maraqlı romanlar kimi oxunur.

Nəticədə tapdım ki, vpn dilimi, yerli skript kimi, marşrutlaşdırma cədvəlini ayrı-ayrı şəbəkələrə dəyişdirir.

Marşrut cədvəli

Bu, sadə dillə desək, birinci sütunda Linux-un getmək istədiyi ünvanın nədən başlamalı olduğunu və ikinci sütunda bu ünvana hansı şəbəkə adapteri vasitəsilə getməli olduğu cədvəldir. Əslində, daha çox sütun var, lakin bu, mahiyyəti dəyişmir.

Marşrutlaşdırma cədvəlinə baxmaq üçün ip marşrutu əmrini yerinə yetirməlisiniz

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 

Burada hər bir xətt hansısa ünvana mesaj göndərmək üçün hara getməli olduğunuza cavabdehdir. Birincisi, ünvanın nə ilə başlamalı olduğunun təsviridir. 192.168.0.0/16 ünvanının 192.168 ilə başlamalı olduğunu anlamaq üçün IP ünvan maskasının nə olduğunu google-da axtarmalısınız. Devdən sonra mesaj göndəriləcək adapterin adıdır.

Linux VPN üçün virtual adapter hazırladı - tun0. 192.168 ilə başlayan bütün ünvanlar üçün trafikin ondan keçməsi üçün xətt məsuliyyət daşıyır

192.168.0.0/16 dev tun0 scope link 

Siz həmçinin əmrdən istifadə edərək marşrutlaşdırma cədvəlinin cari vəziyyətinə baxa bilərsiniz marşrut -n (IP ünvanları ağıllı şəkildə anonimləşdirilir) Bu əmr fərqli formada nəticələr verir və ümumiyyətlə köhnəlmişdir, lakin onun çıxışı tez-tez İnternetdəki təlimatlarda tapılır və siz onu oxuya bilməlisiniz.

Marşrutun IP ünvanının nə ilə başlamalı olduğunu Destination və Genmask sütunlarının birləşməsindən başa düşmək olar. İp ünvanının Genmask-da 255 rəqəmlərinə uyğun gələn hissələri nəzərə alınır, 0 olanlar isə nəzərə alınmır. Yəni Destination 192.168.0.0 və Genmask 255.255.255.0 kombinasiyası o deməkdir ki, əgər ünvan 192.168.0 ilə başlayırsa, ona sorğu bu marşrutla gedəcək. Əgər Təyinat 192.168.0.0, Genmask isə 255.255.0.0-dırsa, 192.168 ilə başlayan ünvanlara sorğular bu marşrutla gedəcək.

Vpn diliminin əslində nə etdiyini anlamaq üçün cədvəllərin əvvəlki və sonrakı vəziyyətlərinə baxmaq qərarına gəldim.

VPN-i yandırmazdan əvvəl belə idi

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-ə vpn dilimi olmadan zəng etdikdən sonra belə oldu

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

Və bu kimi vpn dilimi ilə birlikdə openconnect-ə zəng etdikdən sonra

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

Görünür ki, əgər siz vpn dilimindən istifadə etmirsinizsə, onda openconnect açıq şəkildə yazır ki, ayrıca qeyd olunanlar istisna olmaqla, bütün ünvanlara vpn vasitəsilə keçməlisiniz.

Elə burada:

0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 tun0

Orada, onun yanında dərhal başqa bir yol göstərilir, Linux-un getməyə çalışdığı ünvan cədvəldəki maskalardan heç birinə uyğun gəlmirsə, istifadə edilməlidir.

0.0.0.0         222.222.222.1   0.0.0.0         UG    600    0        0 wlp3s0

Artıq burada yazılıb ki, bu halda standart Wi-Fi adapterindən keçmək lazımdır.

Mən VPN yolunun istifadə edildiyinə inanıram, çünki marşrutlaşdırma cədvəlində birincidir.

Və nəzəri olaraq, bu standart yolu marşrutlaşdırma cədvəlindən çıxarsanız, dnsmasq openconnect ilə birlikdə normal işləməyi təmin etməlidir.

cəhd etdim

route del default

Və hər şey işlədi.

Sorğuların vpn dilimi olmadan poçt serverinə yönləndirilməsi

Amma mənim də 555.555.555.555 ünvanlı poçt serverim var, ona da vpn vasitəsilə daxil olmaq lazımdır. Ona gedən yol da əl ilə əlavə edilməlidir.

ip route add 555.555.555.555 via dev tun0

Və indi hər şey normaldır. Beləliklə, siz hələ də vpn dilimi olmadan edə bilərsiniz, lakin siz artıq nə etdiyinizi yaxşı bilməlisiniz. İndi mən yerli openconnect skriptinin son sətirinə defolt marşrutu silmək və vpn-ə qoşulduqdan sonra poçt göndərən üçün marşrut əlavə etmək barədə düşünürəm ki, velosipedimdə daha az hərəkət edən hissə olsun.

Yəqin ki, VPN-in necə qurulacağını başa düşmək üçün bu söz kimsə üçün kifayətdir. Ancaq nəyi və necə edəcəyimi anlamağa çalışarkən müəllif üçün işləyən, lakin nədənsə mənim üçün işləməyən bir çox dərslikləri oxudum və tapdığım bütün parçaları buraya əlavə etmək qərarına gəldim. Belə bir şey olsa çox xoşbəxt olardım.

Mənbə: www.habr.com

Добавить комментарий