TR-069 dalam Mikrotik. Mencuba Freeacs sebagai pelayan konfigurasi auto untuk RouterOS

Dalam artikel ini, saya akan cuba menerangkan langkah demi langkah proses memasang pelayan ujian untuk projek yang indah Freeacs kepada keadaan beroperasi sepenuhnya, dan tunjukkan teknik praktikal untuk bekerja dengan mikrotik: konfigurasi melalui parameter, pelaksanaan skrip, mengemas kini, memasang modul tambahan, dsb.

Tujuan artikel itu adalah untuk menggalakkan rakan sekerja untuk berhenti menguruskan peranti rangkaian menggunakan garu dan tongkat yang dahsyat, dalam bentuk skrip yang ditulis sendiri, Dude, Ansible, dll. Dan, pada kesempatan ini, untuk menyebabkan bunga api dan kegembiraan besar-besaran dalam segi empat sama.

0. Pilihannya

Mengapa freeacs dan bukan genie-acs disebut dalam mikrotik-wiki, bagaimana lebih hidup?
Kerana menurut genie-acs dengan mikrotik terdapat penerbitan oleh orang Sepanyol. Di sini mereka pdf ΠΈ video dari MUM tahun lepas. Autokarikatur pada slaid memang menarik, tetapi saya ingin lari daripada konsep menulis skrip, menjalankan skrip, menjalankan skrip...

1. Pasang freeacs

Kami akan memasangnya dalam Centos7, dan memandangkan peranti menghantar agak banyak data, dan ACS berfungsi secara aktif dengan pangkalan data, kami tidak akan tamak dengan sumber. Untuk kerja yang selesa, kami akan memperuntukkan 2 teras CPU, 4GB RAM dan 16GB storan ssd raid10 pantas. Saya akan memasang freeacs dalam bekas Proxmox VE lxc, dan anda boleh menggunakan mana-mana alat yang sesuai untuk anda.
Pastikan anda menetapkan masa yang betul pada mesin ACS anda.

Sistem ini akan menjadi satu ujian, jadi kami tidak akan membelah rambut dan hanya menggunakan skrip pemasangan yang disediakan seperti sedia ada.

wget https://raw.githubusercontent.com/freeacs/freeacs/master/scripts/install_centos.sh
chmod +x install_centos.sh
./ install_centos.sh

Sebaik sahaja skrip selesai, anda boleh terus masuk ke antara muka web melalui IP mesin, dengan kelayakan admin/freeacs

TR-069 dalam Mikrotik. Mencuba Freeacs sebagai pelayan konfigurasi auto untuk RouterOS
Ini adalah antara muka minimalis yang bagus, dan betapa sejuk dan pantas semuanya ternyata

2. Persediaan awal freeacs

Unit pengurusan asas untuk ACS ialah unit atau CPE (Customer Premises Equipment). Dan perkara paling penting yang kita perlukan untuk menguruskan unit ialah Jenis Unit mereka, i.e. model peralatan yang mentakrifkan satu set parameter boleh dikonfigurasikan bagi unit dan perisiannya. Tetapi walaupun kami tidak tahu cara mencipta Jenis Unit baharu dengan betul, sebaiknya tanya unit itu sendiri mengenainya dengan menghidupkan Mod Penemuan.

Mod ini sama sekali tidak boleh digunakan dalam pengeluaran, tetapi kita perlu menghidupkan enjin secepat mungkin dan melihat keupayaan sistem. Semua tetapan asas disimpan dalam /opt/freeacs-*. Oleh itu, kami buka

 vi /opt/freeacs-tr069/config/application-config.conf 

, kita dapati

discovery.mode = false

dan tukar kepada

discovery.mode = true

Di samping itu, kami ingin meningkatkan saiz fail maksimum yang akan berfungsi dengan nginx dan mysql. Untuk mysql, tambah baris ke /etc/my.cnf

max_allowed_packet=32M

, dan untuk nginx, tambahkan pada /etc/nginx/nginx.conf

client_max_body_size 32m;

ke bahagian http. Jika tidak, kami akan dapat bekerja dengan perisian tegar tidak lebih daripada 1J.

Kami but semula, dan kami bersedia untuk bekerja dengan peranti.

Dan dalam peranan peranti (CPE) kita akan mempunyai bayi yang bekerja keras hAP AC lite.

