Openconnect және vpn-slice көмегімен Linux жүйесінде корпоративтік VPN желісіне қалай қосылуға болады

Linux жүйесін жұмыста пайдаланғыңыз келе ме, бірақ корпоративтік VPN сізге рұқсат бермейді ме? Сонда бұл мақала көмектесуі мүмкін, бірақ бұл анық емес. Мен желіні басқару мәселелерін жақсы түсінбейтінімді алдын ала ескерткім келеді, сондықтан мен бәрін қате жасаған болуым мүмкін. Екінші жағынан, қарапайым адамдарға түсінікті болатындай етіп гид жазуым мүмкін, сондықтан мен оны қолданып көруге кеңес беремін.

Мақалада көптеген қажет емес ақпарат бар, бірақ бұл білімсіз VPN орнату арқылы күтпеген жерден пайда болған мәселелерді шеше алмас едім. Менің ойымша, бұл нұсқаулықты қолдануға тырысатын кез келген адам менде болмаған мәселелерге тап болады және бұл қосымша ақпарат бұл мәселелерді өз бетімен шешуге көмектеседі деп үміттенемін.

Осы нұсқаулықта пайдаланылатын пәрмендердің көпшілігін sudo арқылы іске қосу қажет, ол қысқалық үшін жойылған. Есіңізде болсын.

Көптеген IP мекенжайлары қатты бұрмаланған, сондықтан 435.435.435.435 сияқты мекенжайды көрсеңіз, онда сіздің жағдайыңызға тән қалыпты IP болуы керек.

Менде Ubuntu 18.04 бар, бірақ менің ойымша, аздаған өзгерістермен нұсқаулықты басқа дистрибутивтерге қолдануға болады. Дегенмен, бұл мәтінде Linux == Ubuntu.

Cisco Connect

Windows немесе MacOS жүйесінде жұмыс істейтіндер біздің корпоративтік VPN желісіне Cisco Connect арқылы қосыла алады, ол шлюз мекенжайын көрсетуі керек және қосылған сайын бекітілген бөлік пен Google Authenticator жасаған кодтан тұратын құпия сөзді енгізу керек.

Linux жағдайында мен Cisco Connect іске қосыла алмадым, бірақ мен Google-да Cisco Connect-ті ауыстыру үшін арнайы жасалған openconnect-ті пайдалану туралы ұсынысты қолдана алдым.

Openconnect

Теориялық тұрғыдан Ubuntu-да openconnect үшін арнайы графикалық интерфейс бар, бірақ ол мен үшін жұмыс істемеді. Мүмкін бұл жақсы жаққа.

Ubuntu жүйесінде openconnect бума менеджерінен орнатылады.

apt install openconnect

Орнатқаннан кейін бірден VPN желісіне қосылуға болады

openconnect --user poxvuibr vpn.evilcorp.com

vpn.evilcorp.com — жалған VPN мекенжайы
poxvuibr - жалған пайдаланушы аты

openconnect сізден құпия сөзді енгізуді сұрайды, ол бекітілген бөліктен және Google Authenticator кодынан тұрады, содан кейін ол VPN желісіне қосылуға тырысады. Егер ол жұмыс істесе, құттықтаймыз, сіз ортаны қауіпсіз өткізіп жібере аласыз, бұл өте ауыртпалық болып табылады және фондық режимде жұмыс істейтін openconnect туралы тармаққа өтіңіз. Егер ол жұмыс істемесе, жалғастыра аласыз. Егер ол, мысалы, жұмыс орнындағы қонақ Wi-Fi желісіне қосылу кезінде жұмыс істесе де, қуануға әлі ерте болуы мүмкін; процедураны үйден қайталауға тырысу керек.

Сертификат

Ештеңе басталмауы ықтималдығы жоғары және openconnect шығысы келесідей болады:

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

Бір жағынан, бұл жағымсыз, өйткені VPN-ге қосылым болмады, бірақ екінші жағынан, бұл мәселені қалай шешуге болатыны, негізінен, түсінікті.

