Cara terhubung ke VPN perusahaan di Linux menggunakan openconnect dan vpn-slice

Apakah Anda ingin menggunakan Linux di tempat kerja, tetapi VPN perusahaan Anda tidak mengizinkannya? Maka artikel ini mungkin bisa membantu, meski hal ini belum pasti. Saya ingin memperingatkan Anda sebelumnya bahwa saya tidak memahami masalah administrasi jaringan dengan baik, jadi mungkin saja saya melakukan semuanya dengan salah. Di sisi lain, mungkin saja saya bisa menulis panduan sedemikian rupa sehingga dapat dimengerti oleh orang awam, jadi saya menyarankan Anda untuk mencobanya.

Artikel tersebut berisi banyak informasi yang tidak perlu, tetapi tanpa pengetahuan ini saya tidak akan dapat menyelesaikan masalah yang tiba-tiba muncul pada saya dengan pengaturan VPN. Saya pikir siapa pun yang mencoba menggunakan panduan ini akan mengalami masalah yang tidak saya alami, dan saya berharap informasi tambahan ini akan membantu mereka memecahkan masalah ini sendiri.

Sebagian besar perintah yang digunakan dalam panduan ini harus dijalankan melalui sudo, yang telah dihapus agar singkatnya. Mengingat.

Sebagian besar alamat IP telah sangat dikaburkan, jadi jika Anda melihat alamat seperti 435.435.435.435, pasti ada IP normal di sana, khusus untuk kasus Anda.

Saya memiliki Ubuntu 18.04, tetapi menurut saya dengan sedikit perubahan, panduan ini dapat diterapkan ke distribusi lain. Namun, dalam teks ini Linux == Ubuntu.

Cisco Hubungkan

Mereka yang menggunakan Windows atau MacOS dapat terhubung ke VPN perusahaan kami melalui Cisco Connect, yang perlu menentukan alamat gateway dan, setiap kali Anda terhubung, memasukkan kata sandi yang terdiri dari bagian tetap dan kode yang dihasilkan oleh Google Authenticator.

Dalam kasus Linux, saya tidak bisa menjalankan Cisco Connect, tetapi saya berhasil mencari di Google rekomendasi untuk menggunakan openconnect, yang dibuat khusus untuk menggantikan Cisco Connect.

Koneksi terbuka

Secara teori, Ubuntu memiliki antarmuka grafis khusus untuk openconnect, tetapi itu tidak berhasil untuk saya. Mungkin itu menjadi lebih baik.

Di Ubuntu, openconnect diinstal dari manajer paket.

apt install openconnect

Segera setelah instalasi, Anda dapat mencoba menyambung ke VPN

openconnect --user poxvuibr vpn.evilcorp.com

vpn.evilcorp.com adalah alamat VPN fiktif
poxvuibr - nama pengguna fiktif

openconnect akan meminta Anda memasukkan kata sandi, yang, izinkan saya mengingatkan Anda, terdiri dari bagian tetap dan kode dari Google Authenticator, dan kemudian akan mencoba menyambung ke vpn. Jika berhasil, selamat, Anda dapat melewati bagian tengah dengan aman, yang sangat menyusahkan, dan beralih ke poin tentang openconnect yang berjalan di latar belakang. Jika tidak berhasil, Anda dapat melanjutkan. Meskipun jika berhasil saat menghubungkan, misalnya, dari Wi-Fi tamu di tempat kerja, mungkin masih terlalu dini untuk bersukacita; Anda harus mencoba mengulangi prosedur ini dari rumah.

Sertifikat

Ada kemungkinan besar tidak ada yang dimulai, dan keluaran openconnect akan terlihat seperti ini:

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

Di satu sisi, hal ini tidak menyenangkan, karena tidak ada koneksi ke VPN, namun di sisi lain, cara mengatasi masalah ini pada prinsipnya sudah jelas.