Sebelum membuat sambungan ujian, adalah dinasihatkan untuk mengkonfigurasi CPE secara manual kepada konfigurasi kerja minimum supaya parameter yang ingin anda konfigurasikan pada masa hadapan tidak kosong. Untuk penghala, minimum yang boleh anda lakukan ialah mendayakan klien dhcp pada ether1, pasang pakej tr-069client dan tetapkan kata laluan.

3. Sambungkan Mikrotik

Adalah dinasihatkan untuk menyambungkan semua unit menggunakan nombor siri yang sah sebagai log masuk. Kemudian semuanya akan jelas kepada anda dalam log. Seseorang menasihati menggunakan WAN MAC - jangan percaya. Jika seseorang menggunakan pasangan log masuk/lulus yang biasa kepada semua orang, elakkan mereka.

Buka log tr-069 untuk memantau "rundingan"

tail -f /var/log/freeacs-tr069/tr069-conversation.log

Buka winbox, item menu TR-069.
URL ACS: http://10.110.0.109/tr069/prov (ganti dengan IP anda)
Nama pengguna: 9249094C26CB (salin nombor siri dari sistem>papan penghala)
Kata laluan: 123456 (tidak diperlukan untuk penemuan, tetapi diperlukan)
Kami tidak menukar selang makluman berkala. Kami akan mengeluarkan tetapan ini melalui ACS kami

Di bawah ialah tetapan untuk permulaan sambungan jauh, tetapi saya tidak dapat memastikan mikrotik berfungsi dengan ini. Walaupun permintaan jauh berfungsi di luar kotak dengan telefon. Kita perlu memikirkannya.

TR-069 dalam Mikrotik. Mencuba Freeacs sebagai pelayan konfigurasi auto untuk RouterOS

Selepas mengklik butang Guna, data akan ditukar di terminal, dan dalam antara muka web Freeacs anda akan dapat melihat penghala kami dengan Jenis Unit "hAPaclite" yang dibuat secara automatik.

TR-069 dalam Mikrotik. Mencuba Freeacs sebagai pelayan konfigurasi auto untuk RouterOS

Penghala disambungkan. Anda boleh melihat ke dalam Jenis Unit yang dibuat secara automatik. Pembukaan Easy Provisioning > Unit Type > Unit Type Overview > hAPaclite. Apa yang tidak ada! Sebanyak 928 parameter (saya melihat dalam shell). Sama ada banyak atau sedikit, kami akan memikirkannya kemudian, tetapi buat masa ini kami hanya akan melihat sekilas. Inilah maksud Jenis Unit. Ini ialah senarai parameter yang disokong dengan kunci tetapi tiada nilai. Nilai ditetapkan dalam tahap di bawah - Profil dan Unit.

4. Konfigurasi Mikrotik

Sudah tiba masanya untuk memuat turun panduan antara muka web Manual 2011 ini adalah seperti sebotol wain tua yang baik. Mari kita buka dan biarkan ia bernafas.

Dan kami sendiri, dalam antara muka web, klik pada pensel di sebelah unit kami dan pergi ke mod konfigurasi unit. Ia kelihatan seperti ini:

TR-069 dalam Mikrotik. Mencuba Freeacs sebagai pelayan konfigurasi auto untuk RouterOS

Mari kita lihat secara ringkas apa yang menarik di halaman ini:

Blok konfigurasi unit

  • Profil: Ini ialah profil dalam Jenis Unit. Hierarkinya adalah seperti ini: UnitType > Profile > Unit. Iaitu, kita boleh membuat, sebagai contoh, profil hAPaclite > hotspot ΠΈ hAPaclite > branch, tetapi dalam model peranti

Blok peruntukan dengan butang
Petua alat membayangkan bahawa semua butang dalam blok Peruntukan boleh menggunakan konfigurasi serta-merta melalui ConnectionRequestURL. Tetapi, seperti yang saya katakan di atas, ini tidak berfungsi, jadi selepas menekan butang anda perlu memulakan semula klien tr-069 pada mikrotik untuk memulakan peruntukan secara manual.

  • Freq/Spread: Berapa kali seminggu untuk menyampaikan konfigurasi Β±% untuk mengurangkan beban pada pelayan dan saluran komunikasi. Secara lalai ia adalah 7/20, i.e. setiap hari Β± 20% dan petunjuk bagaimana keadaannya dalam beberapa saat. Tiada gunanya menukar kekerapan penghantaran lagi, kerana... akan ada bunyi tambahan dalam log dan tetapan tidak akan sentiasa digunakan seperti yang diharapkan

