Ip абонента: відмінності між версіями
Sv (обговорення | внесок) Немає опису редагування |
Sv (обговорення | внесок) Немає опису редагування |
||
Рядок 16: | Рядок 16: | ||
Открываем учетку абонента. Кликаем по полю "район" (по новому полю, которое мы создали выше). Выпадающий список пуст. Напишем слово "Оболонь" в поле ввода и нажмем на кнопку "+" - этим мы добавим район в выпадающий список. В дальнейшем нет необходимости вручную набирать и добавлять этот район - он будет предложен автоматически в выпадающем списке. После сохранения данных абонента нажмем на кнопку "Добавить ip". При этом после выбора пула 10.0.0.0/8 админка предложит выбрать несколько ip из пула 10.0.0.2-10.0.0.254 (как мы указали ранее). Если же в поле "район" выбрать "Троещина", то будет предложен вариант из пула 10.0.1.2-10.0.1.254 | Открываем учетку абонента. Кликаем по полю "район" (по новому полю, которое мы создали выше). Выпадающий список пуст. Напишем слово "Оболонь" в поле ввода и нажмем на кнопку "+" - этим мы добавим район в выпадающий список. В дальнейшем нет необходимости вручную набирать и добавлять этот район - он будет предложен автоматически в выпадающем списке. После сохранения данных абонента нажмем на кнопку "Добавить ip". При этом после выбора пула 10.0.0.0/8 админка предложит выбрать несколько ip из пула 10.0.0.2-10.0.0.254 (как мы указали ранее). Если же в поле "район" выбрать "Троещина", то будет предложен вариант из пула 10.0.1.2-10.0.1.254 | ||
<h1>Динамический ip. Выдача ip по значению допполя</h1> | |||
Необходимо создать допполе _ip_tag точно так же как описано выше. После этого, в mysql необходимо создать процедуру получения ip по тегу: | |||
<source lang="sql"> | |||
DROP FUNCTION IF EXISTS `get_ip_by_tag`; | |||
DELIMITER $$ | |||
CREATE FUNCTION `get_ip_by_tag` ( user_id INTEGER UNSIGNED, tag VARCHAR(64) ) | |||
RETURNS VARCHAR(15) NO SQL | |||
BEGIN | |||
DECLARE user_ip VARCHAR(15); | |||
DECLARE real_ip VARCHAR(15); | |||
SELECT 1 INTO real_ip FROM users_services WHERE uid = user_id AND tags LIKE '%,realip,%'; | |||
UPDATE ip_pool SET uid = user_id, `release` = UNIX_TIMESTAMP() + 300 | |||
WHERE id = (SELECT id FROM ( | |||
( | |||
SELECT id, uid FROM ip_pool | |||
WHERE uid = 0 AND type = 'dynamic' AND realip = IF(real_ip>0,1,0) | |||
AND tags LIKE CONCAT('%,', tag, ',%') | |||
LIMIT 1 | |||
) UNION ( | |||
SELECT id, uid FROM ip_pool | |||
WHERE uid = user_id AND type = 'dynamic' AND realip = IF(real_ip>0,1,0) | |||
AND tags LIKE CONCAT('%,', tag, ',%') | |||
LIMIT 1 | |||
) | |||
) AS tbl ORDER BY uid DESC LIMIT 1); | |||
SELECT INET_NTOA(ip) INTO user_ip FROM ip_pool | |||
WHERE uid = user_id AND tags LIKE CONCAT('%,', tag, ',%') LIMIT 1; | |||
RETURN user_ip; | |||
END$$ | |||
DELIMITER ; | |||
</source> |
Версія за 06:21, 28 лютого 2017
Абоненту можно выдать определенный ip в зависимости от разных условий
Статический ip
- В зависимости от географического положения. Необходимо установить модули place ip и географических карт. На карте создаются узлы, а в учетке абонента соответствующее поле указывает к какому узлу подключен абонент. В настройках каждого узла можно указать диапазон ip актуальный для данной точки подключения. В учетке абонента появится кнопка "+ip по топологии", при активации которой произойдет выдача свободного ip из указанного диапазона
- В зависимости от значения одного из полей учетной записи абонента. Необходимо создать допполе:
имя: неважно (например, "район") имя в бд: _ip_tag тип: выпадающий список тип объекта: ip_tags (можно иное в латинице)
Поставить галку в каких группах будет это поле.
В разделе "ip пул" для разных сетей поставить свои теги, например, для пула 10.0.0.2-10.0.0.254 поставим тег "Оболонь", а для 10.0.1.2-10.0.1.254 - "Троещина".
Открываем учетку абонента. Кликаем по полю "район" (по новому полю, которое мы создали выше). Выпадающий список пуст. Напишем слово "Оболонь" в поле ввода и нажмем на кнопку "+" - этим мы добавим район в выпадающий список. В дальнейшем нет необходимости вручную набирать и добавлять этот район - он будет предложен автоматически в выпадающем списке. После сохранения данных абонента нажмем на кнопку "Добавить ip". При этом после выбора пула 10.0.0.0/8 админка предложит выбрать несколько ip из пула 10.0.0.2-10.0.0.254 (как мы указали ранее). Если же в поле "район" выбрать "Троещина", то будет предложен вариант из пула 10.0.1.2-10.0.1.254
Динамический ip. Выдача ip по значению допполя
Необходимо создать допполе _ip_tag точно так же как описано выше. После этого, в mysql необходимо создать процедуру получения ip по тегу:
DROP FUNCTION IF EXISTS `get_ip_by_tag`;
DELIMITER $$
CREATE FUNCTION `get_ip_by_tag` ( user_id INTEGER UNSIGNED, tag VARCHAR(64) )
RETURNS VARCHAR(15) NO SQL
BEGIN
DECLARE user_ip VARCHAR(15);
DECLARE real_ip VARCHAR(15);
SELECT 1 INTO real_ip FROM users_services WHERE uid = user_id AND tags LIKE '%,realip,%';
UPDATE ip_pool SET uid = user_id, `release` = UNIX_TIMESTAMP() + 300
WHERE id = (SELECT id FROM (
(
SELECT id, uid FROM ip_pool
WHERE uid = 0 AND type = 'dynamic' AND realip = IF(real_ip>0,1,0)
AND tags LIKE CONCAT('%,', tag, ',%')
LIMIT 1
) UNION (
SELECT id, uid FROM ip_pool
WHERE uid = user_id AND type = 'dynamic' AND realip = IF(real_ip>0,1,0)
AND tags LIKE CONCAT('%,', tag, ',%')
LIMIT 1
)
) AS tbl ORDER BY uid DESC LIMIT 1);
SELECT INET_NTOA(ip) INTO user_ip FROM ip_pool
WHERE uid = user_id AND tags LIKE CONCAT('%,', tag, ',%') LIMIT 1;
RETURN user_ip;
END$$
DELIMITER ;