Мұнда сервер бізге сертификат жіберді, ол арқылы біз байланыс зұлым алаяққа емес, біздің корпорациямыздың серверіне жасалып жатқанын анықтай аламыз және бұл сертификат жүйеге белгісіз. Сондықтан ол сервердің шын немесе жоқ екенін тексере алмайды. Осылайша, ол жұмысын тоқтатады.

Openconnect серверге қосылуы үшін VPN серверінен —servercert кілті арқылы қандай сертификат келуі керек екенін нақты айту керек.

Сервер бізге қандай сертификат жібергенін қандай openconnect басып шығарғанын білуге ​​болады. Міне, осы үзіндіден:

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

Бұл пәрмен арқылы сіз қайта қосылуға әрекет жасай аласыз

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

Мүмкін қазір ол жұмыс істеп жатыр, содан кейін сіз соңына қарай жүре аласыз. Бірақ жеке Убунта маған осы пішіндегі інжірді көрсетті

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 шешеді, бірақ сіз ол жерге бара алмайсыз. jira.evilcorp.com сияқты мекенжайлар мүлдем шешілмейді.

Мұнда не болғаны маған түсініксіз. Бірақ тәжірибе көрсеткендей, егер сіз /etc/resolv.conf жолына қоссаңыз

nameserver 192.168.430.534

содан кейін VPN ішіндегі мекенжайлар сиқырлы түрде шешіле бастайды және сіз олар арқылы жүре аласыз, яғни мекенжайларды шешу үшін DNS іздейтін нәрсе басқа жерде емес, арнайы /etc/resolv.conf ішінде көрінеді.

Сіз VPN-ге қосылым бар екенін және оның /etc/resolv.conf файлына ешбір өзгеріссіз жұмыс істейтінін тексере аласыз, ол үшін браузерге VPN ресурсының символдық атауын емес, оның IP мекенжайын енгізіңіз.

Нәтижесінде екі мәселе туындайды

  • VPN желісіне қосылу кезінде оның DNS қабылданбайды
  • барлық трафик Интернетке кіруге мүмкіндік бермейтін VPN арқылы өтеді

Мен сізге қазір не істеу керектігін айтамын, бірақ алдымен аздап автоматтандыру.

Құпия сөздің бекітілген бөлігін автоматты түрде енгізу

Осы уақытқа дейін сіз парольді кем дегенде бес рет енгіздіңіз және бұл процедура сізді шаршатып жіберді. Біріншіден, құпия сөз ұзақ болғандықтан, екіншіден, кіру кезінде белгіленген уақыт кезеңіне сәйкес келуі керек

Мәселенің түпкілікті шешімі мақалада қамтылмаған, бірақ парольдің бекітілген бөлігін бірнеше рет енгізудің қажеті жоқ екеніне көз жеткізуге болады.

Құпия сөздің бекітілген бөлігі fixedPassword, ал Google Authenticator бөлігі 567 987 деп есептейік. Толық құпия сөзді --passwd-on-stdin аргументі арқылы стандартты енгізу арқылы openconnect-ке жіберуге болады.

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

Енді сіз соңғы енгізілген пәрменге үнемі оралып, Google Authenticator бағдарламасының бір бөлігін ғана өзгерте аласыз.

Корпоративтік VPN сізге Интернетті шарлауға мүмкіндік бермейді.

Жалпы, Хабрға бару үшін бөлек компьютерді пайдалану өте ыңғайсыз емес. Stackoverfow-дан көшіру-қою мүмкін еместігі әдетте жұмысты парализациялауы мүмкін, сондықтан бірдеңе істеу керек.

Біз оны ішкі желіден ресурсқа кіру қажет болғанда, Linux VPN-ге, ал Habr-қа өту керек болғанда Интернетке өтетіндей етіп ұйымдастыруымыз керек.

openconnect іске қосып, vpn қосылымын орнатқаннан кейін /usr/share/vpnc-scripts/vpnc-script ішінде орналасқан арнайы сценарийді орындайды. Кейбір айнымалылар сценарийге кіріс ретінде жіберіледі және ол VPN конфигурациялайды. Өкінішке орай, мен трафик ағындарын корпоративтік VPN мен Интернеттің қалған бөлігі арасында жергілікті сценарийді пайдаланып қалай бөлуге болатынын біле алмадым.

