Halo kabeh, jenengku Sergey Yemelyanchik. Aku CEO Audit-Telecom lan pangembang utama lan penulis sistem Veliam. Aku mutusake kanggo nulis artikel babagan carane aku lan kanca nggawe perusahaan outsourcing, nulis piranti lunak kanggo awake dhewe, lan banjur wiwit nyebarake menyang sapa wae sing kasengsem liwat SaaS. Aku bakal pitutur marang kowe carane aku categorically ora pracaya iku bisa. Artikel kasebut ora mung nutupi crita nanging uga rincian teknis babagan carane Veliam digawe, kalebu sawetara potongan kode sumber. Aku uga bakal nuduhake kesalahan sing kita lakoni lan kepiye cara ndandani. Aku ragu-ragu kanggo nerbitake artikel iki, nanging aku mikir bakal luwih apik kanggo nindakake, njaluk umpan balik, lan nambah, tinimbang ora nerbitake artikel kasebut lan mikir apa sing bakal kedadeyan yen ...
prasejarah
Aku makarya minangka spesialis IT ing perusahaan. Iku cukup gedhe lan nduweni struktur jaringan sing jembar. Aku ora bakal njlentrehake babagan tanggung jawab kerjaku, nanging aku bakal ujar manawa dheweke mesthi ora melu pembangunan.
We wis ngawasi, nanging sejatine sifate metu saka kapentingan akademisi, Aku wanted kanggo nyoba nulis dhewe, malah siji paling gampang. Ide iki nduweni basis web, supaya sapa wae bisa ngakses jaringan kanthi gampang saka piranti apa wae, kalebu piranti seluler liwat Wi-Fi, tanpa nginstal klien. Aku uga pengin cepet ngenali kamar ing ngendi peralatan sing tumindak, amarga kita duwe wektu respon sing ketat banget kanggo masalah kasebut. Pungkasane, aku duwe rencana kanggo nulis kaca web sing prasaja kanthi gambar latar mburi JPEG saka jaringan, ngethok piranti kasebut dhewe nganggo alamat IP saka gambar iki, banjur nampilake konten dinamis ing gambar kasebut ing koordinat sing dikarepake, ing wangun alamat IP ijo utawa sumunar abang. Tugas wis disetel, ayo miwiti.
Sadurunge, aku wis diprogram ing Delphi, PHP, JS, lan pangerten dhasar babagan C ++. Aku duwe cukup ngerti jaringan, kalebu VLAN, nuntun (OSPF, EIGRP, BGP), lan NAT. Iki cukup kanggo nulis prototipe pemantauan dhasar dhewe.
Aku nulis apa sing tak pikirake nganggo PHP. Server Apache lan PHP lagi aktif Windows amarga Linux kanggo aku nalika semana iku minangka perkara sing ora bisa dingerteni lan angel banget, amarga mengko, aku salah banget lan ing pirang-pirang panggonan Linux luwih prasaja Windows, nanging kuwi topik sing kapisah, lan kita kabeh ngerti pira akehe perang suci sing ana ing topik iki. Penjadwal tugas Windows Aku mbukak skrip PHP kanthi interval cendhak (aku ora kelingan persis, nanging kaya saben telung detik) sing ngevaluasi kabeh obyek nganggo ping prasaja lan nyimpen status menyang file.
system(βping -n 3 -w 100 {$ip_address}β);
Ya, nggarap database uga anyar kanggo aku nalika iku. Aku ora ngerti sing pangolahan bisa parallelized, lan traversing kabeh kelenjar jaringan njupuk wektu dawa amarga kabeh wis rampung ing thread siji. Masalah utamane muncul nalika sawetara simpul ora kasedhiya, amarga saben siji nyekel skrip sajrone 300 ms. Ing sisih klien, ana fungsi looping prasaja sing ndownload informasi sing dianyari saka server liwat panjalukan Ajax saben sawetara detik lan nganyari antarmuka. Banjur, sawise telung ping gagal berturut-turut, yen kaca web ngawasi mbukak ing komputer, lagu sing nyenengake bakal diputer.
Nalika kabeh wis rampung, aku pancene inspirasi karo asil lan mikir babagan apa sing bisa ditindakake (diwenehi kawruh lan kemampuan). Nanging aku tansah ora seneng sistem karo yuta grafik, kang aku dianggep banjur, lan isih nimbang dina, biasane rasah. Aku mung pengin nambah apa sing bakal mbantu aku ing karya. Prinsip iki tetep dadi dhasar ing pangembangan Veliam. Banjur, aku temen maujud iku bakal tenan kelangan yen aku ora kudu tetep ngawasi mbukak lan weruh saka masalah, lan nalika ana, Aku bisa mbukak kaca lan ndeleng ngendi simpul jaringan masalah dumunung lan apa apa sabanjurΓ©. Aku ora mriksa email nalika iku; Aku mung ora nggunakake. Aku kesandung liwat SMS gateways online sing bisa ngirim panjalukan GET utawa POST menyang, lan padha bakal ngirim kula SMS karo teks aku ngetik menyang ponsel. Aku langsung ngerti aku pancene wanted iki. Dadi aku miwiti sinau dokumentasi. Sawise sawetara wektu, aku sukses, lan saiki aku nampa pesen SMS babagan masalah jaringan ing ponselku, bebarengan karo jeneng "obyek sing tiba." Senajan sistem iki primitif, Aku wis nulis dhewe, lan bab sing paling penting sing motivasi kula kanggo berkembang iku aplikasi sing bener mbantu kula ing karya.
Banjur teka dina nalika salah siji pranala internet ing karya mudhun, lan ngawasi ora menehi pitunjuk. DNS Google isih ping kanthi sampurna. Iku wektu kanggo mikir babagan carane ngawasi kesehatan link. Aku duwe macem-macem ide babagan carane nindakake iki. Aku ora duwe akses menyang kabeh peralatan. Aku kudu nemtokake cara kanggo nemtokake link sing isih urip tanpa bisa ndeleng ing peralatan jaringan kasebut. Banjur kolega nyaranake manawa traceroute menyang server umum bisa beda-beda gumantung saka tautan sing saiki ngakses internet. Aku mriksa, lan iku. Ana macem-macem rute sajrone traceroute.
system(βtracert -d -w 500 8.8.8.8β);
Dadi skrip liyane digawe, utawa luwih, traceroute ditambahake ing mburi skrip sing padha sing ping kabeh piranti ing jaringan. Sawise kabeh, iki minangka proses dawa liyane sing mlaku ing benang sing padha lan nyepetake kabeh naskah. Nanging wektu iku ora ketok. Isih, iku nindakake sawijining tugas; kode strictly ditetepake traceroute dibutuhake kanggo saben saluran. Mangkono, sistem wiwit fungsi sing dipantau (sing exaggeration, amarga ora ngumpulake metrik sembarang, mung ping) piranti jaringan (router, switch, Wi-Fi, etc.) lan saluran komunikasi karo donya njaba. Pesen SMS teka kanthi rutin, lan masalah kasebut katon jelas ing diagram.
Banjur, ing karya saben dina, aku kudu ngatasi hubungan silang. Lan mlebu menyang Cisco ngalih saben-saben kanggo ndeleng antarmuka sing kudu digunakake dadi kesel. Carane kelangan bakal klik ing obyek ing alat ngawasi lan ndeleng dhaptar antarmuka karo gambaran. Iki bakal ngirit wektu. Kajaba iku, kanthi pendekatan iki, aku ora kudu miwiti Putty utawa SecureCRT lan ngetik kredensial lan printah. Aku mung bisa ngeklik alat ngawasi, ndeleng apa sing dibutuhake, lan nindakake pakaryanku. Aku miwiti looking for cara kanggo sesambungan karo ngalih. Rong pilihan langsung teka ing pikiran: SNMP utawa mlebu menyang saklar liwat SSH, ngetik printah sing perlu, lan parsing asil. Aku ngilangi SNMP amarga kerumitan implementasine; Aku kepengin weruh asile. Kanthi SNMP, aku kudu nglampahi akeh wektu kanggo ngeduk MIB lan nggunakake data kasebut kanggo ngasilake data antarmuka. Ana tim gedhe ing Cisco.
show interface status
Iku nuduhake persis apa aku kudu salib-nyambung. Apa keganggu karo SNMP nalika aku mung pengin ndeleng output saka printah iki, Aku panginten. Sawise sawetara wektu, aku ngetrapake fitur iki. Aku bakal ngeklik obyek ing kaca web. Acara bakal micu, nyebabake klien nggunakake AJAX kanggo ngubungi server, sing bakal nyambung liwat SSH menyang saklar sing dibutuhake (kredensial kasebut hardcoded; Aku ora pengin ngganggu, nggawe menu sing kapisah ing ngendi aku bisa ngganti kredensial saka antarmuka; Aku butuh asil, lan cepet). Aku bakal ngetik printah ing ndhuwur lan bali menyang browser. Kanthi cara iki, aku bisa ndeleng informasi antarmuka kanthi siji klik. Iki pancen trep, utamane nalika aku kudu ndeleng informasi iki ing pirang-pirang saklar bebarengan.
Tautan ngawasi adhedhasar traceroute ternyata ora dadi ide sing paling apik, amarga kadhangkala pangopènan jaringan bakal kedadeyan, lan traceroute bakal ganti, nyebabake ngawasi wiwit njerit babagan masalah link. Nanging sawise mbuwang akeh wektu kanggo nganalisa, aku nyadari yen kabeh pranala bisa digunakake, lan pemantauanku ngapusi aku. Pungkasane, aku takon kanca-kancaku sing ngatur switch pembentuk link supaya mung ngirim pesen syslog nalika status visibilitas tanggane diganti. Iki luwih gampang, luwih cepet, lan luwih akurat tinimbang traceroute. Acara "tangga sing ilang" bakal teka, lan aku bakal langsung menehi tandha babagan kegagalan link.
Sabanjure, klik-liwat kanggo obyek ditambahake, bebarengan karo sawetara printah liyane, lan SNMP ditambahake kanggo ngumpulake sawetara metrik, lan iku cukup akeh. Sistem kasebut ora berkembang maneh. Iku nindakake kabeh aku needed; iku alat sing apik. Akeh sing maca mbokmenawa bakal ngandhani yen ana akeh piranti lunak sing kasedhiya online kanggo tugas kasebut. Nanging nyatane, aku ora bisa nemokake produk kaya ngono sing gratis, lan aku pancene pengin ngembangake katrampilan pemrograman, lan cara sing luwih apik tinimbang nggunakake aplikasi ing donya nyata. Iku pungkasan saka versi pisanan saka sistem ngawasi lan wis ora diowahi wiwit.
Pembentukan perusahaan Audit-Telekomunikasi
Suwe-suwe aku mulai kerja part-time ing perusahaan liyane, untunge jadwal kerjaku bisa. Nalika sampeyan kerja ing macem-macem perusahaan, katrampilan sampeyan ing macem-macem lapangan berkembang kanthi cepet, lan wawasan sampeyan bakal saya gedhe. Ana perusahaan ing ngendi, kaya sing dikandhakake, sampeyan dadi jago dagang. Ing tangan siji, iku tantangan, nanging ing sisih liya, yen sampeyan kerja keras, sampeyan bakal dadi spesialis multi-trampil, sing ngijini sampeyan kanggo ngatasi masalah luwih cepet lan luwih efektif amarga ngerti carane lapangan related.
Kancaku Pavel (uga spesialis IT) terus-terusan nyengkuyung supaya bisa miwiti bisnis dhewe. Kita duwe ide sing ora kaetung kanggo macem-macem usaha bisnis. We rembugan iku kanggo taun. Pungkasane, ora ana sing bisa ditindakake amarga aku mamang lan Pavel minangka visioner. Saben-saben dheweke ngusulake ide, aku mesthi ora percaya lan ora gelem melu. Nanging kita pancene pengin miwiti bisnis dhewe.
Pungkasan, kita nemokake solusi sing cocog karo kita lan fokus marang apa sing kita gunakake. Ing 2016, kita mutusake nggawe perusahaan IT sing bakal mbantu bisnis babagan kabutuhan IT. Iki kalebu nyebarake sistem IT (1C, server terminal, server mail, lan sapiturute), njaga, nyedhiyakake HelpDesk klasik kanggo pangguna, lan administrasi jaringan.
Terus terang, nalika miwiti perusahaan, aku ora percaya 99,9%. Nanging piye wae Pavel bisa gawe uwong yakin supaya nyoba, lan katon ing ngarep, dheweke pancen bener. Pavel lan aku saben chiped ing 300.000 rubles, ndhaptar LLC anyar, Audit-Telecom, nyewa kantor cilik, nggawe kertu bisnis apik-dasar, kaya paling inexperienced, calon pengusaha-lan miwiti looking for klien. Nemokake klien minangka crita liyane. Kita bisa uga nulis artikel kapisah kanggo blog perusahaan yen ana sing kasengsem. Telpon kadhemen, flyer, lan liya-liyane. Ora ngasilake asil. Nalika aku maca saiki saka akeh crita bisnis, akeh gumantung ing luck, siji cara utawa liyane. Kita padha begja. Lan secara harfiah sawetara minggu sawise ngedegake perusahaan, sedulurku, Vladimir, ngubungi kita lan nggawa klien pisanan kita. Aku ora bakal mboseni sampeyan karo rincian karya klien kita - dudu artikel iki. Ayo kula ujar manawa kita nindakake audit, nemtokake wilayah kritis, lan wilayah kasebut rusak nalika keputusane bakal ditindakake kanthi permanen minangka outsourcing. Sawise iku, keputusan kasebut langsung positif.
Banjur, biasane liwat tutuk lan kenalan, perusahaan liyane wiwit muncul kanggo layanan kita. Helpdesk ana ing siji sistem. Sambungan menyang peralatan jaringan lan server ana ing liyane, utawa rodo, saben duwe sistem dhewe. Sawetara trabasan sing disimpen, liyane nggunakake buku alamat RDP. Pemantauan minangka sistem liyane sing kapisah. Makarya minangka tim ing sistem sing beda-beda pancen ora trep. Informasi penting ilang. Contone, server terminal klien mudhun. Panjaluk saka pangguna klien kasebut langsung mlebu. Spesialis dhukungan mbukak panjaluk (ditampa liwat telpon). Yen kedadeyan lan panjaluk didaftar ing sistem siji, spesialis dhukungan bakal langsung ndeleng masalah pangguna lan ngandhani babagan iki, nalika nyambung menyang situs sing cocog kanggo nangani kahanan kasebut. Saben uwong ngerti kahanan taktik lan kerja bareng kanthi lancar. Kita ora bisa nemokake sistem sing nggabungake kabeh iki. Dadi jelas wektune nggawe produk kita dhewe.
Terus nggarap sistem pemantauan kita
Cetha manawa sistem sing wis ditulis sadurunge ora cocog kanggo tugas saiki, ing babagan fungsi lan kualitas. Dadi kaputusan digawe kanggo nulis sistem saka ngeruk. Secara grafis, kudu katon beda banget. Iki kudu dadi sistem hirarkis, ngidini akses cepet lan gampang menyang obyek sing dikarepake kanggo klien sing dikarepake. Tata letak saka versi pisanan rampung unjustified ing kasus saiki, minangka klien padha beda, lan ora Matter ngendi peralatan dumunung. Iki wis didelegasikan menyang dokumentasi.
Dadi, tugas kasebut yaiku:
- Struktur hirarkis;
- Sawetara jinis bagean server sing bisa diselehake ing sisih klien minangka mesin virtual kanggo ngumpulake metrik sing dibutuhake lan dikirim menyang server tengah, sing bakal ngringkes kabeh iki lan nuduhake marang kita;
- Tandha. Jenis sing ora bisa kantun, amarga ing wektu iku, iku ora bisa kanggo wong mung njagong lan mandeng ing monitor;
- Sistem tiket. Kita miwiti entuk klien sing dilayani ora mung peralatan server lan jaringan, nanging uga stasiun kerja;
- Kemampuan kanggo nyambung cepet menyang server lan peralatan saka sistem;
Tugas-tugas wis ditemtokake, lan kita wiwit nulis. Sadawane dalan, kita ngolah panjaluk saka klien. Ing wektu iku, wis ana papat wong. Kita wiwit nulis loro-lorone bagean sekaligus: server pusat lan server kanggo instalasi klien. Ing wektu iki, Linux wis ora asing maneh kanggo kita lan diputusake yen mesin virtual sing bakal diinstal ing klien bakal aktif DebianOra bakal ana installer; kita mung bakal nggawe proyek sisih server ing mesin virtual siji, banjur mung nggandake menyang klien sing dibutuhake. Iki minangka kesalahan liyane. Mengko dadi jelas yen persiyapan iki ora duwe mekanisme nganyari babar pisan. Dadi, kita bakal nambah sawetara fitur anyar, lan banjur bakal dadi repot banget kanggo nyebarake menyang kabeh server klien. Nanging kita bakal ngrembug babagan iki mengko, ing wektu sing tepat.
Kita mbangun prototipe pisanan. Bisa ping piranti jaringan klien lan server sing dibutuhake lan ngirim data iki menyang server pusat kita. Server iki, ing siji, nganyari data iki bebarengan ing server pusat. Ing kene aku bakal nyritakake ora mung babagan carane lan apa sing bisa ditindakake, nanging uga kesalahan amatir sing ditindakake lan kepiye carane kudu mbayar kanthi tepat. Dadi, kabeh wit obyek disimpen ing file siji minangka obyek serial. Nalika kita disambungake sawetara klien kanggo sistem, kabeh ana liyane utawa kurang nggoleki, sanajan ana sok-sok sawetara artefak sing padha rampung dingerteni. Nanging nalika kita nyambungake rolas server menyang sistem, Piandel wiwit kelakon. Kadhangkala, tanpa alesan sing jelas, kabeh obyek ing sistem mung ilang. Penting kanggo dicathet yen server klien ngirim data menyang server tengah saben sawetara detik liwat panjalukan POST. Pembaca sing ati-ati lan programmer sing berpengalaman bakal ngira manawa ana masalah karo macem-macem akses menyang file sing nyimpen obyek serial saka macem-macem benang bebarengan. Lan nalika kedadeyan kasebut, obyek gaib bakal ilang. File mung bakal kosong. Nanging, iki ora langsung ditemokake, nanging mung sajrone operasi karo sawetara server. Sajrone wektu iki, fungsionalitas scan port ditambahake (server ngirim informasi menyang server pusat ora mung babagan kasedhiyan piranti nanging uga babagan port sing mbukak). Iki ditindakake kanthi nelpon printah:
$connection = @fsockopen($ip, $port, $errno, $errstr, 0.5);
Asil asring salah lan scan njupuk wektu dawa banget. Aku lali bab ping; wis rampung nggunakake fping:
system("fping -r 3 -t 100 {$this->ip}");
Iki uga ora paralel, mula prosese alon banget. Mengko, kabeh dhaptar alamat IP sing dibutuhake kanggo mriksa dikirim menyang fping bebarengan, lan dhaptar lengkap sing nanggapi dibalekake. Ora kaya kita, fping bisa nggawe paralel proses.
Tugas rutin liyane yaiku nyetel layanan tartamtu liwat web. Contone, ECP MS Exchange. Iku ateges mung link. Dadi, kita mutusake supaya bisa nambah tautan kasebut langsung menyang sistem, ngilangi kebutuhan kanggo nggoleki dokumentasi utawa tetenger liyane kanggo nemokake cara ngakses ECP klien tartamtu. Iki carane konsep pranala sumber kanggo sistem muncul; fungsi sing tetep kasedhiya kanggo dina iki lan tetep umumΓ© panggah.
Carane Resource Links Work in Veliam

