Mikrotik:小さなユーティリティ。 パート1

この記事では、RouterOSで見つけて実装した小さな発見とデバイスを共有したいと思います。 以下に書かれているものはすべてテストされ、Mikrotik RB 951シリーズで動作します。



今日、RouterOS環境で次のことを共有します。

1)Mikrotikデバイスの半自動ファームウェア更新、電子メールおよび/またはSMSによる通知

2)デバイス間で設定を自動的にコピーする

3)トラフィックをブロックし、別のゲートウェイでラップする



面白い? それから猫をお願いします。



ポイント1:Mikrotikデバイスのファームウェアの半自動更新、電子メールやSMSによる通知



多くの人が知っているように、Mikrotikのファームウェアは定期的にリリースされており、更新ごとに多くの修正が行われています。 デバイスを更新する必要があります。これから逃げないでください。 ただし、ROSを更新する必要があるだけでなく、デバイス自体のFWも更新する必要があります。

正直なところ、私はあまりにも怠け者なので、しばらくお待ちください。 私はMikrotikのWebサイトでニュースを購読しましたが、約3か月間、このニュースのすべてが非常に悪いものでした(単に文字がありません)。 そして、すべてがうまくいくだろうが、私は自宅に3つのデバイスと企業に2つのデバイスを持っています。



まず、ちょっとした理論:私の場合は951シリーズの3つのデバイスで、それぞれがVPNを介して接続されています。 ポイントの1つはマスターで、残りはマスターから内部チャネルを介して必要な更新を取得します。 ウィザードは、インターネット経由で更新プログラムを確認し、それらを自動的にダウンロードして、メールとSMSで通知を送信します。

ただし、1つのポイントがあります。デフォルトでは、更新ファイルはファイルのルートに追加され、そこからのみMikrotikが再起動時に更新できます。 ファイルは更新後すぐに削除されます。 私のスキームでは、これは重要です。したがって、ファイルをフォルダーのいずれかに配置する必要があります。そのフォルダーでは、ファイルは削除されず、他のポイントで表示されます。



必要なもの

ウィザードにFTPサーバーが必要になります。

オプションで構成された電子メールおよびSMSブランチ



方法:ウィザード

スクリプトのみが必要で、必要な変数は最上部にあります。

バージョン<6.32.2の更新スクリプト
:local email " email" :local user " " :local pass " " :local folder "   " :local phone "    +" ##### /system package update check-for-updates :delay 3 :if ( [/system package update get installed-version] = [/system package update get latest-version] ) do={ /tool e-mail send to=$email subject=" Mikrotik" body="  RouterOS!   - $[/system package update get latest-version].   - http://www.mikrotik.com/download" /tool sms send usb1 channel=2 "$phone" message="New RouterOS version is available!" /system package update download :delay 20 :foreach i in=[/file find where package-version=[/system package update get latest-version]] do={ /tool fetch address=127.0.0.1 src-path="$[/file get number="$i" name]" dst-path="$folder/$[/file get number="$i" name]" user=$user password=$pass mode=ftp } }
      
      







バージョンの更新スクリプト> = 6.32.2
 :local email " email" :local user " " :local pass " " :local folder "   " :local phone "    +" ##### :if ( [/system package update get status] != "Downloaded, please reboot router to upgrade it" ) do={ /system package update check-for-updates :delay 3 :if ( [/system package update get installed-version] != [/system package update get latest-version] ) do={ /system package update download :delay 20 :foreach i in=[/file find where package-version=[/system package update get latest-version]] do={ /tool fetch address=127.0.0.1 src-path="$[/file get number="$i" name]" dst-path="$folder/$[/file get number="$i" name]" user=$user password=$pass mode=ftp } /tool e-mail send to=$email subject=" Mikrotik" body="  RouterOS!   - $[/system package update get latest-version].   - http://www.mikrotik.com/download" /tool sms send usb1 channel=2 "$phone" message="New RouterOS version is available!" } }
      
      