Шамасы, vpn-slice утилитасы мен сияқты адамдар үшін арнайы әзірленген сияқты, бұл трафикті бубен билемей-ақ екі арна арқылы жіберуге мүмкіндік береді. Яғни, сіз билеуіңіз керек, бірақ бақсы болудың қажеті жоқ.

vpn тілімен трафикті бөлу

Біріншіден, сізге vpn-slice орнату керек, мұны өзіңіз анықтауыңыз керек. Түсініктемелерде сұрақтар туындаса, мен бұл туралы бөлек пост жазамын. Бірақ бұл қарапайым Python бағдарламасы, сондықтан ешқандай қиындықтар болмауы керек. Мен virtualenv арқылы орнаттым.

Содан кейін стандартты сценарийдің орнына vpn-slice пайдалану керек екенін көрсететін openconnect -скрипт қосқышын пайдаланып қызметтік бағдарлама қолданылуы керек.

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

--скриптке сценарийдің орнына шақыру қажет пәрмені бар жол беріледі. ./bin/vpn-slice - vpn-slice орындалатын файлға жол 192.168.430.0/24 - vpn жүйесінде баратын мекенжайлар маскасы. Бұл жерде, егер мекенжай 192.168.430-дан басталса, онда бұл мекенжайы бар ресурсты VPN ішінен іздеу керек дегенді білдіреді.

Қазір жағдай дерлік қалыпты болуы керек. Шамамен. Енді сіз Habr сайтына кіре аласыз және сіз IP арқылы корпоративтік ресурсқа бара аласыз, бірақ символдық атау бойынша ішкі корпоративтік ресурсқа бара алмайсыз. Хосттардағы символдық атау мен мекенжай арасындағы сәйкестікті көрсетсеңіз, бәрі жұмыс істеуі керек. Және IP өзгергенше жұмыс істеңіз. Linux енді IP-ге байланысты Интернетке немесе интранет желісіне қол жеткізе алады. Бірақ мекенжайды анықтау үшін корпоративтік емес DNS әлі де қолданылады.

Мәселе осы пішінде де көрінуі мүмкін - жұмыста бәрі жақсы, бірақ үйде тек IP арқылы ішкі корпоративтік ресурстарға қол жеткізуге болады. Себебі корпоративтік Wi-Fi желісіне қосылған кезде корпоративтік DNS де пайдаланылады және VPN желісін пайдаланбай мұндай мекенжайға әлі де бару мүмкін еместігіне қарамастан, VPN-тен символдық мекенжайлар онда шешіледі.

Хосттар файлын автоматты түрде өзгерту

Егер vpn-тілегі сыпайы түрде сұралса, VPN-ді көтергеннен кейін ол өзінің DNS-ке өтіп, қажетті ресурстардың IP мекенжайларын символдық атаулары бойынша тауып, оларды хосттарға енгізе алады. VPN өшірілгеннен кейін бұл мекенжайлар хосттардан жойылады. Мұны істеу үшін символдық атауларды дәлел ретінде vpn-slice-ке беру керек. Бұл сияқты.

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 

Енді барлығы кеңседе де, жағажайда да жұмыс істеуі керек.

VPN арқылы берілген DNS ішіндегі барлық ішкі домендердің мекенжайларын іздеңіз

Егер желіде мекенжайлар аз болса, хосттар файлын автоматты түрде өзгерту тәсілі өте жақсы жұмыс істейді. Бірақ егер желіде ресурстар көп болса, онда сіз скриптке zoidberg.test.evilcorp.com сияқты жолдарды үнемі қосуыңыз керек болады. Zoidberg сынақ орындықтарының бірінің атауы.

Бірақ қазір біз бұл қажеттілікті неге жоюға болатынын аздап түсінеміз.

Егер VPN-ді көтергеннен кейін, /etc/hosts ішіне қарасаңыз, осы жолды көре аласыз

192.168.430.534 dns0.tun0 # vpn-slice-tun0 АВТОЖАСАЛҒАН

