Привязка IP+MAC

Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.

Изменения (20)

просмотр истории страницы
В стандартной реализации связки Billing и XGE (вклчая Softrouter) отсутствует привязка ip+mac. Если она требуется, необходимо отредакритовать скрипт управления XGE в биллинге и, при необходимости, добавить синхронизатор MAC привязок.
{info}IP+MAC привязки реализованы через создание статических записей в ARP таблице{info}

{toc}

h1. Скрипт событий
# Создайте папку для измененного скрипта:
{code}mkdir -p /app/asr_billing/cfg/var/lib/event/{code}
touch /app/asr_billing/cfg/var/lib/event/xge_router.sh
chmod a+x /app/asr_billing/cfg/var/lib/event/xge_router.sh{code}
# Созддайте файл */app/asr_billing/cfg/var/lib/event/xge_router.sh* со следующим содержимым:
{code}#!/bin/bash
{code}/app/asr_billing/service restart{code}

h1. Синхронизация привязок MAC+IP на XGE по БД биллинга
Синхронизация выполняется вручную при необходимости, например при внедрении функции если абоненты уже заведены, но ранее привязка не исопльзовалась.
# Создайте указанные ниже файлы и со следующим содержимым:
*/app/xge/cfg/mac_autoget.sh*
Описано создание привязок на стороне XGE в случае если Вы решили внедрить привязку IP+MAC, у абонентов заведены MAC-адреса в учетных записях и Вы хотите назначить привязки на стороне XGE.
# Создайте файл скрипта
{code}touch /app/base/cfg/set_xge_ip_mac.sh
chmod a+x /app/base/cfg/set_xge_ip_mac.sh{code}
Заполните скрипт */app/base/cfg/set_xge_ip_mac.sh*
{code}#!/bin/bash

sqlexec "set heading off; select uf_ip2string(ip),mac from users where mac!='' and ip!=0 and deleted=0 and opt82=0 and abonent_id>1" | grep -v "^$" | sort -u | awk '$1$2{print $1";"$2}' > /tmp/ipmac.list
>/tmp/true_ipmac
#Проходим по списку IP юзеров, у которых в базе не прописан мак
#Если мак в arp таблице обнаружен, cоздаем статическую привязку, пишем в файл ip и mac
for ip in $(</tmp/users_ip_where_no_mac_in_db.list); do
current_mac="$(xgesh session $ip mac get)"
if [ "$current_mac" == "00:00:00:00:00:00" ]; then
continue
while IFS=';' read ip mac; do
if [[ $1 == "remove" ]]; then
chroot /app/xge xgesh session $ip mac remove
elif [[ $1 == "set" ]]; then
chroot /app/xge xgesh session $ip mac set $mac
else
echo $ip $current_mac >> /tmp/true_ipmac
xgesh session $ip mac set $current_mac
echo xgesh session $ip mac set $mac
fi
done <<< "$(</tmp/ipmac.list)"{code}
Скрипт ожидает передачи параметров:
#* *set* - установить привязки
#* *remove* - удалить привязки
#* *без параметров* - напечатать в терминал команды для установки привязок по пользовательским сессиям без выполнения
# Запустите синхронизацию:
{code}bash -x /app/base/cfg/set_xge_ip_mac.sh set &>>/var/log/xge_ipmac_set.log{code}
Лог синхронизации можно будет найти по пути */var/log/xge_ipmac_set.log*
done{code}
h1. Синхронизация IP+MAC по ARP таблице
Синхронизация выполняется вручную при необходимости, например при внедрении функции если абоненты уже заведены, но ранее привязка не исопльзовалась.
Скриты получают MAC-адреса абонентов из ARP-таблицы XGE.
# Создайте файлы скриптов и установите права на выполнение
{code}touch /app/xge/cfg/mac_autoget.sh
touch /app/base/cfg/mac_process.sh
chmod a+x /app/xge/cfg/mac_autoget.sh
chmod a+x /app/base/cfg/mac_process.sh{code}
# Создайте указанные ниже файлы и со следующим содержимым:
*/app/xge/cfg/mac_autoget.sh*
{code}#!/bin/bash
#Получаем из db список IP неудаленных юзеров, у которых пустой мак и есть ip
get_list() {
sqlexec "set heading off; select uf_ip2string(ip) from users where mac='' and ip!=0 and deleted=0 and opt82=0 and abonent_id>1" | grep -v "^$" | sort -u > /app/xge/tmp/users_ip_where_no_mac_in_db.list
}
#Вызываем сторонный скрипт получения маков из арп таблицы
[ ! -s /app/xge/tmp/true_ipmac ] && exit 11
while read ip mac ; do
sqlexec "update users set mac='"$mac"' where uf_ip2string(ip)='"$ip"'"
curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/Users/' -d 'method1=objects.get&arg1={"ip":"'$ip'"}&method2=set&arg2={"mac":"'$mac'"}&method3=save&arg3={}'
done <<< "$(</app/xge/tmp/true_ipmac)"

main{code}
# Запустите синхронизацию:
{code}bash -x /app/base/cfg/mac_process.sh &>>/var/log/xge_ipmac_arp_sync.log{code}
Лог синхронизации можно будет найти по пути */var/log/xge_ipmac_arp_sync.log*