Sambungan adoh
Mangkene apa sing katon ing tumindak ing Veliam versi saiki

Salah sawijining tantangan yaiku nyambungake kanthi cepet lan gampang menyang server, sing wis dadi akeh (ratusan), lan nyaring jutaan trabasan RDP sing wis disimpen pancen ora trep. Alat dibutuhake. Ana piranti lunak online sing tumindak minangka buku alamat kanggo sambungan RDP iki, nanging ora terintegrasi karo sistem ngawasi, lan kredensial ora bisa disimpen. Ketik kredensial kanggo klien sing beda-beda saben wektu iku neraka murni nalika sampeyan nyambung menyang server sing beda kaping pirang-pirang dina. SSH luwih apik; ana akeh piranti lunak apik sing ngidini sampeyan ngatur sambungan kasebut menyang folder lan ngelingi kredensial kasebut. Nanging ana rong masalah. Kaping pisanan, kita ora bisa nemokake program siji kanggo sambungan RDP lan SSH. Kapindho, yen aku adoh saka komputer ing sembarang titik lan kudu cepet nyambung, utawa aku wis mung reinstalled sistem, Aku kudu dig menyang dokumentasi kanggo katon munggah Diverifikasi kanggo klien sing. Iki ora trep lan mbuwang wektu.
Struktur hierarki server klien sing dibutuhake wis ana ing produk internal kita. Kita mung kudu ngerti carane ngleksanakake sambungan cepet menyang peralatan sing dibutuhake. Paling ora ing jaringan kita dhewe, kanggo wiwitan.
Ngelingi manawa klien ing sistem kita minangka browser sing ora duwe akses menyang sumber daya lokal komputer, supaya bisa mbukak aplikasi sing dibutuhake kanthi sawetara prentah, diputusake kanggo nindakake kabeh liwat "Windows skema url khusus.β Mangkene carane "plugin" kanggo sistem kita katon, sing mung kalebu Putty lan Remote Desktop Plus lan, sawise diinstal, mung ndhaftar skema URI ing WindowsSaiki, kapan wae kita pengin nyambung menyang obyek liwat RDP utawa SSH, kita bakal ngeklik tumindak kasebut ing sistem kita, lan URI Khusus bakal aktif. Mstsc.exe standar sing wis dibangun ing Windows utawa PuTTY, sing kalebu minangka bagΓ©an saka "plugin." Aku nglebokakΓ© tembung "plugin" ing tandha petik amarga iku dudu plugin browser ing pangertΓ¨n klasik.
Paling ora kuwi wis cukup. Buku alamat sing trep. Lan ing kasus Putty, kabeh apik; bisa diwenehake karo alamat IP sambungan, login, lan sandhi minangka parameter input. Yaiku, Linux Kita wis nyambung menyang server ing jaringan kita mung nganggo sak klik, tanpa ngetik sandhi. Nanging RDP ora semudah kuwi. Sampeyan ora bisa ngirim kredensial minangka parameter menyang mstsc standar. Remote Desktop Plus nulungi. Iki ngidini kita nindakake iki. Wiwit kuwi kita bisa urip tanpa iku, nanging sajrone wektu sing suwe, iku dadi asisten sing bisa dipercaya ing sistem kita. Situs HTTP(S) iku gampang; obyek kaya ngono mung dibukak ing browser lan wis cukup. Trep lan praktis. Nanging iki mung berkah ing jaringan internal.
Amarga kita bisa ngrampungake sebagian besar masalah saka kadohan saka kantor, cara paling gampang yaiku nyetel VPN kanggo klien. Banjur kita bisa nyambung menyang VPN saka sistem kita. Nanging isih rada ora trep. Kanggo saben klien, kita kudu nyimpen sawetara sandhi sing disimpen ing saben komputer. VPN Koneksi, lan sadurunge nyambung menyang apa wae, VPN sing cocog kudu diaktifake. Kita nggunakake solusi iki sajrone wektu sing cukup suwe. Nanging jumlah klien saya tambah akeh, uga jumlah VPN, lan kabeh iki wiwit dadi ngganggu, lan ana sing kudu ditindakake. Rasane nangis banget sawise nginstal maneh sistem, nalika aku kudu ngetik maneh puluhan sambungan VPN ing profil Windows anyar. Aku ujar, "Aku wis cukup karo iki," lan wiwit mikir apa sing bisa ditindakake.
Kedaden kabeh klien kita duwe router Mikrotik minangka router. Padha cukup fungsional lan trep kanggo meh kabeh tugas. Salah sawijining kekurangan yaiku dicolong. Kita ngrampungake masalah iki mung kanthi ngalangi kabeh akses eksternal. Nanging kita kudu ngakses kanthi cara apa wae tanpa ngunjungi situs klien, amarga mbutuhake wektu sing suwe. Kita mung nggawe trowongan kanggo saben router Mikrotik lan dialokasikan menyang blumbang sing kapisah, tanpa rute, kanggo nyegah jaringan kita ora nyambung karo jaringan klien, utawa karo jaringan.
Aku duwe idea kanggo nggawe cara kanggo server ngawasi tengah kanggo nyambung menyang host lan port sing dikarepake nalika aku ngeklik obyek tartamtu ing sistem, ngerti kapercayan SSH kabeh klien Mikrotik. Iki melu sawetara masalah. Solusi kasebut ora universal - mung bisa digunakake kanggo Mikrotik, amarga saben router duwe sintaks perintah dhewe. Terusake kasebut uga kudu dicopot, lan sisih server sistem kita pancen ora duwe cara kanggo nglacak manawa aku wis mungkasi sesi RDP. Salajengipun, penerusan kasebut minangka bottleneck utama kanggo klien. Kita ora ngarahake universalitas, amarga produk kasebut mung digunakake ing njero, lan kita uga ora nganggep nggawe umum.
Saben masalah wis ditanggulangi kanthi cara dhewe. Nalika aturan kasebut digawe, penerusan mung kasedhiya kanggo siji alamat IP eksternal tartamtu (ing ngendi sambungan kasebut diwiwiti). Dadi bolongan keamanan nyingkiri. Nanging kanthi saben sambungan kasebut, aturan Mikrotik ditambahake menyang kaca NAT lan ora dibusak. Lan kabeh wong ngerti yen luwih akeh aturan, luwih akeh beban prosesor router. Lan sakabèhé, aku ora bisa nampa idea sing siji dina aku bakal mlebu menyang server Mikrotik lan nemokake atusan mati, aturan ora ana guna.
Amarga server kita ora bisa nglacak status sambungan, aku ngidini Mikrotik nglacak dhewe. Aku nulis script sing terus-terusan ngawasi kabeh aturan nerusake karo gambaran tartamtu lan mriksa apa sambungan TCP cocog karo aturan. Yen ora ana siji kanggo sawetara wektu, sambungan wis mesthi wis mungkasi lan nerusake bisa dibusak. Kabèh bisa metu uga; script bisa uga.
Miturut cara, iki:
global atmonrulecounter {"dontDelete"="dontDelete"}
:foreach i in=[/ip firewall nat find comment~"atmon_script_main"] do={
local dstport [/ip firewall nat get value-name="dst-port" $i]
local dstaddress [/ip firewall nat get value-name="dst-address" $i]
local dstaddrport "$dstaddress:$dstport"
#log warning message=$dstaddrport
local thereIsCon [/ip firewall connection find dst-address~"$dstaddrport"]
if ($thereIsCon = "") do={
set ($atmonrulecounter->$dstport) ($atmonrulecounter->$dstport + 1)
#:log warning message=($atmonrulecounter->$dstport)
if (($atmonrulecounter->$dstport) > 5) do={
#log warning message="Removing nat rules added automaticaly by atmon_script"
/ip firewall nat remove [/ip firewall nat find comment~"atmon_script_main_$dstport"]
/ip firewall nat remove [/ip firewall nat find comment~"atmon_script_sub_$dstport"]
set ($atmonrulecounter->$dstport) 0
}
} else {
set ($atmonrulecounter->$dstport) 0
}
}
Mesthi wae bisa digawe luwih ayu, luwih cepet, lsp, nanging bisa, ora overload Mikrotik, lan nindakake kanthi sampurna. Kita pungkasane bisa nyambung menyang server lan peralatan jaringan klien kanthi mung siji klik, tanpa nyetel VPN utawa ngetik sandhi. Sistem kasebut dadi saestu pangguna-loropaken. Wektu pangopènan suda, lan kita kabeh ngginakaken wektu kerja, ora nyoba nyambung menyang obyek sing perlu.
Backup Mikrotik
Kita wis kabeh piranti Mikrotik dikonfigurasi kanggo gawe serep FTP. Kabeh iku apik sakabèhé. Nanging nalika kita perlu kanggo njupuk serep, kita kudu mbukak FTP lan nelusuri ana. Kita duwe sistem ing ngendi kabeh router disambungake, lan kita ngerti carane komunikasi karo piranti liwat SSH. Aku mikir, "Apa kita ora nggawe sistem kanthi otomatis njupuk serep saka kabeh piranti Mikrotik saben dina?" Mula aku arep ngleksanakake. Kita nyambung, nggawe serep, lan disimpen ing panyimpenan.
Kode skrip PHP kanggo nggawe serep saka Mikrotik:
<?php
$IP = '0.0.0.0';
$LOGIN = 'admin';
$PASSWORD = '';
$BACKUP_NAME = 'test';
$connection = ssh2_connect($IP, 22);
if (!ssh2_auth_password($connection, $LOGIN, $PASSWORD)) exit;
ssh2_exec($connection, '/system backup save name="atmon" password="atmon"');
stream_get_contents($connection);
ssh2_exec($connection, '/export file="atmon.rsc"');
stream_get_contents($connection);
sleep(40); // Waiting bakup makes
$sftp = ssh2_sftp($connection);
// Download backup file
$size = filesize("ssh2.sftp://$sftp/atmon.backup");
$stream = fopen("ssh2.sftp://$sftp/atmon.backup", 'r');
$contents = '';
$read = 0;
$len = $size;
while ($read < $len && ($buf = fread($stream, $len - $read))) {
$read += strlen($buf);
$contents .= $buf;
}
file_put_contents ($BACKUP_NAME . β.backupβ,$contents);
@fclose($stream);
sleep(3);
// Download RSC file
$size = filesize("ssh2.sftp://$sftp/atmon.rsc");
$stream = fopen("ssh2.sftp://$sftp/atmon.rsc", 'r');
$contents = '';
$read = 0;
$len = $size;
while ($read < $len && ($buf = fread($stream, $len - $read))) {
$read += strlen($buf);
$contents .= $buf;
}
file_put_contents ($BACKUP_NAME . β.rscβ,$contents);
@fclose($stream);
ssh2_exec($connection, '/file remove atmon.backup');
ssh2_exec($connection, '/file remove atmon.rsc');
?>
Serep kasedhiya ing rong format: file binar lan file konfigurasi adhedhasar teks. File binar mbantu cepet mulihake file konfigurasi sing dibutuhake, dene file konfigurasi adhedhasar teks mbantu ngerti apa sing kudu ditindakake yen upgrade hardware perlu lan file binar ora bisa diunggah. Iki nambahake fitur liyane sing trep kanggo sistem kasebut. Salajengipun, nalika nambah piranti Mikrotik anyar, ora perlu ngatur apa-apa; Aku mung nambah obyek kanggo sistem lan diutus akun SSH kanggo. Sistem banjur nangani serep kanthi otomatis. Fitur iki durung kasedhiya ing Veliam SaaS versi saiki, nanging kita bakal ngirim port kasebut kanthi cepet.
Gambar saka apa sing katon ing sistem internal

