Openconnect болон vpn-slice ашиглан Linux дээрх корпорацийн VPN-тэй хэрхэн холбогдох вэ

Та ажил дээрээ Линукс ашиглахыг хүсэж байна уу, гэхдээ таны корпорацийн VPN танд зөвшөөрөхгүй байна уу? Энэ нь тодорхойгүй ч гэсэн энэ нийтлэл тус болно. Сүлжээний удирдлагын асуудлыг сайн ойлгохгүй байгаа тул бүх зүйлийг буруу хийсэн байж болзошгүйг урьдчилан анхааруулж байна. Нөгөө талаар жирийн хүмүүст ойлгомжтой байхаар гарын авлага бичиж болох ч юм билүү, тэгвэл туршаад үзээрэй гэж зөвлөе.

Нийтлэлд маш олон шаардлагагүй мэдээллийг агуулсан боловч энэ мэдлэггүйгээр би VPN-ийг тохируулахтай холбоотой гэнэт гарч ирсэн асуудлуудыг шийдэж чадахгүй байх байсан. Энэхүү гарын авлагыг ашиглахыг оролдсон хүн бүр надад тохиолдож байгаагүй асуудлуудтай тулгарах болно гэж бодож байна, энэ нэмэлт мэдээлэл нь эдгээр асуудлыг бие даан шийдвэрлэхэд тусална гэж найдаж байна.

Энэхүү гарын авлагад ашигласан ихэнх командуудыг sudo-ээр дамжуулан ажиллуулах шаардлагатай бөгөөд үүнийг товчилсон. Санаарай.

Ихэнх IP хаягууд маш бүдэгэрсэн тул хэрэв та 435.435.435.435 гэх мэт хаягийг харвал тэнд таны тохиолдлын хувьд энгийн IP байх ёстой.

Би Ubuntu 18.04-тэй, гэхдээ бага зэрэг өөрчлөлт хийснээр энэ гарын авлагыг бусад түгээлтэд ашиглаж болно гэж бодож байна. Гэхдээ энэ бичвэрт Linux == Ubuntu.

Cisco Connect

Windows эсвэл MacOS үйлдлийн системтэй хүмүүс Cisco Connect-ээр дамжуулан манай байгууллагын VPN-д холбогдох боломжтой бөгөөд үүнд гарцын хаягийг зааж өгөх шаардлагатай бөгөөд холбогдох бүртээ Google Authenticator-ийн үүсгэсэн тогтмол хэсэг болон кодоос бүрдэх нууц үгээ оруулна.

Линуксийн хувьд би Cisco Connect-ийг ажиллуулж чадаагүй ч Cisco Connect-ийг солихын тулд тусгайлан гаргасан openconnect-ийг ашиглах зөвлөмжийг Google-ээс олж чадсан.

Нээлттэй холболт

Онолын хувьд 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-аас хуулж буулгах боломжгүй байгаа нь ажлыг ерөнхийд нь саажилттай болгодог тул ямар нэг зүйл хийх хэрэгтэй.

Бид үүнийг ямар нэгэн байдлаар зохион байгуулах хэрэгтэй бөгөөд ингэснээр та дотоод сүлжээн дэх нөөцөд хандах шаардлагатай үед Линукс VPN руу, Хабр руу очих шаардлагатай бол интернет рүү ордог.

openconnect нь vpn-ийг ажиллуулж, холболт үүсгэсний дараа /usr/share/vpnc-scripts/vpnc-script-д байрлах тусгай скриптийг ажиллуулдаг. Зарим хувьсагчийг скриптэд оролт болгон дамжуулдаг бөгөөд энэ нь VPN-ийг тохируулдаг. Харамсалтай нь би уугуул скрипт ашиглан корпорацийн VPN болон интернетийн бусад хэсгүүдийн хооронд замын хөдөлгөөний урсгалыг хэрхэн хуваахыг олж чадаагүй.

Vpn-slice хэрэглүүрийг тусгайлан над шиг хүмүүст зориулан бүтээсэн бололтой, хэнгэрэг барин бүжиглэхгүйгээр урсгалыг хоёр сувгаар дамжуулах боломжтой. Та бүжиглэх хэрэгтэй болно, гэхдээ чи бөө байх албагүй.

vpn-slice ашиглан замын хөдөлгөөний тусгаарлалт

