![]() | Так как в командах используется оператор place-before=, их необходимо вводить непосредственно на консоль маршрутизатора. |
SNAT пул для всех абонентов
В стандартной схеме Mikrotik-Simple определено правило masquerade для НАТа абонентов. При этом для НАТа будет использоваться единственный IP адрес находящийся на внешнем интерфейсе. Для НАТа с помощью пула 192.0.2.1-192.0.2.10 нужно добавить правило:
/ip firewall nat add place-before=[find comment=snat_abonents_masquerade] chain=crb_snat src-address-list=crb_gray_net dst-address-list=!crb_gray_net action=same to-addresses=192.0.2.1-192.0.2.10 same-not-by-dst=yes comment=snat_abonents_same
Команда добавит правил SNAT перед стандартным правилом маскарада.
![]() | Для верной работы маршрутизации и обеспечения диагностики сети следует добавить адреса 192.0.2.1-192.0.2.10 на внешний интерфейс маршрутизатора. |
SNAT по подсетям
Разделите абонентов на равные подсети с отдельным НАТ адресом для каждой. В примере сеть 198.51.100.0/24 будет скрыта за адресом 192.0.2.1
- Добавьте правило НАТ. Команда добавит правил SNAT перед стандартным правилом маскарада. Поиск идёт по комментарию snat_abonents_masquerade. Вы можете дублировать команду с разными IP адресами.
/ip firewall nat add action=src-nat chain=crb_snat comment=snat_abonents_192.0.2.1 dst-address-list=!crb_gray_net src-address-list=crb_snat_192.0.2.1 to-addresses=192.0.2.1 place-before=[find comment=snat_abonents_masquerade]
- Добавьте адрес листы с подсетями:
/ip firewall address-list add list=crb_snat_192.0.2.1 address=198.51.100.0/24 comment=192.0.2.1_crb_snat
SNAT для группы абонентов
При необходимости НАТить абонентом определенным адресом, необходимо выполнить следующее:
- Добавить правило НАТа на Mikrotik.
- Переопределить функции user_del и user_add в session файле в папке ubin
- Указать требуемый SNAT адрес в учетной записи абонента
Для примера определенных абонентов следует натить адресом 192.0.2.1
Добавление правил на Микротик
Команда добавит правил SNAT перед стандартным правилом маскарада. Поиск идёт по комментарию snat_abonents_masquerade. Вы можете дублировать команду с разными IP адресами.
/ip firewall nat add action=src-nat chain=crb_snat comment=snat_abonents_192.0.2.1 dst-address-list=!crb_gray_net src-address-list=crb_snat_192.0.2.1 to-addresses=192.0.2.1 place-before=[find comment=snat_abonents_masquerade]
Переопределение функций скрипта событий
Следующее содержимое запишите в файл session в папке ubin OSS директории нужного НАСа, подробней данный процесс описан в соответствующей статье
#!/bin/bash . $(dirname $BASH_SOURCE)/../bin/session user_add(){ if [ "$auth_type" == "1" ]; then while send_mikrotik_cmd -s "$nas_ip" "$telnet_login" "$telnet_password" /ip firewall address-list remove numbers=${ip}_crb_auth; do :; done send_mikrotik_cmd "$nas_ip" "${telnet_login}" "${telnet_password}" /ip firewall address-list add list=crb_auth_list address=$ip comment=${ip}_crb_auth fi if [ "$snatip" != "0.0.0.0" ]; then while send_mikrotik_cmd -s "$nas_ip" "$telnet_login" "$telnet_password" /ip firewall address-list remove numbers=${ip}_crb_snat; do :; done send_mikrotik_cmd "$nas_ip" "${telnet_login}" "${telnet_password}" /ip firewall address-list add list=crb_snat_${snatip} address=$ip comment=${ip}_crb_snat fi } user_del(){ while send_mikrotik_cmd -s "$nas_ip" "$telnet_login" "$telnet_password" /ip firewall address-list remove numbers=${ip}_crb_auth; do :; done while send_mikrotik_cmd -s "$nas_ip" "$telnet_login" "$telnet_password" /ip firewall address-list remove numbers=${ip}_crb_negbal; do :; done while send_mikrotik_cmd -s "$nas_ip" "$telnet_login" "$telnet_password" /ip firewall address-list remove numbers=${ip}_crb_blocked; do :; done while send_mikrotik_cmd -s "$nas_ip" "$telnet_login" "$telnet_password" /ip firewall address-list remove numbers=${ip}_crb_snat; do :; done while send_mikrotik_cmd -s "$nas_ip" "$telnet_login" "$telnet_password" /queue simple remove numbers=crb_${ip}; do :; done }
Редактирование учетной записи
Рассмотрено в статье Учетная запись. Создание и изменение.
Массовое назначение SNAT адреса
Для массового назначения SNAT адреса воспользуйтесь API. Команда назначит абонентам с IP сети 198.51.100.0/24 SNAT адрес 192.0.2.1
sqlexec "set list on; select u.id from users u where uf_ip2string(u.ip) like '198.51.100.%'" | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1={"id":'$line'}&method2=set&arg2={"snatip":"192.0.2.1"}&method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/Users/ -D -; done