Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
Порівняння попередніх версій Попередня ревізія | Попередня ревізія | ||
linux_isg [2014/11/19 04:08] |
linux_isg [2023/06/19 15:33] (поточний) borisov |
||
---|---|---|---|
Рядок 1: | Рядок 1: | ||
+ | ====== Linux ISG на Debian 7.7.0 Wheezy ====== | ||
+ | Система призначена для аутентифікації, | ||
+ | |||
+ | ===== Встановлення ===== | ||
+ | Процес встановлення описано на [[https:// | ||
+ | |||
+ | * Задовольняємо залежності | ||
+ | < | ||
+ | # aptitude install linux-headers-$(uname -r) iptables-dev build-essential | ||
+ | # cpan -i Net:: | ||
+ | </ | ||
+ | |||
+ | * Завантажуємо останню версію Linux ISG та розпаковуємо | ||
+ | < | ||
+ | # wget --no-check-certificate https:// | ||
+ | # tar zxf master.tar.gz | ||
+ | </ | ||
+ | |||
+ | * Збираємо, | ||
+ | < | ||
+ | # cd sysoleg-lisg-*/ | ||
+ | # ./configure | ||
+ | # make | ||
+ | # make install | ||
+ | </ | ||
+ | |||
+ | * Підвантажуємо модуль ядра | ||
+ | < | ||
+ | # modprobe ipt_ISG | ||
+ | </ | ||
+ | |||
+ | * Встановлюємо підтримку на стороні userspace (скрипти демона і управління на Perl) | ||
+ | < | ||
+ | # cd .. | ||
+ | # cp -r ISG /opt | ||
+ | </ | ||
+ | |||
+ | * Поправимо / | ||
+ | * Запускаємо демон ISGd.pl | ||
+ | < | ||
+ | # / | ||
+ | </ | ||
+ | ===== Додатково ===== | ||
+ | * Автоматичне завантаження модуля ядра під час старту системи | ||
+ | < | ||
+ | # echo ipt_ISG >> / | ||
+ | </ | ||
+ | |||
+ | * Створюємо скрипт автоматичного запуску демона ISGd.pl під час старту системи в /// | ||
+ | <file bash / | ||
+ | #!/bin/sh -e | ||
+ | ### BEGIN INIT INFO | ||
+ | # Provides: | ||
+ | # Required-Start: | ||
+ | # Required-Stop: | ||
+ | # Default-Start: | ||
+ | # Default-Stop: | ||
+ | ### END INIT INFO | ||
+ | PATH=/ | ||
+ | |||
+ | . / | ||
+ | |||
+ | case " | ||
+ | start) | ||
+ | log_daemon_msg " | ||
+ | if / | ||
+ | log_end_msg 0 | ||
+ | else | ||
+ | log_end_msg 1 | ||
+ | fi | ||
+ | ;; | ||
+ | restart) | ||
+ | log_daemon_msg " | ||
+ | start-stop-daemon --stop --quiet --oknodo --retry 180 --pidfile / | ||
+ | if / | ||
+ | log_end_msg 0 | ||
+ | else | ||
+ | log_end_msg 1 | ||
+ | fi | ||
+ | ;; | ||
+ | stop) | ||
+ | log_daemon_msg " | ||
+ | start-stop-daemon --stop --quiet --oknodo --retry 180 --pidfile / | ||
+ | log_end_msg 0 | ||
+ | ;; | ||
+ | *) | ||
+ | log_success_msg " | ||
+ | exit 1 | ||
+ | ;; | ||
+ | esac | ||
+ | |||
+ | exit 0 | ||
+ | </ | ||
+ | < | ||
+ | # chmod a+x / | ||
+ | # update-rc.d linux-isg defaults | ||
+ | </ | ||
+ | |||
+ | ===== Налаштування Linux ISG ===== | ||
+ | |||
+ | Припустимо: | ||
+ | - Адреса сервера доступу - 192.168.0.252; | ||
+ | - Адреса білінгу/ | ||
+ | - На сервері доступу налаштований DHCP-сервер або DHCP-relay. Або користувачам адреси вбиваються вручну. | ||
+ | - У нас є мережа 10.0.0.0.0/ | ||
+ | * До локальних мереж (RFC1918) на швидкості 100 Мбіт/ | ||
+ | * До глобальної мережі (GLOBAL) на швидкості 10 Мбіт/ | ||
+ | * Завернути в особистий кабінет, | ||
+ | * Оскільки ми дуже ледачі і не маємо власного DNS, потрібен постійний доступ до DNS серверів Google: 8.8.8.8 и 8.8.4.4 | ||
+ | |||
+ | Попереднє налаштування самого Linux ISG здійснюється в /// | ||
+ | <file pl / | ||
+ | $cfg{radius_auth}{0} = { server => " | ||
+ | $cfg{radius_acct}{0} = { server => " | ||
+ | |||
+ | ### CoA-related settings | ||
+ | $cfg{coa_server} = " | ||
+ | $cfg{coa_secret} = " | ||
+ | $cfg{coa_port} = 3799; ## Local UDP port to listen for CoA requests | ||
+ | </ | ||
+ | |||
+ | Також приведемо файл /// | ||
+ | <file bash / | ||
+ | #!/bin/sh -e | ||
+ | # | ||
+ | # rc.local | ||
+ | # | ||
+ | # This script is executed at the end of each multiuser runlevel. | ||
+ | # Make sure that the script will "exit 0" on success or any other | ||
+ | # value on error. | ||
+ | # | ||
+ | # In order to enable or disable this script just change the execution | ||
+ | # bits. | ||
+ | # | ||
+ | # By default this script does nothing. | ||
+ | |||
+ | # Flush | ||
+ | iptables --flush | ||
+ | iptables --flush -t nat | ||
+ | |||
+ | # NAT | ||
+ | iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j SNAT --to-source 192.168.0.252 | ||
+ | |||
+ | # L4 Redirects | ||
+ | iptables -t nat -A PREROUTING -p tcp --dport 80 -m isg --service-name OFF-LINE -j DNAT --to-destination | ||
+ | iptables -t nat -A PREROUTING -p tcp --dport 80 -m isg --service-name PASSIVE -j DNAT --to-destination | ||
+ | iptables -t nat -A PREROUTING -p tcp --dport 80 -m isg --service-name DOWN -j DNAT --to-destination | ||
+ | |||
+ | # Linux ISG rules | ||
+ | iptables -A FORWARD -s 10.0.0.0/24 -j ISG --session-init | ||
+ | iptables -A FORWARD -d 10.0.0.0/24 -j ISG | ||
+ | |||
+ | exit 0 | ||
+ | </ | ||
+ | ==== Додаємо класи трафіку ==== | ||
+ | Перед додаванням сервісів, | ||
+ | <file conf / | ||
+ | ## Traffic classes for lISG | ||
+ | ## Format: Class name IPv4 prefix (subnet) | ||
+ | RFC1918 | ||
+ | RFC1918 | ||
+ | RFC1918 | ||
+ | |||
+ | DNS | ||
+ | DNS | ||
+ | |||
+ | GLOBAL | ||
+ | </ | ||
+ | |||
+ | **Важливо! ** Якщо вказуєте якийсь конкретний IP додавайте маску /32 | ||
+ | ==== Додаємо сервіси ==== | ||
+ | Сервіси встановлюються у файлі /// | ||
+ | <file pl / | ||
+ | ... | ||
+ | ####################### | ||
+ | | ||
+ | #################### | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | Для нашої ситуації сервіси матимуть приблизно такий вигляд: | ||
+ | |||
+ | <file pl / | ||
+ | ... | ||
+ | ####################### | ||
+ | |||
+ | # Local networks access service | ||
+ | $cfg{srv}{" | ||
+ | $cfg{srv}{" | ||
+ | $cfg{srv}{" | ||
+ | |||
+ | # Mark packets from ' | ||
+ | # to addresses from ' | ||
+ | $cfg{srv}{" | ||
+ | $cfg{srv}{" | ||
+ | $cfg{srv}{" | ||
+ | |||
+ | $cfg{srv}{" | ||
+ | $cfg{srv}{" | ||
+ | |||
+ | $cfg{srv}{" | ||
+ | $cfg{srv}{" | ||
+ | |||
+ | $cfg{srv}{" | ||
+ | $cfg{srv}{" | ||
+ | |||
+ | #################### | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | ===== Налаштування FreeRADIUS ===== | ||
+ | * Налаштовуємо FreeRADIUS за [[freeradius| цієї документації]]. | ||
+ | * Додаємо нову мережу, | ||
+ | * Прибиваємо мережу до сервера доступу з типом " | ||
+ | * Перепризначаємо атрибут User-Name в модулі " | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | * Додаємо такі атрибути для мережі (для прикладу) | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | ===== Обмеження щодо тарифних планів ===== | ||
+ | Через особливості самої системи Linux ISG ми не можемо просто так узяти і передати атрибути швидкості для користувача. Але це обмеження легко обійти. Усе, що потрібно - це додати сервіси, | ||
+ | < | ||
+ | $cfg{srv}{" | ||
+ | $cfg{srv}{" | ||
+ | </ | ||
+ | |||
+ | Після, додаємо до списку атрибутів мережі наступний: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Після чого користувачі почнуть отримувати додатково сервіс з тарифом користувача, | ||
+ | ===== Тестування ===== | ||
+ | Якщо все пройшло добре, то після спроби користувача вийти в інтернет, | ||
+ | < | ||
+ | # / | ||
+ | User IP-address NAT IP-address Port number Uniq. Identifier Durat. Octets-in Octets-out Rate-in Rate-out Service name Flags | ||
+ | 10.0.0.2 | ||
+ | </ | ||
+ | |||
+ | А якщо нам потрібно перевірити сервіси, | ||
+ | < | ||
+ | # / | ||
+ | User IP-address NAT IP-address Port number Uniq. Identifier Durat. Octets-in Octets-out Rate-in | ||
+ | 10.0.0.2 | ||
+ | 10.0.0.2 | ||
+ | </ | ||