Юуны өмнө та vpn-slice-г суулгах хэрэгтэй бөгөөд үүнийг өөрөө тодорхойлох хэрэгтэй болно. Хэрэв сэтгэгдэл дээр асуулт байвал би энэ талаар тусдаа нийтлэл бичих болно. Гэхдээ энэ бол ердийн Python програм тул ямар ч бэрхшээл гарах ёсгүй. Би virtualenv ашиглан суулгасан.

Дараа нь стандарт скриптийн оронд vpn-slice-г ашиглах хэрэгтэйг харуулж нээхийн тулд -script шилжүүлэгчийг ашиглан уг хэрэгслийг ашиглах ёстой.

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

--script нь скриптийн оронд дуудах шаардлагатай команд бүхий мөрийг дамжуулдаг. ./bin/vpn-slice - vpn-slice гүйцэтгэх боломжтой файлын зам 192.168.430.0/24 - vpn дээр очих хаягуудын маск. Хэрэв хаяг нь 192.168.430-ээр эхэлсэн бол энэ хаягтай нөөцийг VPN дотроос хайх шаардлагатай гэсэн үг.

Одоо нөхцөл байдал бараг хэвийн байх ёстой. Бараг л. Одоо та Habr руу очиж, корпорацийн дотоод нөөц рүү ip-ээр очиж болно, гэхдээ та симбол нэрээр байгууллагын дотоод нөөц рүү очих боломжгүй. Хэрэв та хостууд дахь бэлгэдлийн нэр болон хаягийн хооронд тохирохыг зааж өгвөл бүх зүйл ажиллах ёстой. Мөн IP өөрчлөгдөх хүртэл ажиллана. Линукс одоо 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 АВТОБҮТЭЭГДСЭН

Мөн resolv.conf дээр шинэ мөр нэмэгдсэн. Товчхондоо vpn-slice нь vpn-д зориулсан dns сервер хаана байрлаж байгааг ямар нэгэн байдлаар тодорхойлсон.

Одоо бид evilcorp.com-ээр төгссөн домэйн нэрний IP хаягийг олж мэдэхийн тулд Линукс нь корпорацийн DNS руу, хэрэв өөр зүйл шаардлагатай бол анхдагч хаяг руу ордог эсэхийг шалгах хэрэгтэй.

Би нэлээн удаан Google-д хайгаад ийм функц Ubuntu дээр байдаг гэдгийг олж мэдсэн. Энэ нь нэрийг шийдвэрлэхийн тулд локал DNS сервер dnsmasq ашиглах боломжтой гэсэн үг юм.

Өөрөөр хэлбэл, та Линукс нь үргэлж локал DNS сервер рүү IP хаяг руу очдог бөгөөд энэ нь эргээд домэйн нэрээс хамааран харгалзах гадаад DNS серверээс IP хайх болно.

Сүлжээ болон сүлжээний холболттой холбоотой бүх зүйлийг удирдахын тулд Ubuntu нь NetworkManager-ийг ашигладаг бөгөөд жишээ нь Wi-Fi холболтыг сонгох график интерфэйс нь зөвхөн урд талын хэсэг юм.

Бид түүний тохиргоонд авирах хэрэгтэй болно.

  1. /etc/NetworkManager/dnsmasq.d/evilcorp дотор файл үүсгэ

хаяг=/.evilcorp.com/192.168.430.534

Evilcorp-ийн өмнөх цэгийг анхаарч үзээрэй. Энэ нь dnsmasq-д evilcorp.com-ын бүх дэд домайныг корпорацийн dns-ээс хайх ёстой гэсэн дохио өгдөг.

  1. Нэрийг шийдвэрлэхийн тулд dnsmasq ашиглахыг NetworkManager-д хэлээрэй

Сүлжээний менежерийн тохиргоо нь /etc/NetworkManager/NetworkManager.conf дотор байрладаг. Та энд нэмэх хэрэгтэй:

[үндсэн] dns = dnsmasq

  1. NetworkManager-ийг дахин эхлүүлнэ үү

service network-manager restart

Одоо openconnect болон vpn-slice ашиглан VPN-д холбогдсоны дараа vpnslice-ийн аргументуудад симбол хаяг нэмээгүй ч гэсэн ip хэвийн тодорхойлогдох болно.

VPN-ээр дамжуулан хувь хүний ​​үйлчилгээнд хэрхэн хандах вэ

VPN-д холбогдож чадсаны дараа би хоёр өдрийн турш маш их баяртай байсан бөгөөд хэрэв би оффисын сүлжээнээс гадуур VPN-тэй холбогдвол шуудан ажиллахгүй болсон. Шинж тэмдэг нь танил, тийм үү?