Blok sejarah peruntukan (48 jam terakhir)

  • Dari segi penampilan, cerita itu seperti cerita, tetapi dengan mengklik pada tajuk anda dibawa ke alat carian pangkalan data yang mudah, dengan regexp dan barang-barang

Blok parameter

Blok terbesar dan paling penting, di mana, sebenarnya, parameter untuk unit tertentu ditetapkan dan dibaca. Sekarang kita hanya melihat parameter sistem yang paling penting, tanpanya ACS berfungsi dengan unit adalah mustahil. Tetapi kami ingat bahawa dalam Jenis Unit kami, kami mempunyainya - 928. Mari kita lihat semua makna dan tentukan apa yang semua orang makan dengan Mikrotik.

4.1 Membaca parameter

Dalam blok Peruntukan, klik butang Baca semua. Terdapat tulisan merah di blok itu. Lajur akan muncul di sebelah kanan Nilai CPE (semasa).. Dalam parameter sistem, ProvisioningMode telah bertukar kepada READALL.

TR-069 dalam Mikrotik. Mencuba Freeacs sebagai pelayan konfigurasi auto untuk RouterOS

Dan... tiada apa yang akan berlaku kecuali mesej dalam System.X_FREEACS-COM.IM.Message Kick failed at....

Mulakan semula klien TR-069 atau but semula penghala, dan teruskan menyegarkan halaman penyemak imbas sehingga anda mendapat parameter di sebelah kanan dalam segi empat tepat kelabu yang ceria
Jika sesiapa ingin menghirup wain lama, mod ini diterangkan dalam manual sebagai mod Pemeriksaan 10.2. Ia dihidupkan dan berfungsi sedikit berbeza, tetapi intipatinya diterangkan dengan baik

TR-069 dalam Mikrotik. Mencuba Freeacs sebagai pelayan konfigurasi auto untuk RouterOS

Mod READALL akan dimatikan sendiri selepas 15 minit, dan kami akan cuba memikirkan perkara yang berguna di sini, dan perkara yang boleh dibetulkan "dengan cepat" semasa kami berada dalam mod ini.

Anda boleh menukar alamat IP, dayakan/lumpuhkan antara muka, peraturan firewall, yang mempunyai ulasan (jika tidak, keadaan huru-hara sepenuhnya), Wi-Fi dan sebagainya.

Iaitu, belum mungkin untuk mengkonfigurasi mikrotik secara waras hanya menggunakan TR-069. Tetapi anda boleh memantaunya dengan baik. Statistik mengenai antara muka dan statusnya, memori percuma, dsb. tersedia.

4.2 Menyampaikan parameter

Sekarang mari cuba hantar parameter ke penghala, melalui tr-069, dengan cara "semula jadi". Mangsa pertama ialah Device.DeviceInfo.X_MIKROTIK_SystemIdentity. Kami mendapatinya dalam parameter Unit Semua. Seperti yang anda lihat, ia tidak dinyatakan. Ini bermakna mana-mana unit sendiri boleh mempunyai sebarang Identiti. Cukuplah bertolak ansur dengan ini!
Klik kotak pilihan dalam lajur cipta, tetapkan nama Mr.White dan klik butang Kemas kini parameter. Anda sudah meneka apa yang akan berlaku seterusnya. Semasa sesi komunikasi seterusnya dengan ibu pejabat, penghala mesti menukar Identitinya.

TR-069 dalam Mikrotik. Mencuba Freeacs sebagai pelayan konfigurasi auto untuk RouterOS

Tetapi ini tidak mencukupi untuk kita. Parameter seperti Identiti adalah baik untuk sentiasa ada semasa mencari unit yang dikehendaki. Klik pada nama parameter dan tandai kotak semak Paparan(D) dan Boleh Cari (S). Kunci parameter bertukar kepada RWSD (Ingat, nama dan kunci ditetapkan pada tahap Jenis Unit tertinggi)

TR-069 dalam Mikrotik. Mencuba Freeacs sebagai pelayan konfigurasi auto untuk RouterOS

Nilai kini bukan sahaja dipaparkan dalam senarai carian umum, tetapi juga tersedia untuk carian dalam Support > Search > Advanced form

TR-069 dalam Mikrotik. Mencuba Freeacs sebagai pelayan konfigurasi auto untuk RouterOS

Kami memulakan peruntukan dan melihat Identiti. Hello Mr.White! Kini anda tidak akan dapat menukar identiti anda semasa tr-069client sedang berjalan

TR-069 dalam Mikrotik. Mencuba Freeacs sebagai pelayan konfigurasi auto untuk RouterOS

4.3 Melaksanakan skrip

Oleh kerana kita telah mengetahui bahawa kita tidak boleh hidup tanpa mereka, mari kita laksanakannya.

Tetapi sebelum kita mula bekerja dengan fail, kita perlu membetulkan arahan tersebut public.url dalam fail /opt/freeacs-tr069/config/application-config.conf
Kami masih mempunyai konfigurasi ujian yang dipasang dengan satu skrip. Adakah anda sudah lupa?

# --- Public url (used for download f. ex.) ---
public.url = "http://10.110.0.109"
public.url: ${?PUBLIC_URL}

Kami but semula ACS dan terus ke Files & Scripts.

TR-069 dalam Mikrotik. Mencuba Freeacs sebagai pelayan konfigurasi auto untuk RouterOS

Tetapi apa yang sedang dibuka untuk kita kini tergolong dalam Jenis Unit, i.e. secara global kepada semua penghala hAP ac lite, sama ada penghala cawangan, hotspot atau capsman. Kami tidak memerlukan tahap yang tinggi lagi, jadi sebelum bekerja dengan skrip dan fail, kami harus membuat profil. Anda boleh memanggil ini sebagai "tugas" peranti.

Mari jadikan bayi kita sebagai pelayan masa. Kedudukan yang baik dengan pakej perisian yang berasingan dan sebilangan kecil parameter. Mari pergi ke Easy Provisioning > Profile > Create Profile dan buat profil dalam Jenis Unit: hAPaclite pelayan masa. Kami tidak mempunyai sebarang parameter dalam profil lalai, jadi tiada apa-apa untuk disalin Salin parameter daripada: β€œjangan salin...”

TR-069 dalam Mikrotik. Mencuba Freeacs sebagai pelayan konfigurasi auto untuk RouterOS

Tiada parameter di sini lagi, tetapi mungkin untuk menetapkan parameter yang nanti kita mahu lihat pada pelayan masa kita, digabungkan bersama dari hAPaclite. Sebagai contoh, alamat am pelayan NTP.
Mari pergi ke konfigurasi unit dan alihkannya ke profil pelayan masa

Kami akhirnya pergi Files & Scripts, buat skrip, dan di sini roti yang sangat mudah menanti kami.

Untuk melaksanakan skrip pada unit, kita perlu memilih Jenis:TR069_SCRIPT Π° Nama ΠΈ Nama Sasaran mesti mempunyai sambungan .alter
Pada masa yang sama, untuk skrip, tidak seperti perisian, anda boleh memuat turun fail yang sudah siap atau hanya menulis/mengeditnya di medan Kandungan. Cuba kita tulis di sana.

Dan supaya anda boleh melihat hasilnya dengan segera, mari tambahkan vlan pada penghala pada ether1

/interface vlan
add interface=ether1 name=vlan1 vlan-id=1

TR-069 dalam Mikrotik. Mencuba Freeacs sebagai pelayan konfigurasi auto untuk RouterOS

Memandu masuk, tekan Upload dan anda sudah selesai. Skrip kami vlan1.alter menunggu di sayap.

Nah, mari pergi? Tidak. Kami juga perlu menambah kumpulan untuk profil kami. Kumpulan tidak termasuk dalam hierarki peralatan, tetapi diperlukan untuk mencari unit dalam UnitType atau Profil dan diperlukan untuk melaksanakan skrip melalui Peruntukan Lanjutan. Biasanya, kumpulan dikaitkan dengan lokasi dan mempunyai struktur bersarang. Mari buat kumpulan Rusia.

TR-069 dalam Mikrotik. Mencuba Freeacs sebagai pelayan konfigurasi auto untuk RouterOS