バージョン6.32.2+のスクリプトには、既にダウンロードされた更新の確認が含まれています。 また、更新がダウンロードされても、check-for-updatesはステータスを「新しいバージョンが利用可能」に設定することに注意してください。

インターネットチャネルに応じて、対応する2番目の遅延を設定する必要があります。

スケジュールで、目的のスキャン間隔を設定します。 私の選択は12時間ごとです。



注:バージョン6.32.1以降、電子メールメッセージのエンコードに問題がありました。



方法:スレーブ

チューニングと2つのスクリプトが必要です。

マスターポイントターゲティング
 /system upgrade upgrade-package-source add address=xxx.xxx.xxx.xxx user=user
      
      





そして、リモートユーザーのパスワードを入力します。



RouterOS更新スクリプト
 /system upgrade refresh :delay 5 /system upgrade download-all reboot-after-download=yes
      
      







FW更新スクリプト
 :if ( [/system routerboard get current-firmware] < [/system routerboard get upgrade-firmware] ) do { /system routerboard upgrade /system reboot }
      
      







私の場合、スクリプトは1日に1回実行され、それらの間隔は10分です。

スケジュールの2番目のスクリプトは、起動システムにインストールできます。 誰も知らない場合、起動とは、デバイスを起動してから3秒後に起動することを意味します。



「なぜスレーブポイントに直接ファイルをフェッチしないのですか?」と尋ねます。 異なるパッケージをポイントにインストールできるためです。 スレーブ自身が何をダウンロードし、何をダウンロードしないかを決定する方が良いでしょう。



Mikrotikデバイスが1つある場合は、完全に自動化されたソフトウェア更新用のスクリプトを作成できます。



アイテム2:デバイス間で設定を自動的にコピーする



私が言ったように、怠lazは私のミドルネームです。 また、各デバイスで、MACによる「自分用」のみのゲストWi-Fiを開いています。 したがって、許可されたデバイスの同じリストをすべてのポイントで持つという強い意思が決定されました。 ベースはポイントの1つ(マスター)にあり、1日に1回必要なデバイスにコピーされます。 設定をコピーする場所にFTPサーバーが必要になります。



したがって、2つのオプションがあります:シンプルと正しい。

シンプル:

2つのファイルを順番に送信します。

スクリプト
 :local ip "IP ,     " :local user "" :local password "" ##### /interface wireless access-list export compact file=address :delay 1 /tool fetch upload=yes address=$ip mode=ftp src-path=address_flush.rsc dst-path=address_flush.auto.rsc user=$user password=$password :delay 1 /tool fetch upload=yes address=$ip mode=ftp src-path=address.rsc dst-path=address.auto.rsc user=$user password=$password
      
      







address_flush.rscの内容
 /interface wireless access-list remove [/interface wireless access-list find]
      
      







正解:

前のオプションでは、fetch'ami間の切断の可能性は考慮されていません。 この状況が発生すると、アクセスリストはすべての結果とともに空になります。 したがって、設定のあるファイルの存在を確認し、その後、シートの現在の内容をクリアする必要があります。 スクリプトの最後のアクションは、ファイルを削除することです。 すなわち:

スクリプト
 :local ip "IP ,     " :local user "" :local password "" ##### /interface wireless access-list export compact file=wifi2_mac :delay 1 /tool fetch upload=yes address=$ip mode=ftp src-path=wifi2_mac.rsc dst-path=wifi2_mac.rsc user=$user password=$password :delay 1 /tool fetch upload=yes address=$ip mode=ftp src-path=address_proc.rsc dst-path=address_proc.auto.rsc user=$user password=$password :delay 10 /file remove [/file find where name=wifi2_mac.rsc]
      
      







address_proc.rscファイルの内容
 #2015.09.11 - AcidVenom - Copy MAC to extertnal Script :delay 5 :if ( [/file find where name=wifi2_mac.rsc] != "" ) do={ /interface wireless access-list remove [/interface wireless access-list find] /import wifi2_mac.rsc :delay 1 /file remove [/file find where name=wifi2_mac.rsc] }
      
      