Және resolv.conf файлына жаңа жол қосылды. Қысқаша айтқанда, vpn тілі қандай да бір жолмен vpn үшін DNS серверінің қай жерде орналасқанын анықтады.

Енді біз evilcorp.com-да аяқталатын домен атауының IP-мекен-жайын білу үшін Linux корпоративтік DNS-ке, ал егер басқа нәрсе қажет болса, әдепкіге өтетініне көз жеткізуіміз керек.

Мен ұзақ уақыт бойы Google-ды зерттедім және мұндай функция Ubuntu-да қораптан тыс қол жетімді екенін білдім. Бұл атауларды шешу үшін dnsmasq жергілікті DNS серверін пайдалану мүмкіндігін білдіреді.

Яғни, Linux әрқашан IP мекенжайлары үшін жергілікті DNS серверіне баратынына көз жеткізуге болады, ол өз кезегінде домендік атқа байланысты сәйкес сыртқы DNS серверінде IP іздейді.

Желілер мен желілік қосылымдарға қатысты барлығын басқару үшін Ubuntu NetworkManager қызметін пайдаланады және мысалы, Wi-Fi қосылымдарын таңдауға арналған графикалық интерфейс оның алдыңғы жағы ғана.

Біз оның конфигурациясында көтерілуіміз керек.

  1. /etc/NetworkManager/dnsmasq.d/evilcorp ішінде файл жасаңыз

мекенжайы=/.evilcorp.com/192.168.430.534

Evilcorp алдындағы нүктеге назар аударыңыз. Ол dnsmasq-қа evilcorp.com сайтының барлық ішкі домендерін корпоративтік DNS жүйесінде іздеу керек екенін білдіреді.

  1. NetworkManager қолданбасына атауды шешу үшін dnsmasq пайдалануын айтыңыз

Желіні басқарушы конфигурациясы /etc/NetworkManager/NetworkManager.conf ішінде орналасқан. Сол жерге қосу керек:

[негізгі] dns=dnsmasq

  1. NetworkManager бағдарламасын қайта іске қосыңыз

service network-manager restart

Енді VPN желісіне openconnect және vpn-slice арқылы қосылғаннан кейін, vpnslice аргументтеріне символдық мекенжайларды қоспасаңыз да, IP қалыпты түрде анықталады.

VPN арқылы жеке қызметтерге қалай қол жеткізуге болады

VPN желісіне қосылып үлгергеннен кейін екі күн бойы қатты қуандым, содан кейін VPN желісіне кеңсе желісінен тыс қосылсам, пошта жұмыс істемейтіні белгілі болды. Симптом таныс, солай емес пе?

Біздің поштамыз mail.publicevilcorp.com сайтында орналасқан, яғни ол dnsmasq ережесіне жатпайды және пошта серверінің мекенжайы жалпыға қолжетімді DNS арқылы ізделеді.

Кеңсе әлі де осы мекенжайды қамтитын DNS пайдаланады. Мен солай ойладым. Шын мәнінде, жолды dnsmasq-ға қосқаннан кейін

address=/mail.publicevilcorp.com/192.168.430.534

жағдай мүлде өзгерген жоқ. ip сол күйінде қалды. Мен жұмысқа баруым керек еді.

Тек кейінірек жағдайға тереңірек үңіліп, мәселені аздап түсінгенімде бір ақылды адам оны қалай шешуге болатынын айтты. Пошта серверіне бұлай ғана емес, VPN арқылы қосылу керек болды

Мен VPN арқылы 192.168.430-дан басталатын мекенжайларға өту үшін vpn-кесінді пайдаланамын. Пошта серверінде evilcorp қосалқы домені болып табылмайтын символдық мекен-жай ғана емес, оның 192.168.430-мен басталатын IP мекенжайы да жоқ. Әрине, ол жалпы желіден ешкімнің оған келуіне жол бермейді.

Linux VPN арқылы және пошта серверіне өтуі үшін оны vpn тіліміне де қосу керек. Пошта жіберушінің мекенжайы 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 

Бір аргументпен VPN көтеруге арналған сценарий