Манай мэйл mail.publicevilcorp.com дээр байрладаг бөгөөд энэ нь dnsmasq-ийн дүрэмд хамаарахгүй бөгөөд шуудангийн серверийн хаягийг нийтийн DNS-ээр хайдаг гэсэн үг юм.

За, оффис нь энэ хаягийг агуулсан DNS-г ашигладаг хэвээр байна. Би тэгж бодсон. Үнэн хэрэгтээ, dnsmasq-д мөрийг нэмсний дараа

хаяг=/mail.publicevilcorp.com/192.168.430.534

нөхцөл байдал огт өөрчлөгдөөгүй. ip хэвээрээ байсан. Би ажилдаа явах ёстой байсан.

Тэгээд л сүүлдээ нөхцөл байдлыг гүнзгийрүүлж, асуудлыг бага зэрэг ойлгоход нэг ухаалаг хүн яаж шийдэхийг надад хэлсэн. Энэ нь шуудангийн серверт зөвхөн тийм биш, харин VPN-ээр холбогдох шаардлагатай байсан

Би VPN-ээр 192.168.430-р эхэлсэн хаягууд руу шилжихийн тулд vpn-slice ашигладаг. Мөн мэйл сервер нь зөвхөн evilcorp-ийн дэд домайн биш симбол хаягтай төдийгүй 192.168.430-ээр эхэлсэн IP хаяггүй. Мэдээжийн хэрэг, тэр ерөнхий сүлжээнээс хэнийг ч түүн дээр ирэхийг зөвшөөрдөггүй.

Линукс нь VPN болон шуудангийн сервер рүү шилжихийн тулд та үүнийг vpn-slice дээр нэмэх хэрэгтэй. Захиалагчийн хаягийг 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 шилжүүлэгчийг нэмэх хэрэгтэй

#!/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-зүсмэл нь уугуул скрипт шиг чиглүүлэлтийн хүснэгтийг тусдаа сүлжээ болгон өөрчилдөг болохыг олж мэдсэн.

Чиглүүлэлтийн хүснэгт

Энгийнээр хэлэхэд, энэ нь эхний баганад байгаа хүснэгтэд Линуксийн орохыг хүссэн хаяг юунаас эхлэх ёстой, хоёр дахь баганад энэ хаягаар ямар сүлжээний адаптер дамжих ёстой вэ. Үнэн хэрэгтээ илүү олон илтгэгчид байгаа боловч энэ нь мөн чанарыг өөрчилдөггүй.

Чиглүүлэлтийн хүснэгтийг үзэхийн тулд та 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-тэй бол тооцдоггүй. Өөрөөр хэлбэл, Destination 192.168.0.0 ба Genmask 255.255.255.0 хослол нь хэрэв хаяг 192.168.0-ээр эхэлсэн бол түүнд хандах хүсэлт энэ замаар явагдана гэсэн үг юм. Хэрэв очих газар 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

vpn-sliceгүйгээр openconnect руу залгасны дараа ийм болсон

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-slice-тэй хослуулан иймэрхүү

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 ашигладаггүй бол тусгайлан зааснаас бусад бүх хаяг руу vpn-ээр хандах ёстой гэж openconnect тодорхой бичсэн байгаа нь харагдаж байна.

Яг энд:

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

Энэ тохиолдолд та стандарт 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-зүсмэлгүйгээр хийж болно, гэхдээ та юу хийж байгаагаа сайн мэдэх хэрэгтэй. Би одоо үндсэн нээлттэй холболтын скриптийн сүүлчийн мөрөнд анхдагч маршрутыг хасч, vpn-д холбогдсоны дараа шуудангийн чиглүүрийг нэмэх талаар бодож байна, ингэснээр миний дугуйнд хөдөлгөөнт хэсэг цөөн байх болно.

Магадгүй хэн нэгэн VPN-г хэрхэн тохируулахыг ойлгоход энэ дараах үг хангалттай байх болно. Гэхдээ би юу хийх, яаж хийхийг ойлгохыг хичээж байхдаа би зохиогчид тохирох олон тооны гарын авлагыг уншсан боловч зарим шалтгааны улмаас надад тохирохгүй байгаа тул би олсон бүх хэсгүүдээ энд нэмэхээр шийдсэн. Иймэрхүү зүйлд би маш их баяртай байх болно.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх