Просмотр Исходного

В стандартной схеме *Mikrotik-Simple* определено правило +masquerade+ для НАТа абонентов. При необходимости натить абонентом определенным адресом, необходимо выполнить следующее:

# Добавить правило НАТа на Mikrotik.
# Переопределить функции +user_del+ и +user_add+ в session файле в папке ubin
# Указать требуемый SNAT адрес в учетной записи абонента

Для примера, пусть у нас на WAN интерфейсе будут заданы адреса 10.17.2.1 и 10.17.1.1 и определенных абонентов следует натить адресом 10.17.1.1

h1. Добавление правил на Микротик
Данные команды выполняют следующее:
# Удаление стандартного правила маскарда из схемы.
{info}Это необходимо, так как абоненты должны быть и в crb_gray_net и в crb_snat_10.17.1.1 листах, а цепочки применяются каскадно, следовательно если masquerade поставить выше src-nat, будет выполняться masquerade. Позже, оно будет добавлено последним.{info}
# Добавление правила SNAT
# Добавление правила masquerade для всех, кому не назначен определенный SNAT

{code}/ip firewall nat remove [/ip firewall nat find comment=snat_abonents_masquerade]
/ip firewall nat add action=src-nat chain=crb_snat comment=snat_abonents_10.17.1.1 dst-address-list=!crb_gray_net log=yes log-prefix=nat src-address-list=crb_snat_10.17.1.1 to-addresses=10.17.1.1
/ip firewall nat add action=masquerade chain=crb_snat comment=snat_abonents_masquerade dst-address-list=!crb_gray_net log=yes log-prefix=nat src-address-list=crb_gray_net{code}
Если же на интерфейсе у Вас более двух адресов и Вам требуется настроить правило SNAT для каждого, отредактируйте вторую команду подменив ip-адреса в comment, src-address-list и to-addresses. Выполните их последовательно до последней команды, которая добавит masquerade.
h1. Переопределение функций скрипта событий
Следующее содержимое запишите в файл session в папке ubin OSS директории нужного НАСа, подробней данный процесс описан в [соответствующей статье|CarbonBilling:Custom схема]

{code}#!/bin/bash
. $(dirname $BASH_SOURCE)/../bin/session

user_rate_set()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_${snatip}; 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_${snatip}
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_${snatip}; do :; done
while send_mikrotik_cmd -s "$nas_ip" "$telnet_login" "$telnet_password" /queue simple remove numbers=crb_${ip}; do :; done
}{code}

h1. Редактирование учетной записи
Рассмотрено в статье [CarbonBilling:Учетная запись. Создание и изменение.]