Мұның бәрі, әрине, өте ыңғайлы емес. Иә, мәтінді қолмен терудің орнына файлға сақтауға және оны консольге көшіріп қоюға болады, бірақ бұл әлі де жағымды емес. Процесті жеңілдету үшін пәрменді PATH ішінде орналасатын сценарийге орауға болады. Содан кейін сізге тек Google Authenticator-тен алынған кодты енгізу қажет болады

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

Сценарийді connect~evilcorp~ ішіне қойсаңыз, консольде жай ғана жаза аласыз

connect_evil_corp 567987

Бірақ қазір қандай да бір себептермен openconnect жұмыс істеп тұрған консольді әлі де ашық ұстау керек

Фонда openconnect іске қосылуда

Бақытымызға орай, openconnect авторлары бізге қамқорлық жасап, бағдарламаны іске қосқаннан кейін фондық режимде жұмыс істеуге мүмкіндік беретін бағдарламаға арнайы кілтті қосты. Егер сіз оны осылай іске қоссаңыз, іске қосқаннан кейін консольді жабуға болады

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

Енді журналдардың қайда кететіні белгісіз. Жалпы, бізге журналдар қажет емес, бірақ сіз ешқашан білмейсіз. openconnect оларды syslog жүйесіне қайта бағыттай алады, онда олар қауіпсіз және қауіпсіз сақталады. пәрменге –syslog қосқышын қосу керек

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

Осылайша, openconnect бір жерде фондық режимде жұмыс істейді және ешкімді алаңдатпайды, бірақ оны қалай тоқтату керек екені белгісіз. Яғни, сіз, әрине, grep көмегімен ps шығысын сүзуге және атауында openconnect бар процесті іздеуге болады, бірақ бұл қандай да бір жалықтырады. Осыны ойлаған авторларға да рахмет. Openconnect-те -pid-файл кілті бар, оның көмегімен openconnect-ке процесс идентификаторын файлға жазуға нұсқау беруге болады.

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

Енді сіз әрқашан пәрмен арқылы процесті өлтіре аласыз

kill $(cat ~/vpn-pid)

Егер ешқандай процесс болмаса, kill қарғайды, бірақ қате жібермейді. Егер файл жоқ болса, онда да жаман ештеңе болмайды, сондықтан сценарийдің бірінші жолындағы процесті қауіпсіз түрде жоюға болады.

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

Енді сіз компьютеріңізді қосып, консольді ашып, Google Authenticator кодты жібере отырып, пәрменді іске қоса аласыз. Содан кейін консольді шегелеуге болады.

VPN тілімсіз. Кейінгі сөздің орнына

VPN-тілігінсіз қалай өмір сүру керектігін түсіну өте қиын болып шықты. Маған көп оқып, Google іздеуге тура келді. Бақытымызға орай, проблемамен көп уақыт өткізгеннен кейін, техникалық нұсқаулықтар және тіпті man openconnect қызықты романдар сияқты оқиды.

Нәтижесінде мен vpn тілімінің жергілікті сценарий сияқты маршруттау кестесін бөлек желілерге өзгертетінін білдім.

Бағыттау кестесі

Қарапайым тілмен айтқанда, бұл бірінші бағандағы кесте, онда Linux өткісі келетін мекенжай неден басталуы керек және екінші бағанда осы мекенжай бойынша қай желі адаптері арқылы өту керек. Шындығында, сөйлеушілер көп, бірақ бұл мәнді өзгертпейді.

Маршруттау кестесін көру үшін ip route пәрменін орындау керек

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 

Мұнда әрбір жол қандай да бір мекенжайға хабарлама жіберу үшін қайда бару керек екеніне жауап береді. Біріншісі - мекен-жайдың қай жерден басталуы керектігінің сипаттамасы. 192.168.0.0/16 мекенжай 192.168-ден басталуы керек екенін қалай анықтауға болатынын түсіну үшін IP мекенжайының маскасы деген не екенін Google іздеу керек. Dev-тен кейін хабар жіберілетін адаптердің аты бар.