Di sini server mengirimi kami sertifikat, yang dengannya kami dapat menentukan bahwa koneksi dibuat ke server perusahaan asli kami, dan bukan ke penipu jahat, dan sertifikat ini tidak diketahui oleh sistem. Dan oleh karena itu dia tidak dapat memeriksa apakah server tersebut asli atau tidak. Jadi, untuk berjaga-jaga, itu berhenti bekerja.

Agar openconnect dapat terhubung ke server, Anda perlu memberi tahu secara eksplisit sertifikat mana yang harus berasal dari server VPN menggunakan kunci β€”servercert

Dan Anda dapat mengetahui sertifikat mana yang dikirimkan server kepada kami langsung dari apa yang openconnect cetak. Ini dari bagian ini:

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

Dengan perintah ini Anda dapat mencoba menyambung kembali

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

Mungkin sekarang sudah berhasil, lalu Anda bisa melanjutkan hingga akhir. Tapi secara pribadi, Ubuntu menunjukkan kepada saya buah ara dalam bentuk ini

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

/jalankan/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 akan menyelesaikannya, tetapi Anda tidak akan bisa pergi ke sana. Alamat seperti jira.evilcorp.com tidak terselesaikan sama sekali.

Apa yang terjadi di sini tidak jelas bagi saya. Namun percobaan menunjukkan bahwa jika Anda menambahkan baris ke /etc/resolv.conf

nameserver 192.168.430.534

maka alamat-alamat di dalam VPN akan mulai terselesaikan secara ajaib dan Anda dapat menelusurinya, yaitu, apa yang dicari DNS untuk menyelesaikan alamat-alamat tersebut terlihat secara spesifik di /etc/resolv.conf, dan bukan di tempat lain.

Anda dapat memverifikasi bahwa ada koneksi ke VPN dan berfungsi tanpa membuat perubahan apa pun pada /etc/resolv.conf; untuk melakukan ini, cukup masukkan di browser bukan nama simbolis sumber daya dari VPN, tetapi alamat IP-nya

Akibatnya timbul dua permasalahan

  • Saat menyambung ke VPN, DNS-nya tidak diambil
  • semua lalu lintas melewati VPN, yang tidak mengizinkan akses ke Internet

Saya akan memberi tahu Anda apa yang harus dilakukan sekarang, tetapi pertama-tama, sedikit otomatisasi.

Entri otomatis bagian kata sandi yang tetap

Saat ini, kemungkinan besar Anda sudah memasukkan kata sandi setidaknya lima kali dan prosedur ini telah membuat Anda lelah. Pertama, karena kata sandinya panjang, dan kedua, karena saat memasukkannya Anda harus memasukkannya dalam jangka waktu yang tetap

Solusi akhir untuk masalah ini tidak disertakan dalam artikel, namun Anda dapat memastikan bahwa bagian kata sandi yang tetap tidak harus dimasukkan berkali-kali.

Mari kita asumsikan bahwa bagian tetap dari kata sandi adalah kata sandi tetap, dan bagian dari Google Authenticator adalah 567. Seluruh kata sandi dapat diteruskan ke openconnect melalui input standar menggunakan argumen --passwd-on-stdin.

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

Sekarang Anda dapat terus-menerus kembali ke perintah yang terakhir dimasukkan dan hanya mengubah sebagian Google Authenticator di sana.

VPN perusahaan tidak mengizinkan Anda menjelajahi Internet.

Secara umum, tidak terlalu merepotkan bila Anda harus menggunakan komputer terpisah untuk mengakses Habr. Ketidakmampuan untuk menyalin-menempel dari stackoverfow umumnya dapat melumpuhkan pekerjaan, sehingga perlu dilakukan sesuatu.

Kita perlu mengaturnya sedemikian rupa sehingga ketika Anda perlu mengakses sumber daya dari jaringan internal, Linux masuk ke VPN, dan ketika Anda perlu pergi ke Habr, ia masuk ke Internet.

openconnect, setelah meluncurkan dan membuat koneksi dengan vpn, menjalankan skrip khusus, yang terletak di /usr/share/vpnc-scripts/vpnc-script. Beberapa variabel diteruskan ke skrip sebagai masukan, dan skrip tersebut mengonfigurasi VPN. Sayangnya, saya tidak tahu cara membagi arus lalu lintas antara VPN perusahaan dan seluruh Internet menggunakan skrip asli.

Rupanya, utilitas vpn-slice dikembangkan khusus untuk orang-orang seperti saya, yang memungkinkan Anda mengirimkan lalu lintas melalui dua saluran tanpa menari dengan rebana. Artinya, Anda harus menari, tetapi Anda tidak harus menjadi dukun.

Pemisahan lalu lintas menggunakan vpn-slice

Pertama, Anda harus menginstal vpn-slice, Anda harus memikirkannya sendiri. Jika ada pertanyaan di kolom komentar, saya akan menulis postingan tersendiri tentang ini. Tapi ini adalah program Python biasa, jadi seharusnya tidak ada kesulitan. Saya menginstal menggunakan virtualenv.

Dan kemudian utilitas harus diterapkan, menggunakan sakelar -script, yang menunjukkan ke openconnect bahwa alih-alih skrip standar, Anda perlu menggunakan 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 

--script meneruskan string dengan perintah yang perlu dipanggil alih-alih skrip. ./bin/vpn-slice - jalur ke file executable vpn-slice 192.168.430.0/24 - topeng alamat yang akan dituju di vpn. Yang kami maksud di sini adalah jika alamat dimulai dengan 192.168.430, maka sumber daya dengan alamat ini perlu dicari di dalam VPN

Situasinya kini hampir normal. Hampir. Sekarang Anda dapat pergi ke Habr dan Anda dapat pergi ke sumber daya intra-perusahaan dengan ip, tetapi Anda tidak dapat pergi ke sumber daya intra-perusahaan dengan nama simbolis. Jika Anda menentukan kecocokan antara nama simbolis dan alamat di host, semuanya akan berfungsi. Dan bekerja sampai ip berubah. Linux sekarang dapat mengakses Internet atau intranet, tergantung pada IP. Namun DNS non-perusahaan tetap digunakan untuk menentukan alamat.

Masalahnya juga dapat memanifestasikan dirinya dalam bentuk ini - semuanya baik-baik saja di tempat kerja, tetapi di rumah Anda hanya dapat mengakses sumber daya internal perusahaan melalui IP. Ini karena ketika Anda terhubung ke Wi-Fi perusahaan, DNS perusahaan juga digunakan, dan alamat simbolis dari VPN diselesaikan di dalamnya, meskipun faktanya masih tidak mungkin untuk pergi ke alamat tersebut tanpa menggunakan VPN.

Modifikasi otomatis file host

Jika vpn-slice ditanya dengan sopan, maka setelah menaikkan VPN, ia dapat membuka DNS-nya, menemukan alamat IP sumber daya yang diperlukan di sana dengan nama simbolisnya dan memasukkannya ke dalam host. Setelah VPN dinonaktifkan, alamat-alamat ini akan dihapus dari host. Untuk melakukan ini, Anda perlu meneruskan nama simbolis ke vpn-slice sebagai argumen. Seperti ini.

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 

Sekarang semuanya harus berfungsi baik di kantor maupun di pantai.

Cari alamat semua subdomain di DNS yang diberikan oleh VPN

Jika hanya ada sedikit alamat dalam jaringan, maka pendekatan memodifikasi file host secara otomatis berfungsi dengan baik. Tetapi jika ada banyak sumber daya di jaringan, maka Anda harus terus-menerus menambahkan baris seperti zoidberg.test.evilcorp.com ke skrip zoidberg adalah nama salah satu bangku tes.

Namun kini kita sedikit memahami mengapa kebutuhan ini bisa dihilangkan.

Jika, setelah menaikkan VPN, Anda mencari di /etc/hosts, Anda dapat melihat baris ini

192.168.430.534 dns0.tun0 # vpn-slice-tun0 DIBUAT OTOMATIS

Dan baris baru telah ditambahkan ke resolv.conf. Singkatnya, vpn-slice entah bagaimana menentukan di mana server dns untuk vpn berada.

Sekarang kita perlu memastikan bahwa untuk mengetahui alamat IP dari nama domain yang diakhiri dengan evilcorp.com, Linux masuk ke DNS perusahaan, dan jika diperlukan sesuatu yang lain, maka ke default.

Saya mencari di Google selama beberapa waktu dan menemukan bahwa fungsi seperti itu sudah tersedia di Ubuntu. Ini berarti kemampuan untuk menggunakan server DNS lokal dnsmasq untuk menyelesaikan nama.

Artinya, Anda dapat memastikan bahwa Linux selalu masuk ke server DNS lokal untuk mendapatkan alamat IP, yang selanjutnya, bergantung pada nama domain, akan mencari IP di server DNS eksternal yang sesuai.

Untuk mengelola segala sesuatu yang berhubungan dengan jaringan dan koneksi jaringan, Ubuntu menggunakan NetworkManager, dan antarmuka grafis untuk memilih, misalnya, koneksi Wi-Fi hanyalah ujung depannya.

Kita perlu mendaki konfigurasinya.

  1. Buat file di /etc/NetworkManager/dnsmasq.d/evilcorp

alamat=/.evilcorp.com/192.168.430.534

Perhatikan titik di depan evilcorp. Ini menandakan dnsmasq bahwa semua subdomain evilcorp.com harus dicari di dns perusahaan.

  1. Beritahu NetworkManager untuk menggunakan dnsmasq untuk resolusi nama

Konfigurasi manajer jaringan terletak di /etc/NetworkManager/NetworkManager.conf Anda perlu menambahkan di sana:

[utama] dns=dnsmasq

  1. Mulai ulang Manajer Jaringan

service network-manager restart

Sekarang, setelah terhubung ke VPN menggunakan openconnect dan vpn-slice, ip akan ditentukan secara normal, bahkan jika Anda tidak menambahkan alamat simbolis ke argumen vpnslice.

Cara mengakses layanan individual melalui VPN

Setelah saya berhasil terhubung ke VPN, saya sangat senang selama dua hari, dan ternyata jika saya terhubung ke VPN dari luar jaringan kantor, maka mail tidak berfungsi. Gejalanya sudah tidak asing lagi bukan?

Email kami terletak di mail.publicevilcorp.com, yang berarti tidak termasuk dalam aturan dnsmasq dan alamat server email dicari melalui DNS publik.

Nah, kantornya masih menggunakan DNS yang berisi alamat ini. Itulah yang saya pikirkan. Faktanya, setelah menambahkan baris ke dnsmasq

alamat=/mail.publicevilcorp.com/192.168.430.534

situasinya tidak berubah sama sekali. ip tetap sama. Saya harus pergi bekerja.

Dan baru kemudian, ketika saya mempelajari situasinya lebih dalam dan memahami sedikit masalahnya, seorang orang pintar memberi tahu saya cara menyelesaikannya. Penting untuk terhubung ke server email tidak begitu saja, tetapi melalui VPN

Saya menggunakan vpn-slice untuk menelusuri VPN ke alamat yang dimulai dengan 192.168.430. Dan server email tidak hanya memiliki alamat simbolis yang bukan merupakan subdomain dari evilcorp, tetapi juga tidak memiliki alamat IP yang dimulai dengan 192.168.430. Dan tentu saja dia tidak mengizinkan siapa pun dari jaringan umum untuk mendatanginya.

Agar Linux dapat melalui VPN dan ke server email, Anda perlu menambahkannya ke vpn-slice juga. Katakanlah alamat pengirimnya adalah 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 

