Untuk siapa artikel ini?
Artikel ini mungkin menarik bagi administrator sistem yang dihadapkan dengan tugas menciptakan layanan pekerjaan "satu kali".
Prolog
Departemen dukungan TI dari perusahaan muda yang berkembang secara dinamis dengan jaringan regional kecil diminta untuk mengatur "stasiun layanan mandiri" untuk digunakan oleh klien eksternal mereka. Data stasiun seharusnya digunakan untuk pendaftaran di portal eksternal perusahaan, mengunduh data dari perangkat eksternal, dan bekerja dengan portal pemerintah.
Aspek penting adalah kenyataan bahwa sebagian besar perangkat lunak "diasah" untuk MS Windows (misalnya, "Deklarasi"), dan meskipun ada gerakan menuju format terbuka, MS Office tetap menjadi standar dominan dalam pertukaran dokumen elektronik. Dengan demikian, kami tidak dapat menolak MS Windows saat memecahkan masalah ini.
Masalah utama adalah kemungkinan mengumpulkan berbagai data dari sesi pengguna, yang dapat menyebabkan kebocoran ke pihak ketiga.
Situasi ini telah mengecewakan MFC . Tetapi tidak seperti MFC (lembaga otonom negara) semu-yudisial, organisasi non-negara akan dihukum lebih banyak karena kekurangan tersebut. Masalah kritis berikutnya adalah persyaratan untuk bekerja dengan media penyimpanan eksternal, yang, dengan segala cara, akan ada banyak malware jahat. Kemungkinan masuknya malware dari Internet dianggap kecil kemungkinannya karena pembatasan akses ke Internet melalui daftar putih alamat. Karyawan dari departemen lain bergabung dalam mengerjakan persyaratan, membuat persyaratan dan keinginan mereka, persyaratan akhir tampak sebagai berikut:
Persyaratan IS- Setelah digunakan, semua data pengguna (termasuk file sementara dan kunci registri) harus dihapus.
- Semua proses yang diluncurkan oleh pengguna harus diselesaikan pada akhir pekerjaan.
- Akses internet melalui daftar alamat putih.
- Batasan pada kemampuan untuk menjalankan kode pihak ketiga.
- Jika sesi idle selama lebih dari 5 menit, sesi harus diakhiri secara otomatis, stasiun harus melakukan pembersihan.
Persyaratan pelanggan- Jumlah stasiun klien per cabang tidak lebih dari 4.
- Waktu tunggu minimum untuk kesiapan sistem, mulai dari saat "duduk di kursi" hingga mulai bekerja dengan perangkat lunak klien.
- Kemampuan untuk menghubungkan perangkat periferal (pemindai, flash drive) secara langsung dari situs instalasi "stasiun swalayan."
- Keinginan pelanggan
- Peragaan materi iklan (gambar) pada saat penutupan kompleks.
Tepung kreativitas
Setelah bermain cukup dengan Windows livecd, kami sampai pada kesimpulan dengan suara bulat bahwa solusi yang dihasilkan tidak memenuhi setidaknya 3 poin kritis. Mereka dimuat untuk waktu yang lama, atau tidak cukup hidup, atau kustomisasi mereka dikaitkan dengan rasa sakit liar. Mungkin kami mencari dengan buruk, dan Anda dapat menyarankan satu set beberapa alat, saya akan berterima kasih.
Lebih jauh kami mulai melihat ke arah VDI, tetapi untuk tugas ini, sebagian besar solusi terlalu mahal atau membutuhkan perhatian. Dan saya ingin alat sederhana dengan jumlah minimal sihir, sebagian besar masalah yang dapat diselesaikan dengan hanya me-reboot / memulai kembali layanan. Untungnya, kami memiliki peralatan server, kelas low-end di cabang-cabang, dari layanan yang dinonaktifkan, yang dapat kami gunakan untuk basis teknologi.
Apa hasilnya? Tapi saya tidak akan bisa memberi tahu Anda apa yang terjadi pada akhirnya, karena NDA, tetapi dalam proses pencarian, kami mengembangkan skema menarik yang menunjukkan dirinya dengan baik dalam tes laboratorium, meskipun tidak masuk ke seri.
Beberapa penafian: penulis tidak mengklaim bahwa solusi yang diusulkan sepenuhnya menyelesaikan semua tugas dan melakukannya secara sukarela dan dengan lagu tersebut. Penulis setuju sebelumnya dengan pernyataan bahwa Sein Englishe sprache adalah zehr schlecht. Karena solusi tidak lagi berkembang, Anda tidak dapat mengandalkan perbaikan bug atau perubahan fungsionalitas, semuanya ada di tangan Anda. Penulis berasumsi bahwa Anda setidaknya sedikit terbiasa dengan KVM dan membaca artikel ulasan tentang protokol Spice, dan Anda bekerja sedikit dengan Centos atau distribusi GNU Linux lainnya.
Pada artikel ini, saya ingin menganalisis tulang punggung dari solusi yang dihasilkan, yaitu interaksi klien dan server dan esensi dari proses pada siklus hidup mesin virtual dalam kerangka solusi yang dimaksud. Jika artikel itu akan menarik bagi publik, saya akan menjelaskan detail penerapan gambar langsung untuk membuat klien tipis berdasarkan Fedora dan menceritakan tentang detail penyetelan mesin virtual dan server KVM untuk mengoptimalkan kinerja dan keamanan.
Jika Anda mengambil kertas berwarna,
Cat, kuas dan lem,
Dan ketangkasan sedikit lebih ...
Anda dapat membuat seratus rubel!
Skema dan deskripsi bangku tes

