MikroTik и два канала в интернет. Публикация интернет-сервисов за NATом

Для простой балансировки исходящего трафика хватает одной команды.

В случае когда есть 2 (или более) провайдера и через каждый мы пускам к себе например на web сервер настройка уже сложней. Для примера доступа к web серверу по 80 порту с IP 192.168.1.21 нужно сделать правила для каждого внешнего интерфейса (ether1 и ether2)

1
ip firewall nat add chain=dstnat action=dst-nat in-interface=ether1 protocol=tcp dst-port=80 to-address=192.168.1.21 to-ports=80
2
 
3
ip firewall nat add chain=dstnat action=dst-nat in-interface=ether2 protocol=tcp dst-port=80 to-address=192.168.1.21 to-ports=80

Разрешаем прохождение пакетов через маршрутизатор адресованных web серверу (если у нас строгие правила):

1
ip firewall filter add chain forward in-interface=ether1 protocol=tcp dst-port=80 dst-address=192.168.1.21 action=accept
2
ip firewall filter add chain forward in-interface=ether1 protocol=tcp dst-port=80 dst-address=192.168.1.21 action=accept

Ну, а теперь самое интересно, помечаем входящие соединения, чтобы ответы шли через того провайдера с которого получен запрос:

1
ip firewall mangle add chain=forward in-interface=ether1 action=mark-connection new-connection-mark=ether1_c passthrough=yes
2
ip firewall mangle add chain=forward in-interface=ether2 action=mark-connection new-connection-mark=ether2_c passthrough=yes
3
ip firewall mangle add chain=prerouting src-address=192.168.1.0/24 connection-mark=ether1_c action=mark-routing new-routing-mark=ether1_r passthrough=yes
4
ip firewall mangle add chain=prerouting src-address=192.168.1.0/24 connection-mark=ether2_c action=mark-routing new-routing-mark=ether2_r passthrough=yes

Добавляем правила маршрутизации:

1
ip route add routing-mark=ether1_r gateway=<IP_gw_SP1>
2
ip route add routing-mark=ether2_r gateway=<IP_gw_SP1>

проверяем и радуемся

Mikrotik: Резервирование настроек по E-mail

основываясь на wiki создал скрипт. Тестировал на  v5.6 и 5.22. Должно работать на 5.X

Для начала надо настроить параметры SMTP сервера. Пример будет для gmail.com

Не забываем поменять на свои значения mikrotik@gmail.com, your_password, your_account@gmail.com

 Bash | 
 
 copy code |
?

1
/tool e-mail
2
set address=173.194.65.108 from=mikrotik@gmail.com password=\
3
your_password starttls=yes user=your_account@gmail.com
4

Скрипт делает

  1. удаляет старые бекапы
  2. создае файл бэкапа *.backup
  3. отправляет сообщение с прикреплённым к нему файлом бэкапа на заданный e-mail адрес
  4. создают файл скрипта настроек *.rsc по команде export
  5. отправляет сообщение с прикреплённым к нему файлом скрипта настроек на заданный e-mail адрес
  6. если версия RouterOS выше 5.12, создается файл скрипта настроек *.rsc по команде export compact и отправляется на тот же e-mail

Параллельно в системном журнале производится логирование этапов работы запущенного скрипта.

К сожалению RouterOS пока не умеет прикреплять к сообщению более одного файла за раз, поэтому каждый файл приходится отправлять индивидуально.

 Bash | 
 
 copy code |
?

01
{
02
:log info "Starting Backup Script...";
03
:local sysname [/system identity get name];
04
:local sysver [/system package get system version];
05
:log info "Flushing DNS cache...";
06
#/ip dns cache flush;
07
:delay 2;
08
:log info "Deleting last Backups...";
09
:foreach i in=[/file find] do={:if ([:typeof [:find [/file get $i name] \
10
"$sysname-backup-"]]!="nil") do={/file remove $i}};
11
:delay 2;
12
:local smtpserv [:resolve "smtp.gmail.com"];
13
:local Eaccount "your_account@gmail.com";
14
/tool e-mail set address=$smtpserv;
15
 
16
:local backupfile ("$sysname-backup-" . \
17
[:pick [/system clock get date] 7 11] . [:pick [/system \
18
clock get date] 0 3] . [:pick [/system clock get date] 4 6] . ".backup");
19
:log info "Creating new Full Backup file...";
20
/system backup save name=$backupfile;
21
:delay 2;
22
:log info "Sending Full Backup file via E-mail...";
23
 
24
/tool e-mail send to=$Eaccount tls=yes file="$backupfile" \
25
subject=("$sysname Full Backup (" . [/system clock get date] . ")") \
26
body=("$sysname full Backup file see in attachment.\nRouterOS version: \
27
$sysver\nTime and Date stamp: " . [/system clock get time] . " " . \
28
[/system clock get date]);
29
 
30
:delay 5;
31
:local exportfile ("$sysname-backup-" . \
32
[:pick [/system clock get date] 7 11] . [:pick [/system \
33
clock get date] 0 3] . [:pick [/system clock get date] 4 6] . ".rsc");
34
:log info "Creating new Setup Script file...";
35
/export file=$exportfile;
36
:delay 2;
37
:log info "Sending Setup Script file via E-mail...";
38
 
39
/tool e-mail send to=$Eaccount tls=yes file=$exportfile \
40
subject=("$sysname Setup Script Backup (" . [/system clock get date] . \
41
")") body=("$sysname Setup Script file see in attachment.\nRouterOS \
42
version: $sysver\nTime and Date stamp: " . [/system clock get time] . " \
43
" . [/system clock get date]);
44
:delay 5;
45
 
46
:if ( [/system package get system version] &gt;= "5.12" ) do={
47
:local exportcompactfile ("$sysname-backup-compact-" . \
48
[:pick [/system clock get date] 7 11] . [:pick [/system \
49
clock get date] 0 3] . [:pick [/system clock get date] 4 6] . ".rsc");
50
:log info "Creating new Setup Script Compact file...";
51
/export compact file=$exportcompactfile;
52
:delay 2;
53
:log info "Sending Setup Script Compact file via E-mail...";
54
 
55
/tool e-mail send to=$Eaccount tls=yes file=$exportcompactfile \
56
subject=("$sysname Setup ScriptCompact Backup (" . [/system clock get date] . \
57
")") body=("$sysname Setup Script Compact file see in attachment.\nRouterOS \
58
version: $sysver\nTime and Date stamp: " . [/system clock get time] . " \
59
" . [/system clock get date]);
60
:delay 5;
61
}
62
 
63
:log info "All System Backups emailed successfully.\nBackuping completed.";
64
}