Skrip untuk meningkatkan VPN dengan satu argumen

Semua ini, tentu saja, sangat tidak nyaman. Ya, Anda dapat menyimpan teks ke file dan menyalin-menempelkannya ke konsol alih-alih mengetiknya dengan tangan, tetapi itu tetap tidak menyenangkan. Untuk mempermudah prosesnya, Anda bisa membungkus perintah tersebut dalam sebuah script yang akan ditempatkan di PATH. Dan selanjutnya Anda hanya perlu memasukkan kode yang diterima dari 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 

Jika Anda meletakkan skrip di connect~evilcorp~ Anda cukup menulis di konsol

connect_evil_corp 567987

Namun sekarang Anda masih harus menjaga konsol tempat openconnect berjalan tetap terbuka karena alasan tertentu

Menjalankan openconnect di latar belakang

Untungnya, penulis openconnect memperhatikan kami dan menambahkan kunci khusus ke program -background, yang membuat program bekerja di latar belakang setelah diluncurkan. Jika Anda menjalankannya seperti ini, Anda dapat menutup konsol setelah peluncuran

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

Sekarang tidak jelas ke mana perginya log tersebut. Secara umum, kami tidak terlalu membutuhkan log, tapi Anda tidak pernah tahu. openconnect dapat mengarahkan mereka ke syslog, di mana mereka akan tetap aman dan terlindungi. Anda perlu menambahkan saklar –syslog ke perintah

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

Jadi, ternyata openconnect berfungsi di latar belakang dan tidak mengganggu siapa pun, tetapi tidak jelas bagaimana cara menghentikannya. Artinya, Anda tentu saja dapat memfilter keluaran ps menggunakan grep dan mencari proses yang namanya mengandung openconnect, tetapi ini membosankan. Terima kasih kepada penulis yang memikirkan hal ini juga. Openconnect memiliki file kunci -pid, yang dengannya Anda dapat menginstruksikan openconnect untuk menulis pengidentifikasi prosesnya ke sebuah file.

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

Sekarang Anda selalu dapat menghentikan proses dengan perintah

kill $(cat ~/vpn-pid)

Jika tidak ada proses, kill akan mengutuk, tetapi tidak akan menimbulkan kesalahan. Jika file tersebut tidak ada, maka tidak ada hal buruk yang akan terjadi, sehingga Anda dapat dengan aman menghentikan proses di baris pertama skrip.

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

Sekarang Anda dapat menyalakan komputer Anda, membuka konsol dan menjalankan perintah, meneruskan kode dari Google Authenticator. Konsol kemudian dapat dipasang.

Tanpa potongan VPN. Alih-alih kata penutup

Ternyata sangat sulit untuk memahami bagaimana hidup tanpa VPN-slice. Saya harus banyak membaca dan mencari di Google. Untungnya, setelah menghabiskan begitu banyak waktu dengan suatu masalah, manual teknis dan bahkan man openconnect terbaca seperti novel yang menarik.

Hasilnya, saya menemukan bahwa vpn-slice, seperti skrip asli, mengubah tabel perutean menjadi jaringan terpisah.

Tabel perutean

Sederhananya, ini adalah tabel di kolom pertama yang berisi alamat mana yang ingin dilalui Linux, dan di kolom kedua adaptor jaringan mana yang harus dilalui di alamat ini. Sebenarnya penuturnya lebih banyak, namun hal itu tidak mengubah esensinya.

Untuk melihat tabel routing, Anda perlu menjalankan perintah ip rute

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 

Di sini, setiap baris bertanggung jawab ke mana Anda harus pergi untuk mengirim pesan ke alamat tertentu. Yang pertama adalah deskripsi di mana alamat harus dimulai. Untuk memahami cara menentukan bahwa 192.168.0.0/16 berarti alamat harus dimulai dengan 192.168, Anda perlu mencari di Google apa itu masker alamat IP. Setelah dev ada nama adaptor yang menjadi tujuan pengiriman pesan.