Transisi menyang panyimpenan database normal
Aku wis nyebutake artefak sing katon. Kadhangkala kabeh dhaptar obyek ing sistem bakal ilang; kadhangkala, nalika nyunting obyek, informasi ora bakal disimpen, lan aku kudu ngganti jeneng obyek kaping telu. Iki luar biasa ngganggu kanggo kabeh wong. Obyek sing ilang arang kedadeyan lan gampang dipulihake kanthi mulihake file kasebut dhewe, nanging gagal nyunting obyek minangka kedadeyan umum. Aku mbokmenawa ora pisanan ngleksanakake iki liwat database amarga aku ora bisa mbayangno carane wit karo kabeh sesambetan bisa disimpen ing meja flat. Sawise kabeh, meja iku warata, nalika wit iku hirarkis. Nanging solusi sing apik kanggo macem-macem akses, lan mengko (minangka sistem dadi luwih Komplek) kanggo akses transactional, punika DBMS. Aku yakin aku dudu wong pertama sing nemoni masalah iki. Aku wiwit googling. Ternyata kabeh wis diciptakake sadurunge aku, lan ana sawetara algoritma sing mbangun wit saka meja sing rata. Sawise ndeleng siji-sijine, aku ngetrapake salah sawijining. Nanging sing wis versi anyar saka sistem, amarga ... Ateges, iki mbutuhake jumlah pinunjul saka rewriting. Asil kasebut bisa ditebak: masalah prilaku acak sistem wis ilang. Sawetara bisa uga ujar manawa kesalahan kasebut cukup amatir ing lapangan pangembangan piranti lunak (skrip single-threaded, nyimpen informasi sing diakses kaping pirang-pirang bebarengan saka macem-macem benang ing file, lsp.). Iki bisa uga bener, nanging tugas utamaku yaiku administrasi, lan pemrograman minangka kerumitan sisih, lan aku mung ora duwe pengalaman kerja ing tim programer ing ngendi kolega senior bakal njaluk aku konsep dhasar kasebut. Dadi aku sinau kabeh pelajaran iki dhewe, nanging aku sinau materi kasebut kanthi apik. Mlaku bisnis sampeyan uga tegese ketemu karo klien, nyoba promosi perusahaan, nangani akeh masalah administratif ing perusahaan, lan liya-liyane. Nanging siji cara utawa liyane, apa wis ana ing dikarepake. Aku lan tim nggunakake produk kasebut ing karya saben dina. Ana sawetara ide lan solusi sing ora apik sing butuh wektu, nanging pungkasane dadi jelas yen iki dudu alat sing bisa digunakake, ora ana sing nggunakake, lan ora nggawe Veliam.
Help Desk
Iku worth nyebutke carane HelpDesk teka. Iki minangka crita liyane, amarga iki wis dadi versi Veliam sing kaping telu, lan beda banget karo kabeh versi sadurunge. Saiki dadi sistem sing prasaja lan intuisi tanpa lonceng lan peluit sing ora perlu, kanthi kemampuan kanggo nggabungake karo domain lan ngakses profil pangguna sing padha saka ngendi wae liwat link ing email. Lan sing paling JahwΓ©h, iku bisa kanggo nyambung menyang requester liwat VNC saka ngendi wae (ing ngarep utawa ing kantor) langsung saka wangun request, tanpa VPN utawa port Terusake. Aku bakal pitutur marang kowe carane kita tekan kene, apa sadurunge, lan apa pancasan elek kita digawe.
Kita nyambung menyang pangguna liwat TeamViewer sing kondhang. Kabeh komputer sing pangguna sing kita layani wis diinstal TV. Wangsulan: Bab ingkang pisanan kita nindakake salah, lan salajengipun dibusak, punika naleni saben klien HD kanggo hardware. Kepiye pangguna mlebu menyang sistem HD kanggo ngirim panjaluk? Saliyane TV, saben wong duwe sarana khusus sing ditulis ing Lazarus sing diinstal ing komputer (akeh sing bakal mbukak mata ing wektu iki lan bisa uga miwiti googling apa iku, nanging sing paling aku ngerti ing antarane basa sing dikompilasi yaiku Delphi, lan Lazarus meh padha, mung gratis). Sejatine, pangguna ngluncurake file kumpulan khusus sing ngluncurake sarana iki, sing banjur maca HWID sistem, sawise browser diluncurake lan otorisasi kedadeyan. Yagene iki ditindakake? Ing sawetara perusahaan, jumlah pangguna sing dilayani diitung kanthi individu, lan rega saben wulan ditemtokake adhedhasar jumlah wong. Iki bisa dingerteni, sampeyan ujar, nanging kenapa sambungan menyang hardware? Gampang banget: sawetara wong teka ing omah lan njaluk panjaluk saka laptop omah kanthi gaya "dadi kabeh sing apik kanggo aku." Saliyane maca HWID sistem, sarana kasebut ngekstrak ID TeamViewer saiki saka pendaptaran lan dikirim menyang kita. Teamviewer duwe API kanggo integrasi. Lan kita nggawe integrasi iki. Nanging ana siji nyekel. API iki ora bisa digunakake kanggo nyambung menyang komputer pangguna kajaba pangguna kanthi tegas miwiti sesi kasebut, lan sawise nyoba nyambung, pangguna kudu ngeklik "konfirmasi." Ing wektu iku, katon logis kanggo kita yen ora ana sing kudu nyambung tanpa ijin pangguna, lan amarga wong kasebut ana ing komputer, dheweke bakal miwiti sesi kasebut lan nanggapi kanthi bener kanggo panjaluk sambungan remot. Kabeh dadi beda. Pelamar lali kanggo mencet miwiti sesi, lan kudu marang wong-wong mau iki sak obrolan telpon. Iki wektu-akeh lan mumetake kanggo loro pihak melu. Kajaba iku, ora umum yen wong ninggalake panjaluk, nanging mung ngidini sambungan nalika nedha awan. Amarga masalah kasebut ora kritis lan dheweke ora pengin proses kerjane diganggu. Patut, dheweke ora bakal mencet tombol apa wae kanggo ngidini sambungan kasebut. Iki minangka fungsi tambahan nalika menehi wewenang ing HelpDesk: maca ID TeamViewer. Kita ngerti sandhi permanen sing digunakake nalika nginstal Teamviewer. Luwih tepate, mung sistem sing ngerti babagan iki, amarga dibangun ing installer lan ing sistem kita. Patut, ana tombol sambungan saka aplikasi, nalika ngeklik ora perlu ngenteni apa-apa, nanging Teamviewer langsung mbukak lan sambungan digawe. AkibatΓ©, ana rong jinis sambungan bisa. Liwat API Teamviewer resmi lan kita dhewe. Aku kaget, sing pisanan meh langsung mandheg digunakake, sanajan ana instruksi kanggo nggunakake mung ing kasus khusus lan nalika pangguna dhewe menehi ijin. Saiki kita isih butuh keamanan. Nanging ternyata para pelamar ora butuh iki. Padha kabeh rampung oke karo disambungake menyang tanpa tombol konfirmasi. Lan amarga iki kedadeyan, fungsi sambungan API banjur diilangi amarga ora perlu.
Transisi menyang multithreading ing Linux
Pitakonan nyepetake pemindaian jaringan kanggo dhaptar port sing wis ditemtokake lan mung ping obyek jaringan wis suwe saya mundhak. Solusi pisanan sing dipikirake yaiku multithreading. Wiwit wektu utama ngginakaken ing ping nunggu paket bali, lan ping sabanjurΓ© ora bisa miwiti nganti paket sadurungΓ© bali, iki wis dadi cukup alon kanggo perusahaan karo malah 20+ server lan peralatan jaringan. Masalahe yaiku paket siji bisa ilang, lan ora ana gunane langsung ngabari administrator sistem. Dheweke bakal cepet mandheg ngrungokake spam kasebut. Mulane, perlu ping saben obyek kaping pirang-pirang sadurunge nyimpulake yen ora kasedhiya. Tanpa rinci banget, penting kanggo parallelize proses kasebut amarga yen ora, administrator sistem bakal sinau babagan masalah kasebut saka klien, dudu saka sistem pemantauan.
PHP dhewe ora ndhukung multithreading metu saka kothak. Iku ndhukung multiprocessing, lan sampeyan bisa garpu. Nanging aku wis nulis mekanisme polling, lan aku pengin nggawe supaya aku bisa maca kabeh kelenjar sing dibutuhake saka database sapisan, ping kabeh bebarengan, ngenteni respon saka saben, lan mung banjur nulis data. Iki nyimpen panjalukan diwaca. Multithreading pas karo ide iki. PHP duwe modul sing disebut PThreads, sing ngidini multithreading bener. Nyetel ing PHP 7.2 njupuk dicokot adil saka fiddling, nanging bisa. Pindai port lan ping dadi luwih cepet. Nanging, umpamane, 15 detik saben roundtrip, proses iki saiki butuh 2 detik. Iku asil apik.
Audit cepet perusahaan anyar
Kepiye fungsi kanggo ngumpulake macem-macem metrik lan karakteristik hardware? Iku prasaja. Kadhangkala kita ditugasake kanggo audit infrastruktur IT saiki. Bab sing padha uga perlu kanggo nyepetake audit klien anyar. We needed soko sing bakal ngidini kita teka menyang perusahaan medium utawa gedhe lan cepet njaluk aran apa padha duwe. Ing mratelakake panemume, mung wong-wong sing pengin nggawe urip angel kanggo awake dhewe mblokir ping ing jaringan internal, lan ing pengalaman kita, wong kuwi mung sawetara. Nanging padha ana. Mula, kita bisa cepet mindhai jaringan kanggo piranti kanthi ping prasaja. Banjur kita bisa nambah lan mindai kanggo mbukak port kapentingan. Ateges, fungsi iki wis ana; kita mung perlu kanggo nambah printah saka server tengah kanggo server abdi, supaya bakal mindai jaringan kasebut lan nambah kabeh sing ditemokake ing dhaftar. Aku kelalen nyatakake yen kita nganggep yen kita wis duwe gambar sing wis siap karo sistem sing dikonfigurasi (server ngawasi budak), sing mung bisa disebarake menyang klien sajrone audit lan nyambungake menyang awan.
Nanging asil audit biasane kalebu akeh informasi sing beda-beda, lan salah sijine yaiku jinis piranti apa sing ana ing jaringan. Kita utamane kepengin weruh Windows server lan workstation Windows Minangka bagΓ©an saka domain. Ing perusahaan ukuran menengah lan gedhΓ©, ora ananΓ© domain mbokmenawa minangka pangecualian tinimbang aturan. Kanggo ngomong basa sing padha, perusahaan ukuran menengah, miturutku, ana 100+ wong. Kita kudu nemokake cara kanggo ngumpulake data saka kabeh mesin lan server Windows, ngerti alamat IP lan akun administrator domain, tanpa kudu nginstal piranti lunak apa wae ing saben mesin. Antarmuka WMI mbantu. Windows Instrumentasi Manajemen (WMI) secara harfiah tegese instrumentasi manajemen WindowsWMI minangka salah sawijining teknologi dhasar kanggo manajemen lan pemantauan terpusat saka macem-macem bagean infrastruktur komputer ing sangisore kendali platform kasebut. WindowsDijupuk saka wiki. Banjur aku kudu ngowahi maneh kanggo mbangun wmic (klien WMI) kanggo DebianSawise kabeh wis siap, sing isih ana yaiku nggoleki informasi sing dibutuhake liwat wmic menyang node sing dibutuhake. Liwat WMI, sampeyan bisa entuk Windows komputer meh kabeh informasi, lan sing luwih penting, sampeyan uga bisa ngontrol komputer liwat komputer kasebut, contone, ngirim kanggo urip maneh. Iki carane ngumpulake informasi babagan Windows stasiun lan server ing sistem kita. Iki dilengkapi karo informasi saiki babagan indikator beban sistem saiki. Kita njaluk iki luwih kerep, dene informasi perangkat keras luwih jarang. Sawise iki, audit dadi luwih nyenengake.
Kaputusan babagan distribusi piranti lunak
Kita nggunakake sistem saben dina, lan saben anggota staf teknis tansah mbukak. Kita panginten bisa nuduhake apa sing wis ana karo wong liya. Sistem kasebut durung siap kanggo distribusi. Akeh sing kudu digarap maneh kanggo ngowahi versi ing papan dadi solusi SaaS. Iki kalebu owah-owahan ing macem-macem aspek teknis sistem (sambungan remot, dhukungan), analisis lisensi modul, sharding database klien, skala saben layanan, lan ngembangake sistem nganyari otomatis kanggo kabeh komponen. Nanging iki sing bakal dibahas ing bagean kapindho artikel iki.
Nganyari
Source: www.habr.com