Bolehkah anda bayangkan kami hanya dapat mengecilkan carian daripada "Pelayan sepanjang masa di dunia pada hAPaclite" kepada "Pelayan sepanjang masa di Rusia pada hAPaclite". Masih terdapat lapisan besar perkara menarik dengan kumpulan, tetapi kami tidak mempunyai masa. Mari pergi ke skrip.

Advanced Provisioning > Job > Create Job

TR-069 dalam Mikrotik. Mencuba Freeacs sebagai pelayan konfigurasi auto untuk RouterOS

Oleh kerana kami, selepas semua, dalam mod Lanjutan, di sini anda boleh menentukan sekumpulan syarat yang berbeza untuk memulakan tugas, tingkah laku sekiranya berlaku ralat, ulangan dan tamat masa. Saya mengesyorkan membaca semua ini dalam manual atau membincangkannya kemudian apabila melaksanakannya dalam pengeluaran. Buat masa ini, kami hanya akan meletakkan n1 dalam peraturan Henti supaya tugasan akan berhenti sebaik sahaja ia selesai pada unit pertama kami.

Kami mengisi maklumat yang diperlukan, dan yang tinggal hanyalah melancarkannya!

TR-069 dalam Mikrotik. Mencuba Freeacs sebagai pelayan konfigurasi auto untuk RouterOS

Tekan START dan tunggu. Kini kaunter peranti yang dibunuh oleh skrip yang kurang dinyahpepijat akan berjalan dengan pantas! Sudah tentu tidak. Tugasan sedemikian mengambil masa yang lama, dan ini adalah perbezaannya daripada skrip, Ansible, dsb. Unit sendiri memohon untuk tugas mengikut jadual atau apabila ia muncul pada rangkaian, ACS menjejaki unit mana yang telah menerima tugasan, dan cara mereka menyelesaikannya, dan merekodkannya dalam parameter unit. Terdapat 1 unit dalam kumpulan kami, dan jika terdapat 1001 daripadanya, admin akan melancarkan tugas ini dan pergi memancing

Ayuh. But semula penghala atau mulakan semula klien TR-069. Semuanya sepatutnya berjalan lancar dan Mr.White akan menerima vlan baharu. Dan tugas peraturan Henti kami akan bertukar kepada status DIJEDA. Iaitu, ia masih boleh dimulakan semula atau diubah. Jika anda mengklik SELESAI, tugasan akan diarkibkan

4.4 Mengemas kini perisian

Ini adalah perkara yang sangat penting, kerana perisian tegar Mikrotik adalah modular, tetapi penambahan modul tidak mengubah versi perisian tegar keseluruhan peranti. ACS kami adalah normal dan tidak biasa dengan ini.
Kini kami akan melakukannya dalam gaya cepat&kotor dan menolak modul NTP ke dalam perisian tegar umum serta-merta, tetapi sebaik sahaja versi dikemas kini pada peranti, kami tidak akan dapat menambah modul lain dengan cara yang sama.
Dalam pengeluaran, adalah lebih baik untuk tidak menggunakan helah sedemikian, dan memasang modul yang menjadi pilihan untuk Jenis Unit hanya menggunakan skrip.

Jadi, perkara pertama yang perlu kita lakukan ialah menyediakan pakej perisian versi dan seni bina yang diperlukan, dan meletakkannya pada beberapa pelayan web yang boleh diakses. Untuk ujian, sesiapa sahaja yang boleh dihubungi oleh Mr.White kami akan melakukan ujian, tetapi untuk pengeluaran adalah lebih baik untuk memasang cermin pengemaskinian automatik perisian yang diperlukan, yang tidak menakutkan untuk diletakkan di web
Penting! Jangan lupa untuk sentiasa memasukkan pakej tr-069client dalam kemas kini anda!

Ternyata, panjang laluan ke paket adalah sangat penting! Apabila saya cuba menggunakan sesuatu seperti http://192.168.0.237/routeros/stable/mipsbe/routeros-mipsbe-6.45.6.npk, mikrotik jatuh ke dalam sambungan kitaran dengan sumber, menghantar TRANSFERCOMPLETE berulang ke log tr-069. Dan saya menghabiskan beberapa sel saraf untuk mencari tahu apa yang salah. Oleh itu, buat masa ini mari kita letakkan pada akarnya, sehingga kita mengetahuinya