Untuk VPN, Linux membuat adaptor virtual - tun0. Jalur ini memastikan bahwa lalu lintas untuk semua alamat yang dimulai dengan 192.168 melewatinya

192.168.0.0/16 dev tun0 scope link 

Anda juga dapat melihat keadaan tabel perutean saat ini menggunakan perintah rute -n (Alamat IP dianonimkan dengan cerdik) Perintah ini memberikan hasil dalam bentuk yang berbeda dan umumnya tidak digunakan lagi, tetapi keluarannya sering ditemukan dalam manual di Internet dan Anda harus bisa membacanya.

Dimana alamat IP untuk suatu rute harus dimulai dapat dipahami dari kombinasi kolom Tujuan dan Genmask. Bagian alamat IP yang sesuai dengan angka 255 di Genmask diperhitungkan, tetapi bagian yang ada 0 tidak diperhitungkan. Artinya, kombinasi Destination 192.168.0.0 dan Genmask 255.255.255.0 berarti jika alamat dimulai dengan 192.168.0, maka permintaan ke alamat tersebut akan melalui rute ini. Dan jika Tujuan 192.168.0.0 tetapi Genmask 255.255.0.0, maka permintaan ke alamat yang dimulai dengan 192.168 akan melalui rute ini

Untuk mengetahui apa sebenarnya fungsi vpn-slice, saya memutuskan untuk melihat status tabel sebelum dan sesudah

Sebelum menyalakan VPN, keadaannya seperti ini

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

Setelah memanggil openconnect tanpa vpn-slice menjadi seperti ini

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

Dan setelah memanggil openconnect dalam kombinasi dengan vpn-slice seperti ini

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

Terlihat bahwa jika Anda tidak menggunakan vpn-slice, maka openconnect secara eksplisit menulis bahwa semua alamat, kecuali yang disebutkan secara khusus, harus diakses melalui vpn.

Di sini:

0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 tun0

Di sana, di sebelahnya, jalur lain segera ditunjukkan, yang harus digunakan jika alamat yang coba dilewati Linux tidak cocok dengan mask mana pun dari tabel.

0.0.0.0         222.222.222.1   0.0.0.0         UG    600    0        0 wlp3s0

Sudah tertulis di sini bahwa dalam hal ini Anda perlu menggunakan adaptor Wi-Fi standar.

Saya yakin jalur VPN digunakan karena merupakan jalur pertama dalam tabel perutean.

Dan secara teoritis, jika Anda menghapus jalur default ini dari tabel perutean, maka bersama dengan dnsmasq openconnect akan memastikan operasi normal.

Saya mencoba

route del default

Dan semuanya berhasil.

Merutekan permintaan ke server email tanpa vpn-slice

Tapi saya juga punya server email dengan alamat 555.555.555.555, yang juga perlu diakses melalui VPN. Rute menuju ke sana juga perlu ditambahkan secara manual.

ip route add 555.555.555.555 via dev tun0

Dan sekarang semuanya baik-baik saja. Jadi Anda dapat melakukannya tanpa vpn-slice, tetapi Anda harus mengetahui dengan baik apa yang Anda lakukan. Saya sekarang berpikir untuk menambahkan ke baris terakhir skrip openconnect asli penghapusan rute default dan menambahkan rute untuk mailer setelah terhubung ke vpn, hanya agar ada lebih sedikit bagian yang bergerak di sepeda saya.

Mungkin, kata penutup ini cukup bagi seseorang untuk memahami cara mengatur VPN. Tetapi ketika saya mencoba memahami apa dan bagaimana melakukannya, saya membaca cukup banyak panduan yang cocok untuk penulis, tetapi karena alasan tertentu tidak berhasil untuk saya, dan saya memutuskan untuk menambahkan di sini semua bagian yang saya temukan. Saya akan sangat senang dengan hal seperti itu.

Sumber: www.habr.com

Tambah komentar