厳密に言えば、ファイルaddress_flush.rscおよびaddress_proc.rscには任意の名前と拡張子を付けることができますが、dst-pathへの出力では、外観は* .auto.rscである必要があります。



画像や肖像画では、必要な設定をほとんどその場でコピーできます。



ポイント3:トラフィックをブロックし、別のゲートウェイでラップする



特定のトラフィックをブロックするトピックに関する記事がグーグルで検索されますので、簡単に説明します-Layer7プロトコル。

たとえば、Microsoft Telemetry Lock:

 /ip firewall layer7-protocol add name=telemetry regexp=^.+(data.microsoft.com|telemetry.microsoft.com).*$ /ip firewall filter add chain=forward protocol=tcp in-interface=bridge-local layer7-protocol=telemetry action=reject reject-with=tcp-reset /ip firewall filter add chain=forward protocol=tcp out-interface=bridge-local layer7-protocol=telemetry action=reject reject-with=tcp-reset
      
      





L7の詳細については、 プロジェクトの Webサイトをご覧ください。



次のポイントは、個々のマシンのトラフィックを別のゲートウェイに反転させることです。これはデフォルトではありません。

 /ip firewall mangle add chain=prerouting src-address=192.168.0.0/24 dst-address=!192.168.0.0/16 action=mark-routing new-routing-mark=another_gateway passthrough=yes /ip route add dst-address=0.0.0.0/0 gateway=192.168.1.1 check-gateway=ping type=unicast distance=1 routing-mark=another_gateway
      
      





Distanceパラメーターは、デフォルトゲートウェイよりも低くする必要があります。 必要に応じて、ソースサブネットの代わりに単一のIPまたはアドレスリストを指定できます。

したがって、すべての発信トラフィックをゲートウェイ192.168.1.1にラップできます。 IP経由でゲートウェイを指定することを強くお勧めします。指定しないと、ルートリストのルールを破ると、単に消去されます。



さて、今日の最後のトリックは、デフォルトではなく、ゲートウェイへの特定のサイトのみの反転です。 これは、ロシア連邦の領土にないプロキシを使用していて、ブロックされたILVサイトを訪問したい、および/または訪問する必要がある場合に非常に便利です。

これはもう少し複雑です L7は、接続が既に確立されているときに機能します。 したがって、アドレスリストを使用します。

たとえば、主要IPがスパムの範囲にあったforum.mikrotik.comを取り上げます。

 /ip firewall layer7-protocol add name=forum.mikrotik regexp=^.+(forum.mikrotik.com).*$ /ip firewall mangle add chain=prerouting src-address=192.168.0.0/24 dst-address=!192.168.0.0/16 layer7-protocol=forum.mikrotik action=add-dst-to-address-list address-list=forum.mikrotik.ip address-list-timeout=24:00:00 /ip firewall mangle add chain=prerouting src-address=192.168.0.0/24 dst-address=!192.168.0.0/16 dst-address-list=forum.mikrotik.ip action=mark-routing new-routing-mark=forum.mikrotik.rm passthrough=yes /ip route add dst-address=0.0.0.0/0 gateway=192.168.1.1 check-gateway=ping type=unicast distance=1 routing-mark=forum.mikrotik.rm
      
      





このソリューションの欠点は、最初の接続が失敗するが、後続の接続は目的のゲートウェイを通過することです。



PS:2015年10月20日更新。 バージョン6.32.2+の更新スクリプトを追加しました



PPS:バージョン6.32.3のリリースで、電子メールニュースレターが修正されました。 この記事が修繕を促したと思います。



PPPS:2015年11月9日に更新。

バージョン6.33のリリースで、迷惑が明らかになりました:Mikrotikは異なる注文のバージョンを比較できません。 6.32.3および6.33。

そのため、この事件を踏まえてスクリプトが変更されました。 また、通知は最後に送信されるように下に移動されます。



All Articles