Пример. SNAT для Mikrotik-Simple

Skip to end of metadata
Go to start of metadata
Вы просматриваете старую версию данной страницы. Смотрите текущую версию. Сравнить с текущим  |   просмотр истории страницы

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

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

Для примера определенных абонентов следует натить адресом 192.0.2.1

Добавление правил на Микротик

Данные команды выполняют следующее:

  1. Удаление стандартного правила маскарда из схемы.
    /ip firewall nat remove [/ip firewall nat find comment=snat_abonents_masquerade]
    
    Это необходимо, так как абоненты должны быть и в crb_gray_net и в crb_snat_192.0.2.1 листах, а цепочки применяются каскадно, следовательно если masquerade поставить выше src-nat, будет выполняться masquerade. Позже, оно будет добавлено последним.
  2. Добавление правила SNAT
    /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 
    
  3. Добавление правила masquerade для всех, кому не назначен определенный SNAT
    /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
    

    Если же на интерфейсе у Вас более двух адресов и Вам требуется настроить правило SNAT для каждого, отредактируйте вторую команду подменив ip-адреса в comment, src-address-list и to-addresses. Выполните их последовательно до последней команды, которая добавит 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
Введите метки, чтобы добавить к этой странице:
Please wait 
Ищите метку? просто начните печатать.