दो MikroTiks का उपयोग करके हॉट बैकअप के लिए समर्थन

पिछले लेख में, मैंने मिक्रोटिक राउटर से केंद्रीकृत कॉन्फ़िगरेशन बैकअप लेने के संभावित तरीके के बारे में बात की थी। ऐसा लगता है कि कोई शांत हो सकता है, लेकिन कुछ शाखाओं के लिए प्रबंधन को नेटवर्क के किसी भी हिस्से की विफलता की स्थिति में काम की एक छोटी बहाली की आवश्यकता होती है। पहली बात जो मन में आती है वह अपने आप होती है, आपको पास में लोहे के दो समान टुकड़े होने चाहिए। हालांकि, वीआरआरपी का उपयोग करने के लिए दूसरा तार्किक विचार कई कारणों से उपयुक्त नहीं है, जिनमें से एक आईपीएससी का उपयोग है। तो आपको फिर से बैसाखी को व्यवस्थित करने और सेमी-मैनुअल मोड में कॉन्फ़िगरेशन को सिंक्रनाइज़ करने की आवश्यकता है, अर्थात स्क्रिप्ट के लिए।

तर्क


1. ssh के माध्यम से सक्रिय राउटर से कनेक्ट करें और भौतिक इंटरफ़ेस का पता बदलें जिसके माध्यम से गर्म राउटर 10.0.0.1/24 से जुड़ा हुआ है
2. फ़ायरवॉल के साथ पोर्ट फ़ॉरवर्डिंग का उपयोग करके, हम ssh को एक सक्रिय के माध्यम से एक गर्म राउटर से जोड़ते हैं
3. हम यह सुनिश्चित करने के लिए सीरियल नंबर की जांच करते हैं कि हम वास्तव में गर्म राउटर से जुड़े हैं, ताकि सक्रिय को खतरा न हो
4. हम सक्रिय राउटर से ftp बैकअप लेते हैं और गर्म को रिबूट करते हैं
5. ssh के माध्यम से सक्रिय राउटर से कनेक्ट करें और भौतिक इंटरफ़ेस का मूल पता 10.0.0.2/24 पर लौटाएं, जिसके माध्यम से गर्म राऊटर जुड़ा हुआ है
मुझे इस कारण से बदलाव के लिए जोड़तोड़ की आवश्यकता है कि दिन में एक बार मैं सभी राउटर से बैकअप लेता हूं। आगे, जब मैं बैकअप को एक राउटर पर अपलोड करता हूं, तो मुझे इसे किसी भी तरह प्राप्त करने की आवश्यकता होगी, इसके लिए इसके पास पहले से ही 10.0.0.2/24 कॉन्फ़िगर किया गया पता होगा, और सक्रिय पर मैं अस्थायी रूप से पते को 10.0.0.1/24, इस आईपी में सेट कर दूंगा बैकअप कभी दिखाई नहीं देंगे। इस प्रकार, हम कॉन्फ़िगरेशन की पहचान प्राप्त करते हैं।

हम लोहे के गर्म टुकड़े को जोड़ते हैं


छवि

... जैसा कि चित्र में दिखाया गया है, अर्थात् यह मायने नहीं रखता है कि आप इंटरनेट और लैन को कैसे कनेक्ट करते हैं, आपके मामले में, यह केवल महत्वपूर्ण है कि जिस इंटरफेस के साथ हम सक्रिय और गर्म रूटर्स को कनेक्ट करते हैं, वही हो। आगे यह स्पष्ट होगा कि क्यों।

आइए इंटरफेस को एक समान तरीके से कॉन्फ़िगर करें - हां हां, इसमें कुछ भी आपराधिक नहीं है।

/add address=10.0.0.2/24 comment=backup disabled=no interface=ether10 network=10.0.0.0

लोहे के दोनों टुकड़ों पर हमें SSH की भी आवश्यकता है:

/set ssh address="" disabled=no port=2222

एक गैर-मानक पोर्ट होने दें, क्योंकि मानक जो आपको अभी भी पता नहीं है कि अभी भी क्या आवश्यकता हो सकती है।

पोर्ट को भी आगे बढ़ाएं:

/ip firewall nat add action=dst-nat chain=dstnat comment="dst-nat to knock-to hotbackup" disabled=no dst-port=2422 protocol=tcp to-addresses=10.0.0.2 to-ports=2222
/ip firewall nat add action=src-nat chain=srcnat comment="to knock-to hotbackup we either need to change source address from ssh being connected" disabled=no dst-address=10.0.0.2 dst-port=2222 protocol=tcp to-addresses=10.0.0.1


वास्तव में ऐसा है, दूसरे पते के रूप में स्रोत पते को बदलना, क्योंकि बैकअप राउटर पर पहले से ही कुछ डिफ़ॉल्ट गेटवे होंगे और यह इसके माध्यम से जवाब देने की कोशिश करेगा, और हमें सक्रिय राउटर के माध्यम से वापस जाने की आवश्यकता है।

इसके अलावा, हमें FTP की आवश्यकता है, लेकिन हम इसे अजनबियों से कवर करेंगे:

/set ftp address=10.0.0.0/24 disabled=no port=21

इस पर, तैयारी का काम पूरा हो गया है, हम स्क्रिप्ट खींचते हैं।

लिपि


पिछले अनुभव से पहले से ही एक रिक्त स्थान है, आपको बस कुछ स्पर्श जोड़ने की आवश्यकता है:

 #!/usr/bin/env python # -*- coding: utf-8 -*- # for SSH import paramiko from paramiko import SSHClient from paramiko import AutoAddPolicy # for versioning import datetime # for file operations import os # for sleep import time # for strip() import string # versioning Version = datetime.date.today() print "\n" + str(Version) # credentials array arrCreds = (\ ("R0", "11.22.33.44", "user0", "password0", "serial0"), \ ("R1", "1.1.1.1", "user1", "password1", "serial1"), \ ("R2", "2.2.2.2", "user2", "password2", "serial2"), \ ) # FTPD IP FtpdIP = "10.0.0.1/24" BackupIP = "10.0.0.2/24" sshCli = SSHClient() sshCli.set_missing_host_key_policy(AutoAddPolicy()) LogFile = "/var/log/remotes/scripts/scripts1.log" paramiko.util.log_to_file(LogFile, level=10) print "header done" # loop adresses inside given network for (site, host, user, Password, SerialNumberA) in arrCreds: print datetime.datetime.now() print "\n" + host # define operations ChangeBackupIfAddr = '/ip address set [/ip address find address="' + BackupIP + '"] address="' + FtpdIP + '"' SSHToBackup = "/system ssh address=" + BackupIP.replace('/24', '') + " port=2222 user=" + user + "\n" GetSerial = ':put [system routerboard get value-name=serial-number]' GetBackupFromFtp = "/tool fetch address=" + FtpdIP.replace('/24', '') + " mode=ftp src-path=" + site + "_" + host + "_" + str(Version) + ".backup" + " user=" + user + " password=" + Password ApplyBackup = "/system backup load name=" + site + "_" + host + "_" + str(Version) + ".backup" ChangeBackupIfAddrA = '/ip address set [/ip address find address="' + FtpdIP + '"] address="' + BackupIP + '"' # try for not to fail the whole script on one error try: print "connecting to active router.." + site + "_" + host + "@" + user + ":" + Password sshCli.connect(str(host), port=2222, username=str(user), password=str(Password)) time.sleep(2) print "..done" print "changing backup interface IP address form 10.0.0.2/24 to 10.0.0.1/24.. " + ChangeBackupIfAddr sshCli.exec_command(ChangeBackupIfAddr) print "..done" print "connecting to hotbackup router.. " sshCli.connect(str(host), port=2422, username=str(user), password=str(Password)) time.sleep(2) print "..done" # we need to check if we're not still on active router print "checking router serial number.. " + GetSerial stdin, stdout, stderr = sshCli.exec_command(GetSerial) type(stdin) SerialNumberCurrent = stdout.read() SerialNumberCurrent = SerialNumberCurrent.strip() print "SNA=" + SerialNumberCurrent # if SerialNumber == Active router SN, so we are still on active router and must stop script if SerialNumberCurrent == SerialNumberA: print "we are still on active device, aborting host processing" continue else: print "successfully connected to hotbackup device, going on futher host processing" print "downloading backup from active router ftp.. /" + GetBackupFromFtp sshCli.exec_command(GetBackupFromFtp) time.sleep(2) print "..backup downloaded from active router" print "apply backup on HotBackup.. /" + ApplyBackup sshCli.exec_command(ApplyBackup) # and say yes sshCli.exec_command("y") time.sleep(2) print "..done" print "connecting to active router.. " sshCli.connect(str(host), port=2222, username=str(user), password=str(Password)) time.sleep(2) print "..done" print "giving backup interface address 10.0.0.2/24.." sshCli.exec_command(ChangeBackupIfAddrA) time.sleep(2) print "..done" except: print "Error connecting to host", host 


जब सक्रिय राउटर टूट जाता है, तो आपको केवल सभी तारों को गर्म राउटर में मैन्युअल रूप से खींचने की आवश्यकता होती है - मैंने खुद के लिए जाँच की, यह काम करता है।

विपक्ष


- ऑपरेशन योजना ऐसी है कि यह प्रत्येक निष्पादन में अंतर्निहित फ्लैश ड्राइव को तेल देगा, जिससे इसका जीवनकाल कम हो जाएगा, इसलिए मैं सप्ताह में एक बार से अधिक बार इस तरह के ऑपरेशन को करने की सिफारिश नहीं करूंगा।
- विधि केवल उसी मॉडल के हार्डवेयर और उसी फर्मवेयर संस्करण के साथ काम करेगी, अन्यथा इंटरफेस की संख्या शिफ्ट हो सकती है
- यह अभी भी एक बैसाखी है और आपको इसे समझने की आवश्यकता है

क्रेडेंशियल्स के साथ एक सरणी के आयोजन पर व्यावहारिक सलाह के लिए habruiser just_wow का सम्मान करें।

Source: https://habr.com/ru/post/In140866/


All Articles