Semua peralatan terletak di dalam jaringan cabang, hanya saluran Internet yang mati. Secara historis, sudah ada server proxy, tidak ada yang luar biasa. Tetapi ada di atasnya, antara lain, bahwa lalu lintas dari mesin virtual akan disaring (abbr. VM nanti dalam teks). Tidak ada yang mencegah menempatkan layanan ini di server KVM, satu-satunya hal yang perlu Anda perhatikan adalah bagaimana beban dari itu pada subsistem disk berubah.
Stasiun Klien - pada kenyataannya, "stasiun swalayan", "ujung depan" dari layanan kami. Adalah nettop dari Lenovo IdeaCentre. Apa gunanya unit ini? Ya, hampir semua orang, terutama senang dengan sejumlah besar konektor USB dan pembaca kartu di panel depan. Dalam skema kami, kartu SD dengan perlindungan penulisan perangkat keras dimasukkan ke dalam pembaca kartu, di mana gambar langsung yang dimodifikasi dari Fedora 28 direkam. Tentu saja, monitor, keyboard, dan mouse terhubung ke nettop.
Switch - saklar perangkat keras biasa-biasa saja dari tingkat kedua, ada di ruang server dan berkedip dengan lampu. Itu tidak terhubung ke jaringan apa pun kecuali jaringan "stasiun swalayan".
KVM_Server adalah inti dari rangkaian, dalam tes bangku dari Core 2 Quad Q9650 dengan 8 GB RAM, dengan percaya diri menarik 3 mesin virtual Windows 10 pada dirinya sendiri. Subsistem disk - adaptec 3405 2 drive Raid 1 + SSD. Dalam uji coba lapangan Xeon 1220, SSD LSI 9260 + yang lebih serius dengan mudah menarik 5-6 VM. Kami akan mendapatkan server dari layanan pensiunan, tidak akan ada banyak biaya modal. Sistem virtualisasi KVM dengan pool_Vm pool mesin virtual digunakan pada server ini.
Vm adalah mesin virtual, backend dari layanan kami. Ini adalah pekerjaan pengguna.
Enp5s0 adalah antarmuka jaringan yang melihat ke arah jaringan "stasiun swalayan", dhcpd, ntpd, httpd secara langsung, dan xinetd mendengarkan port "sinyal".
Lo0 adalah loopback pseudo-interface. Standar
Spice_console - Suatu hal yang sangat menarik, faktanya adalah bahwa, tidak seperti RDP klasik, ketika Anda memutar bundel protokol KVM + Spice, entitas tambahan muncul - port konsol mesin virtual. Faktanya, dengan menghubungkan ke port TCP ini, kita mendapatkan konsol Vm, tanpa perlu terhubung ke Vm melalui antarmuka jaringannya. Semua interaksi dengan Vm untuk transmisi sinyal, server mengambil alih. Fungsi analog terdekat adalah IPKVM. Yaitu Gambar monitor VM ditransfer ke port ini, data pergerakan mouse ditransmisikan ke sana, dan (paling penting) interaksi melalui protokol Spice memungkinkan Anda mengarahkan perangkat USB ke mesin virtual, seolah-olah perangkat ini terhubung ke Vm sendiri. Diuji untuk flash drive, scanner, webcam.
Kartu jaringan Vnet0, virbr0 dan virtual Vm membentuk jaringan mesin virtual.
Bagaimana cara kerjanya
Dari Stasiun Klien
Stasiun klien melakukan booting dalam mode grafis dari gambar langsung yang dimodifikasi dari Fedora 28, menerima alamat ip oleh dhcp dari ruang alamat jaringan 169.254.24.0/24. Selama proses boot, aturan firewall dibuat yang memungkinkan koneksi ke port server "sinyal" dan "rempah-rempah". Setelah pengunduhan selesai, stasiun menunggu otorisasi dari pengguna Klien. Setelah otorisasi pengguna, manajer desktop "openbox" diluncurkan dan script autostart autostart dijalankan atas nama pengguna yang berwenang. Antara lain, skrip autorun menjalankan skrip remote.sh.
$ HOME / .config / openbox / scripts / remote.sh /etc/client.conf server_ip=169.254.24.1 vdi_signal_port=5905 vdi_spice_port=5906 animation_folder=/usr/share/backgrounds/animation background_folder=/usr/share/backgrounds2/fedora-workstation
Deskripsi variabel file client.conf
server_ip - address KVM_Server
vdi_signal_port - port KVM_Server tempat xinetd "duduk"
vdi_spice_port - port jaringan KVM_Server, dari mana permintaan koneksi akan dialihkan dari klien remote-viewer ke port rempah-rempah dari Vm yang dipilih (detail di bawah)
animation_folder - folder tempat pengambilan gambar untuk animasi omong kosong demonstrasi
background_folder - folder tempat pengambilan gambar untuk presentasi siaga. Lebih lanjut tentang animasi di bagian artikel selanjutnya.
Script remote.sh mengambil pengaturan dari file konfigurasi /etc/client.conf dan menggunakan nc untuk terhubung ke port "vdi_signal_port" dari server KVM dan menerima aliran data dari server, di antaranya ia mengharapkan string "ATURAN DITAMBAHKAN, TERHUBUNG SEKARANG". Ketika baris yang diinginkan diterima, proses remote-viewer dimulai dalam mode kios, membangun koneksi ke port server “vdi_spice_port”. Eksekusi skrip ditangguhkan hingga akhir eksekusi remote-viewer.
Remote-viewer menghubungkan ke port "vdi_spice_port", karena pengalihan di sisi server, sampai ke port "spice_console" dari antarmuka lo0 yaitu ke konsol mesin virtual dan pekerjaan pengguna dilakukan secara langsung. Sambil menunggu koneksi, pengguna ditampilkan animasi omong kosong, dalam bentuk tayangan slide file jpeg, jalur ke direktori dengan gambar ditentukan oleh nilai variabel animation_folder dari file konfigurasi.
Jika koneksi ke port "spice_console" dari mesin virtual terputus, yang menandakan shutdown / reboot mesin virtual (yaitu, akhir sebenarnya dari sesi pengguna), semua proses yang berjalan atas nama pengguna yang sah diakhiri, yang mengarah ke restart lightdm dan kembali ke layar otorisasi .
Dari sisi Server KVM
Pada port "sinyal" kartu jaringan, enp5s0 sedang menunggu koneksi xinetd. Setelah menyambungkan ke port "sinyal", xinetd menjalankan skrip vm_manager.sh tanpa meneruskan parameter input apa pun ke sana dan mengalihkan hasil skrip ke sesi nc di Stasiun Klien.
/etc/xinetd.d/test-server service vdi_signal { port = 5905 socket_type = stream protocol = tcp wait = no user = root server = /home/admin/scripts_vdi_new/vm_manager.sh }
/home/admin/scripts_vdi_new/vm_manager.sh /etc/vm_manager.confsrv_scripts_dir = / home / admin / scripts_vdi_new
srv_pool_size = 4
srv_start_port_pool = 5920
srv_tmp_dir = / tmp / vm_state
base_host = win10_2
input_iface = enp5s0
vdi_spice_port = 5906
count_conn_tryes = 10
Deskripsi variabel dari file konfigurasi vm_manager.conf
srv_scripts_dir - folder lokasi skrip vm_manager.sh, vm_connect.sh, vm_delete.sh, vm_create.sh, vm_clear.sh
srv_pool_size - Ukuran kolam Vm
srv_start_port_pool - port awal, setelah itu port rempah dari konsol mesin virtual akan dimulai
srv_tmp_dir - folder untuk file sementara
base_host - base Vm (gambar emas) dari mana klon Vm akan dibuat ke dalam kumpulan
input_iface - antarmuka jaringan server, mencari ke Stasiun Klien
vdi_spice_port - port jaringan server dari mana permintaan koneksi akan dialihkan dari klien remote-viewer ke port rempah-rempah dari Vm yang dipilih
count_conn_tryes - timer tunggu, setelah itu dianggap bahwa koneksi ke Vm belum terjadi (untuk detail, lihat vm_connect.sh)
Skrip vm_manager.sh membaca file konfigurasi dari file vm_manager.conf, mengevaluasi keadaan mesin virtual dalam kumpulan berdasarkan beberapa parameter, yaitu: berapa banyak VM yang digunakan, apakah ada VM bersih yang bebas. Untuk melakukan ini, ia membaca file clear.list yang berisi nomor port “spice_console” dari mesin virtual “baru dibuat” (lihat siklus pembuatan VM di bawah) dan memeriksa koneksi yang terjalin dengannya. Jika port dengan koneksi jaringan yang ada terdeteksi (yang seharusnya tidak boleh), peringatan ditampilkan dan port ditransfer ke waste.list Ketika port pertama ditemukan dari file clear.list yang saat ini tidak ada koneksi, vm_manager.sh memanggil skrip dan pass vm_connect.sh dia sebagai parameter nomor port ini.
/home/admin/scripts_vdi_new/vm_connect.sh Skrip vm_connect.sh memperkenalkan aturan firewall yang membuat pengalihan "vdi_spice_port" dari port server dari antarmuka enp5s0 ke "port konsol rempah-rempah" dari VM yang terletak di antarmuka server lo0, dilewatkan sebagai parameter startup. Port ditransfer ke conn_wait.list, VM dianggap koneksi tertunda. Baris ATURAN TAMBAH, HUBUNGKAN SEKARANG dikirimkan ke sesi Stasiun Klien pada port "sinyal" server, yang diharapkan oleh skrip remote.sh yang berjalan di atasnya. Siklus menunggu koneksi dimulai dengan jumlah upaya yang ditentukan oleh nilai variabel "count_conn_tryes" dari file konfigurasi. Setiap detik dalam sesi nc, string "ATURAN TAMBAH, HUBUNGKAN SEKARANG" akan diberikan dan koneksi yang dibuat ke port "spice_console" akan diperiksa.
Jika koneksi gagal untuk jumlah upaya yang ditetapkan, port spice_console ditransfer kembali ke clear.list Eksekusi vm_connect.sh selesai, eksekusi vm_manager.sh dilanjutkan, yang memulai siklus pembersihan.
Jika Stasiun Klien terhubung ke port spice_console pada antarmuka lo0, aturan firewall yang membuat pengalihan antara port server spice dan port spice_console dihapus dan koneksi lebih lanjut dipelihara oleh mekanisme untuk menentukan status firewall. Jika koneksi terputus, menghubungkan kembali ke port spice_console akan gagal. Port spice_console ditransfer ke waste.list, VM dianggap kotor dan tidak dapat kembali ke kumpulan mesin virtual bersih tanpa melalui pembersihan. Eksekusi vm_connect.sh selesai, eksekusi vm_manager.sh dilanjutkan, yang memulai siklus pembersihan.
Siklus pembersihan dimulai dengan melihat file waste.list, di mana nomor spice_console port mesin virtual yang koneksi dibuat ditransfer. Kehadiran koneksi aktif ditentukan pada setiap port spice_console dari daftar. Jika tidak ada koneksi, dianggap bahwa mesin virtual tidak lagi digunakan dan port ditransfer ke recycle.list dan proses menghapus mesin virtual (lihat di bawah) di mana port milik ini dimulai. Jika koneksi jaringan aktif terdeteksi pada port, diasumsikan bahwa mesin virtual sedang digunakan, tidak ada tindakan yang diambil untuk itu. Jika port tidak disadap, diasumsikan bahwa VM dimatikan dan tidak lagi diperlukan. Port ditransfer ke recycle.list dan proses menghapus mesin virtual dimulai. Untuk melakukan ini, skrip vm_delete.sh dipanggil, yang nomor "spice_console" ditransfer ke port VM sebagai parameter, yang harus dihapus.
/home/admin/scripts_vdi_new/vm_delete.sh Menghapus mesin virtual adalah operasi yang cukup sepele, skrip vm_delete.sh menentukan nama mesin virtual yang memiliki port yang dilewati sebagai parameter startup. VM terpaksa berhenti, VM dihapus dari hypervisor, hard disk virtual VM ini dihapus. Port spice_console dihapus dari recycle.list. Eksekusi vm_delete.sh berakhir, eksekusi resume vm_manager.sh
Script vm_manager.sh, di akhir operasi untuk membersihkan mesin virtual yang tidak perlu dari daftar waste.list, memulai siklus pembuatan mesin virtual di kumpulan.
Proses dimulai dengan penentuan port spice_console yang tersedia untuk hosting. Untuk melakukan ini, berdasarkan pada parameter file konfigurasi "srv_start_port_pool" yang menetapkan port awal untuk kumpulan "spice_console" dari mesin virtual dan parameter "srv_pool_size", yang menentukan batas jumlah mesin virtual, semua varian port yang mungkin diuraikan secara berurutan. Untuk setiap port tertentu, ia dicari di clear.list, waste.list, conn_wait.list, recycle.list. Jika port ditemukan di salah satu file ini, port tersebut dianggap sibuk dan dilewati. Jika port tidak ditemukan dalam file yang ditentukan, itu dimasukkan ke file recycle.list dan proses pembuatan mesin virtual baru dimulai. Untuk melakukan ini, skrip vm_create.sh dipanggil ke mana nomor spice_console port tempat Anda ingin membuat VM dilewatkan sebagai parameter.
/home/admin/scripts_vdi_new/vm_create.sh Proses menciptakan mesin virtual baru
Skrip vm_create.sh membaca dari file konfigurasi nilai variabel "base_host" yang menentukan mesin virtual sampel berdasarkan dasar pembuatan klon. Membongkar konfigurasi xml dari VM dari database hypervisor, melakukan serangkaian pemeriksaan qcow dari image disk VM dan, setelah berhasil menyelesaikan, membuat file konfigurasi xml untuk VM baru dan gambar disk "linked clone" dari VM baru. Setelah itu, konfigurasi xml dari VM baru dimuat ke dalam basis data hypervisor dan VM dimulai. Port spice_console ditransfer dari recycle.list ke clear.list. Eksekusi vm_create.sh berakhir dan eksekusi vm_manager.sh berakhir.
Lain kali Anda terhubung, itu dimulai dari awal.
Untuk kasus darurat, kit ini menyertakan skrip vm_clear.sh yang secara paksa dijalankan melalui semua VM dari kumpulan dan menghapusnya dengan memberi nilai nol pada daftar. Menyebutnya pada tahap pemuatan memungkinkan Anda memulai (di bawah) VDI dari awal.
/home/admin/scripts_vdi_new/vm_clear.sh Tentang ini saya ingin mengakhiri bagian pertama dari cerita saya. Di atas harus cukup bagi administrator sistem untuk mencoba underVDI dalam bisnis. Jika komunitas menemukan topik ini menarik, pada bagian kedua saya akan berbicara tentang modifikasi livecd Fedora dan transformasinya menjadi kios.