ロジック
1. sshを介してアクティブルーターに接続し、加熱されたルーターが10.0.0.1/24に接続されている物理インターフェイスのアドレスを変更します。
2.ファイアウォールでポートフォワーディングを使用して、ssh経由でアクティブなルーターを介して加熱されたルーターに接続します。
3.シリアル番号をチェックして、実際に加熱されたルーターに実際に接続したことを確認します。
4.アクティブなルーターからftpバックアップを取得し、加熱された
5. sshを介してアクティブルーターに接続し、物理インターフェイスの元のアドレスを10.0.0.2/24に戻します。これにより、加熱されたルーターが接続されます。
1日1回すべてのルーターからバックアップを取得するため、アドレスを変更する操作が必要です。 さらに、バックアップを加熱されたルーターにアップロードするとき、何らかの方法でそれを取得する必要があります。そのため、すでにアドレス10.0.0.2/24が構成されており、アクティブでは一時的にアドレス10.0.0.1/24、このIPを設定しますバックアップは表示されません。 したがって、構成のIDを取得します。
加熱した鉄片を接続します
...写真に示すように、つまり、インターネットとLANの接続方法は関係ありません。あなたの場合、アクティブルーターと加熱ルーターを接続するインターフェイスが同じであることが重要です。 さらに、その理由は明らかです。
同じ方法でインターフェースを設定しましょう-はい、これには犯罪者はいません。
/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
まさにそう、2番目のルールとして送信元アドレスを変更します。これは、バックアップルーターに既にデフォルトゲートウェイがあり、それを介して応答しようとし、アクティブルーターを経由して戻る必要があるためです。
さらに、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
アクティブなルーターが故障した場合は、すべてのワイヤーを手動で加熱されたルーターにドラッグするだけで済みます。
短所
-操作スキームは、実行ごとに内蔵フラッシュドライブに油をさし、それによってその寿命が短くなるようなものです。そのため、このような操作を週に1回以上実行することはお勧めしません。
-この方法は、同じモデルと同じファームウェアバージョンのハードウェアでのみ動作します。そうでない場合、インターフェースの番号が変わる可能性があります
-これはまだ松葉杖であり、これを理解する必要があります
資格情報を使用してアレイを編成する際の実用的なアドバイスについては、habruiser just_wowを尊重してください。