VPN үшін Linux виртуалды адаптерді жасады - tun0. Жол 192.168-ден басталатын барлық мекенжайлар үшін трафиктің ол арқылы өтуін қамтамасыз етеді

192.168.0.0/16 dev tun0 scope link 

Сондай-ақ пәрмен арқылы маршруттау кестесінің ағымдағы күйін қарауға болады бағыт -N (IP мекенжайлары ақылды түрде анонимделген) Бұл пәрмен басқа пішінде нәтижелер береді және әдетте ескірген, бірақ оның шығысы Интернеттегі нұсқаулықтарда жиі кездеседі және сіз оны оқи білуіңіз керек.

Бағыттың IP мекенжайы қай жерден бастау керек екенін Destination және Genmask бағандарының тіркесімінен түсінуге болады. IP мекенжайының Genmask-те 255 сандарына сәйкес келетін бөліктері ескеріледі, бірақ 0 болатын жерлер ескерілмейді. Яғни, 192.168.0.0 Destination және Genmask 255.255.255.0 тіркесімі, егер мекенжай 192.168.0-ден басталса, онда оған сұраныс осы маршрут бойынша өтетінін білдіреді. Ал егер межелі 192.168.0.0 бірақ Genmask 255.255.0.0 болса, 192.168-ден басталатын мекенжайларға сұраулар осы бағыт бойынша жүреді.

vpn тілімінің шын мәнінде не істейтінін анықтау үшін мен кестелердің алдындағы және кейінгі күйлерін қарауды шештім.

VPN-ді қоспас бұрын осылай болды

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 тілімсіз шақырғаннан кейін ол осылай болды

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

Openconnect-ке қоңырау шалғаннан кейін, vpn тілімен бірге осылайша

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

Көріп отырғаныңыздай, егер сіз vpn-slice қолданбасаңыз, онда openconnect нақты көрсетілгендерден басқа барлық мекенжайларға vpn арқылы қол жеткізу керек деп жазады.

Осы жерде:

0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 tun0

Онда, оның жанында бірден басқа жол көрсетіледі, егер Linux арқылы өтуге тырысатын мекенжай кестедегі ешқандай маскаға сәйкес келмесе, оны пайдалану керек.

0.0.0.0         222.222.222.1   0.0.0.0         UG    600    0        0 wlp3s0

Мұнда қазірдің өзінде жазылған, бұл жағдайда стандартты Wi-Fi адаптерін пайдалану керек.

Мен VPN жолы пайдаланылады деп ойлаймын, себебі ол маршруттау кестесінде бірінші болып табылады.

Ал теориялық тұрғыдан, егер сіз маршруттау кестесінен осы әдепкі жолды алып тастасаңыз, dnsmasq openconnect-пен бірге қалыпты жұмысты қамтамасыз етуі керек.

Мен тырыстым

route del default

Және бәрі жұмыс істеді.

Сұрауларды vpn тілімсіз пошта серверіне бағыттау

Бірақ менде 555.555.555.555 мекенжайы бар пошта серверім де бар, оған VPN арқылы кіру керек. Оған баратын жолды да қолмен қосу керек.

ip route add 555.555.555.555 via dev tun0

Ал қазір бәрі жақсы. Сонымен, сіз vpn-сliceсіз жасай аласыз, бірақ сіз не істеп жатқаныңызды жақсы білуіңіз керек. Мен қазір менің велосипедімде қозғалатын бөліктер аз болуы үшін, жергілікті openconnect сценарийінің соңғы жолына әдепкі маршрутты алып тастауды және VPN желісіне қосылғаннан кейін пошта жіберушіге маршрут қосуды ойлап жатырмын.

Мүмкін, бұл кейінгі сөз біреуге VPN орнатуды түсіну үшін жеткілікті болар еді. Бірақ мен нені және қалай істеу керектігін түсінуге тырысқанда, мен авторға жұмыс істейтін, бірақ қандай да бір себептермен маған жұмыс істемейтін көптеген нұсқаулықтарды оқыдым және мен тапқан барлық бөліктерді осында қосуды шештім. Мен мұндай нәрсеге өте қуанышты болар едім.

Ақпарат көзі: www.habr.com

пікір қалдыру