Jadi kita sepatutnya mempunyai tiga fail npk yang tersedia melalui http. Ternyata begini bagi saya

http://192.168.0.241/routeros-mipsbe-6.45.6.npk
http://192.168.0.241/routeros/stable/mipsbe/ntp-6.45.6-mipsbe.npk
http://192.168.0.241/routeros/stable/mipsbe/tr069-client-6.45.6-mipsbe.npk

Sekarang ini perlu diformatkan ke dalam fail xml dengan FileType = "1 Perisian Naik Taraf Imej", yang akan kami suapkan ke Mikrotik. Biarkan namanya ros.xml

Kami melakukannya mengikut arahan daripada mikrotik-wiki:

<upgrade version="1" type="links">
    <config />
    <links>
        <link>
            <url>http://192.168.0.241/routeros-mipsbe-6.45.6.npk</url>
        </link>
        <link>
            <url>http://192.168.0.241/ntp-6.45.6-mipsbe.npk</url>
        </link>
        <link>
            <url>http://192.168.0.241/tr069-client-6.45.6-mipsbe.npk</url>
        </link>
    </links>
</upgrade>

Terdapat kekurangan yang ketara Username/Password untuk mengakses pelayan muat turun. Anda boleh cuba memasukkan ini seperti dalam perenggan A.3.2.8 protokol tr-069:

<link>
<url>http://192.168.0.237/routeros/stable/mipsbe/ntp-6.45.6-mipsbe.npk</url>
<Username>user</Username>
<Password>pass</Password>
</link>

Atau tanya pegawai Mikrotik secara langsung tentang panjang laluan maksimum ke *.npk

Jom pergi ke tempat yang kita tahu Files & Scripts, dan buat fail PERISIAN di sana dengan Nama:ros.xml, Nama Sasaran:ros.xml dan Versi:6.45.6
Perhatian! Versi di sini mesti dinyatakan dengan tepat dalam format yang ia dipaparkan pada peranti dan diluluskan dalam parameter System.X_FREEACS-COM.Device.SoftwareVersion.

Pilih fail xm kami untuk dimuat naik dan anda sudah selesai.

TR-069 dalam Mikrotik. Mencuba Freeacs sebagai pelayan konfigurasi auto untuk RouterOS

Kini kami mempunyai banyak cara untuk mengemas kini peranti. Melalui Wizard dalam menu utama, melalui Peruntukan Lanjutan dan tugasan dengan jenis PERISIAN, atau hanya pergi ke konfigurasi unit dan klik Naik Taraf. Jom pilih jalan yang paling mudah, kalau tak pasal tu dah bengkak.

TR-069 dalam Mikrotik. Mencuba Freeacs sebagai pelayan konfigurasi auto untuk RouterOS

Kami menekan butang, memulakan peruntukan dan anda selesai. Program ujian selesai. Kini kita boleh melakukan lebih banyak lagi dengan mikrotik.

5. Kesimpulannya

Apabila saya mula menulis, saya mula-mula ingin menerangkan sambungan telefon IP, dan menggunakan contohnya untuk menerangkan betapa hebatnya apabila tr-069 berfungsi dengan mudah dan mudah. Tetapi kemudian, semasa saya maju dan menggali bahan-bahan, saya fikir bahawa bagi mereka yang menyambungkan Mikrotik, tiada telefon yang akan menakutkan untuk kajian bebas.

Pada dasarnya, Freeacs, yang kami uji, sudah boleh digunakan dalam pengeluaran, tetapi untuk ini anda perlu mengkonfigurasi keselamatan, SSL, anda perlu mengkonfigurasi Mikrotik untuk konfigurasi automatik selepas set semula, anda perlu menyahpepijat penambahan Jenis Unit yang betul, menganalisis kerja perkhidmatan web dan shell gabungan, dan banyak lagi. Cuba, cipta, dan tulis sekuel!

Semua orang, terima kasih atas perhatian anda! Saya akan gembira melihat pembetulan dan komen!

Senarai bahan yang digunakan dan pautan berguna:

Benang forum yang saya temui apabila saya mula mencari topik tersebut
TR-069 CPE WAN Pindaan Protokol Pengurusan-6
wiki Freeacs
Parameter tr-069 dalam Mikrotik, dan surat-menyuratnya kepada arahan terminal

Sumber: www.habr.com