Ты все правильно сделал. Есть просто один нюанс, который я почему-то не описал в документации (исправлюсь).
1) К абоненту не должен быть привязан никакой ip
2) Необходимо создать пул ip адресов типа "динамический" с флагом "реальный"
3) В параметрах услуги в поле "теги" необходимо вписать слово: realip
В этом случае, всем абонентам, имеющим эту услугу будет выдаваться белый ip. Если необходимо выдавать только избранным, то необходимо поступить иначе: создать услугу типа basic нулевой стоимости и с тегом realip
4) Необходимо изменить процедуру get_ip в mysql:
DROP FUNCTION IF EXISTS `get_ip`;
DELIMITER $$
CREATE FUNCTION `get_ip` ( user_id INTEGER UNSIGNED ) RETURNS VARCHAR(15) NO SQL
BEGIN
DECLARE user_ip VARCHAR(15);
DECLARE real_ip VARCHAR(15);
SELECT INET_NTOA(ip) INTO user_ip FROM ip_pool
WHERE uid = user_id AND type='static' LIMIT 1;
IF( user_ip IS NOT NULL ) THEN RETURN user_ip; END IF;
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)
LIMIT 1)
UNION
(SELECT id, uid FROM ip_pool
WHERE uid = user_id
AND type = 'dynamic'
AND realip = IF(real_ip>0,1,0)
LIMIT 1)
) AS tbl ORDER BY uid DESC LIMIT 1);
SELECT INET_NTOA(ip) INTO user_ip FROM ip_pool
WHERE uid = user_id LIMIT 1;
RETURN user_ip;
END$$
DELIMITER ;
- добавлена строчка "SELECT 1 INTO real_ip FROM users_services WHERE uid = user_id AND tags LIKE '%,realip,%';"