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 серверге туташуу үчүн, ага —servercert ачкычы аркылуу VPN серверинен кайсы сертификат келиши керектигин ачык айтышыңыз керек.

Жана сиз сервер кайсы сертификатты бизге түздөн-түз кайсы 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 деп коёлу. Сырсөздү толугу менен openconnect үчүн стандарттык киргизүү аркылуу --passwd-on-stdin аргументи аркылуу өткөрсө болот.

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-slice аркылуу трафикти бөлүү

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

Андан кийин, стандарттык скрипттин ордуна vpn-slice колдонушуңуз керек экендигин ачык туташтыруу үчүн -скрипт которуштурууну колдонуп, утилита колдонулушу керек.

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 ичинде изделиши керек дегенди билдирет.

Азыр абал дээрлик нормалдуу болушу керек. Дээрлик. Эми сиз Хабрга барсаңыз болот жана сиз 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 сыяктуу сызыктарды дайыма кошуп турушуңуз керек болот.

Бирок азыр биз бул муктаждыкты эмне үчүн жоюуга болорун бир аз түшүндүк.

Эгер VPNди көтөргөндөн кийин, /etc/hosts дарегине карасаңыз, бул сапты көрө аласыз

192.168.430.534 dns0.tun0 # vpn-slice-tun0 AUTOCREATED

Жана resolv.conf жаңы сап кошулду. Кыскача айтканда, vpn-кесими кандайдыр бир жол менен VPN үчүн DNS сервери кайда жайгашканын аныктайт.

Эми биз evilcorp.com менен аяктаган домендик аталыштын IP дарегин билүү үчүн, Linux корпоративдик DNSке, ал эми башка нерсе керек болсо, демейкиге өтүшүнө ынанышыбыз керек.

Мен бир топ убакыт бою Google'да издедим жана мындай функция Ubuntu'до кутудан тышкары бар экенин билдим. Бул ысымдарды чечүү үчүн жергиликтүү DNS серверин dnsmasq колдонуу мүмкүнчүлүгүн билдирет.

Башкача айтканда, Linux ар дайым IP даректери үчүн жергиликтүү DNS серверине барарын текшере аласыз, ал өз кезегинде, домендик аталышка жараша, тиешелүү тышкы DNS серверинде IP издейт.

Тармактарга жана тармактык туташууларга тиешелүү нерселердин баарын башкаруу үчүн Ubuntu NetworkManagerди колдонот жана, мисалы, Wi-Fi туташууларын тандоо үчүн графикалык интерфейс анын жөн гана алдыңкы аягы.

Биз анын конфигурациясында көтөрүлүшүбүз керек болот.

  1. /etc/NetworkManager/dnsmasq.d/evilcorp ичинде файл түзүңүз

address=/.evilcorp.com/192.168.430.534

Evilcorp алдындагы чекитке көңүл буруңуз. Бул dnsmasqга evilcorp.com сайтынын бардык субдомендерин корпоративдик DNSтен издөө керек экенин билдирет.

  1. NetworkManagerге ысымды чечүү үчүн dnsmasq колдонуусун айтыңыз

Тармак менеджеринин конфигурациясы /etc/NetworkManager/NetworkManager.conf дарегинде жайгашкан Сиз бул жерге кошушуңуз керек:

[main] dns=dnsmasq

  1. NetworkManagerди кайра иштетиңиз

service network-manager restart

Эми, openconnect жана vpn-slice аркылуу VPNге туташкандан кийин, 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-file ачкычы бар, анын жардамы менен сиз 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 $(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 дарек маскасы деген эмне экенин гуглдан издөө керек. Dev'ден кийин билдирүү жөнөтүлө турган адаптердин аты бар.

VPN үчүн Linux виртуалдык адаптерди жасады - tun0. Сап 192.168 менен башталган бардык даректер үчүн трафиктин ал аркылуу өтүшүн камсыздайт

192.168.0.0/16 dev tun0 scope link 

Ошондой эле буйрукту колдонуу менен маршруттук таблицанын учурдагы абалын карай аласыз маршрут -n (IP даректери акылдуу түрдө анонимдүү) Бул буйрук башка формада жыйынтыктарды чыгарат жана жалпысынан эскирген, бирок анын чыгарылышы Интернеттеги колдонмолордо көп кездешет жана сиз аны окуй билишиңиз керек.

Маршруттун IP дареги кайсы жерден башталышы керек экенин Destination жана Genmask тилкелеринин айкалышынан түшүнсө болот. IP даректин Genmaskтеги 255 сандарына туура келген бөлүктөрү эске алынат, бирок 0 болгондор эске алынбайт. Башкача айтканда, Destination 192.168.0.0 жана Genmask 255.255.255.0 айкалышы, эгерде дарек 192.168.0 менен башталса, анда ага суроо-талап ушул маршрут боюнча кетет дегенди билдирет. Эгерде Destination 192.168.0.0, бирок Genmask 255.255.0.0 болсо, анда 192.168 менен башталган даректерге суроо-талаптар ушул маршрут боюнча өтөт.

vpn-slice чындыгында эмне кыларын билүү үчүн, мен таблицалардын мурунку жана кийинки абалын карап көрүүнү чечтим.

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

Жана ушул сыяктуу vpn-кесим менен бирге openconnect чакыргандан кийин

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 тилимсиз кыла аласыз, бирок сиз эмне кылып жатканыңызды жакшы билишиңиз керек. Мен азыр түпнуска openconnect скриптинин акыркы сабына демейки маршрутту алып салуу жана vpn туташкандан кийин кат жөнөтүүчү үчүн маршрутту кошуу жөнүндө ойлонуп жатам, ошондуктан менин велосипедимде кыймылдуу бөлүктөрү азыраак болот.

Балким, бул кийинки сөз кимдир бирөө VPNди кантип орнотууну түшүнүү үчүн жетиштүү болмок. Бирок мен эмнени жана кантип кылууну түшүнүүгө аракет кылып жатып, мен автор үчүн иштеген, бирок кандайдыр бир себептерден улам мага иштебей турган көптөгөн колдонмолорду окуп чыктым жана мен тапкан бардык үзүндүлөрдү бул жерге кошууну чечтим. Мен ушундай нерсеге абдан кубанычтамын.

Source: www.habr.com

Комментарий кошуу