Дано:
Linux-server (Debian), с установленными:
Сервер смотри в интернет по одному из сетевых интерфейсов (будем считать что это eth0). Внутренняя подсетка 192.168.xxx.yyy, где xxx- подсеть, для каждого филиала одна (будем считать что xxx это 001), yyy- хосты, IP адрес назначается средствами DHCP, подключение хостов происходит через PPPoE. Авторизация пользователей через Radius, база пользователей в MySQL.
Нужно:
Хранить пользователей радиуса будем в базе данных MySQL. Мы не будем касать настройки мускуля в данной статье.
Для начала создадим базу для радиуса:
[root]# mysqladmin -u root -p create radius
[root]# mysql -u root -p radius < /usr/share/doc/freeradius/examples/mysql.sql
Далее идем в каталог с конфигурационными файлами FreeRADIUS /etc/raddb (на некоторых системах, например Debian, это может быть /etc/freeradius)
Правим файл radius.conf.Находим секцию authorize и в ней:
attr_filterfilessql
Правим файл sql.conf:
driver поставить в значение rlm_sql_mysqlserver, login, password и radius_db поставить в соответствии с вашими настройками базы данных для RADIUS'а
Правим файл clients.conf, для клиета 127.0.0.1:
sercrets)nastype поставить в othershortname в значение localhostМожно еще создать клиентов, если вам это необходимо. Далее запускаем radius:
[root]# radiusd
Идем в директорию /etc/radiusclient, правим файл servers, добавив туда строчку:
localhost <secret>
где, <secret> - это секретное слово что вы установили в clients.conf для клиентов на 127.0.0.1
VPN сервер, вместо него можно и PPPoE запустить, впринципе.
Правим файл /etc/pptpd.conf
option), можно оставить как есть: /etc/ppp/options.pptpdlocalip), адрес должен быть из внутренней сети.remoteip), может быть диапазоном: 192.168.2.2-100
Создаем файл /etc/ppp/options.pptpd с примерно таким содержанием:
ipparam PoPToP lock mtu 1480 mru 1480 ms-dns 192.168.2.1 proxyarp auth +pap -chap ipcp-accept-local ipcp-accept-remote lcp-echo-failure 30 lcp-echo-interval 5 deflate 0 asyncmap 0 debug kdebug 4 plugin radius.so #plugin radattr.so
Теперь осталось только запустить pptpd, допустим такой командой:
[root]# pptpd -c /etc/pptpd.conf -p /var/run/pptpd.pid
Был выбран именно он по следующим причинам:
По сути, его дефолтная конфигурация вполне нам подходит, и можно ничего тут не трогать. Единственно необходимо прописать правила iptables, об этом ниже.
Нужно добавить следующие правила:
iptables -I FORWARD -p tcp -j ULOG --ulog-nlgroup 1 --ulog-cprange 48 --ulog-qthreshold 50 --ulog-prefix "FORWARD" iptables -I FORWARD -p udp -j ULOG --ulog-nlgroup 1 --ulog-cprange 48 --ulog-qthreshold 50 --ulog-prefix "FORWARD" iptables -I INPUT -p tcp -i ! lo -j ULOG --ulog-nlgroup 1 --ulog-cprange 48 --ulog-qthreshold 50 --ulog-prefix "INPUT" iptables -I INPUT -p udp -i ! lo -j ULOG --ulog-nlgroup 1 --ulog-cprange 48 --ulog-qthreshold 50 --ulog-prefix "INPUT" iptables -I OUTPUT -p tcp -o ! lo -j ULOG --ulog-nlgroup 1 --ulog-cprange 48 --ulog-qthreshold 50 --ulog-prefix "OUTPUT" iptables -I OUTPUT -p udp -o ! lo -j ULOG --ulog-nlgroup 1 --ulog-cprange 48 --ulog-qthreshold 50 --ulog-prefix "OUTPUT"
Все после всех этих операций статистика начнет уже собираться. Осталось настроить скрипт-парсер и веб-морду биллинга.
Биллинг
http://www.opennet.ru/base/net/traffic_bill.txt.html
http://linux.opennet.ru/base/net/ulog_traf.txt.html
http://linux.opennet.ru/base/net/traf_mes.txt.html
http://linux.opennet.ru/base/net/iptables_squid_traf.txt.html
http://linux.opennet.ru/base/net/iptables_stat.txt.html
http://linux.opennet.ru/base/net/ipcad_traf_stat.txt.html
http://linux.opennet.ru/base/net/trafstat.txt.html
http://linux.opennet.ru/base/net/ipcad_bridge.txt.html
DHCP
http://www.linuxshare.ru/docs/distro/redhat/el4/sysadmin-guide/s1-dhcp-configuring-client.html
http://www.linuxfocus.org/Russian/May2000/article150.shtml
http://community.asplinux.ru/forum/3/20187/?sid=336de0f402b323fafa7607a04a3a343a
http://wiki.asplinuxclub.org/index.php?title=BOOK_%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_DHCP-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0
http://rus-linux.net/MyLDP/MINI-HOWTO-ru/DHCP.html
OpenLDAP
http://citforum.ru/operating_systems/linux/schema_ldap/
PPPoE сервер
http://www.linuxcenter.ru/lib/articles/networking/pppoe_firewall.phtml
http://linux.yaroslavl.ru/docs/serv/pppd/ppp-dialin.html
http://www.opennet.ru/base/net/rp_pppoe.txt.html
http://www.netup.biz/article-pppoe-server.php
Другое
Как бороться со сменой IP адресов клиентами локальной сети
Поднимаем шлюзовой сервер для локальной сети (PPPoE, HTP, Radius, биллинг)
http://pptpclient.sourceforge.net/routing.phtml
http://wiki.archlinux.org/index.php/Microsoft_VPN_client_setup_with_pptpclient
[14:03:31] <phreak255> /etc/ppp/peers/stel - диалап модемный, клиент [14:03:48] <phreak255> /dev/ttyS1 [14:03:59] <phreak255> file /etc/ppp/options.ttyS1 [14:03:59] <phreak255> #init "/etc/ppp/scripts/modem-init 'ATZ' 'AT&C1&D2S7=45'" [14:03:59] <phreak255> init "/etc/ppp/scripts/modem-init 'ATZ' 'AT&C1&D2S7=45B7&U15'" [14:04:59] <phreak255> connect "/etc/ppp/scripts/modem-dial 550000" [14:04:59] <phreak255> #welcome "/etc/ppp/scripts/login qwe qwe" [14:04:59] <phreak255> disconnect "/etc/ppp/scripts/modem-hangup" [14:04:59] <phreak255> file /etc/ppp/options.persist [14:04:59] <phreak255> linkname stel [14:04:59] <phreak255> noauth [14:05:01] <phreak255> user " " [14:05:59] <phreak255> password " " [14:05:59] <phreak255> noipdefault [14:05:59] <phreak255> ipcp-accept-local [14:05:59] <phreak255> ipcp-accept-remote [14:05:59] <phreak255> defaultroute [14:05:59] <phreak255> usepeerdns [14:06:01] <phreak255> mtu 1500 [14:06:04] <phreak255> mru 1500 [14:06:05] <phreak255> #debug [14:06:07] <phreak255> #debug [14:06:10] <phreak255> #logfile /etc/ppp/peers/stel0.log [14:06:59] <phreak255> в /etc/ppp/options.ttyS1 лежит [14:06:59] <phreak255> lock [14:06:59] <phreak255> modem [14:06:59] <phreak255> crtscts [14:06:59] <phreak255> 115200 [14:06:59] <phreak255> в persist [14:07:01] <phreak255> holdoff 5 [14:07:03] <phreak255> maxfail 0 [14:07:05] <phreak255> /etc/ppp/peers/sevcity - это клиент pptp [14:07:08] <phreak255> lock [14:07:10] <phreak255> #pty "/usr/sbin/pptp 192.168.100.33 --nolaunchpppd" [14:07:59] <phreak255> pty "/usr/sbin/pptp vpn.sevcity --nolaunchpppd" [14:07:59] <phreak255> persist [14:07:59] <phreak255> holdoff 15 [14:07:59] <phreak255> maxfail 0 [14:07:59] <phreak255> linkname "sevcity" [14:08:00] <phreak255> remotename "sevcity" [14:08:02] <phreak255> noauth [14:08:04] <phreak255> user "xxxxxxx" [14:08:06] <phreak255> password "xxxxxxxx" [14:08:59] <phreak255> noipdefault [14:08:59] <phreak255> ipcp-accept-local [14:08:59] <phreak255> ipcp-accept-remote [14:08:59] <phreak255> defaultroute [14:08:59] <phreak255> #usepeerdns [14:09:00] <phreak255> mtu 1500 [14:09:02] <phreak255> mru 1500 [14:09:04] <phreak255> lcp-echo-failure 2 [14:09:06] <phreak255> lcp-echo-interval 30 [14:09:08] <phreak255> options для сервера обратны по смылу [14:09:59] <phreak255> т.е. вместо noauth - auth, требование для клиента авторизоваццо [14:09:59] <phreak255> refuse-pap - запрещение PAP-авторизации [14:09:59] <phreak255> ну там dns, wins передать [14:09:59] <phreak255> запретить клиенту адреса назначать [14:09:59] <phreak255> короче man pppd [14:10:00] <phreak255> там всё написано [14:10:02] <phreak255> единственное для pppoe вроде mtu надо чуть меньше указывать [14:10:04] <phreak255> хотя может и с 1500 работает, не помню точно [14:10:31] <phreak255> для pptp принудительное назначение 1500 работает нормально, хотя по смыслу должно быть тоже меньше [14:28:27] <phreak255> как поднимешь, кинь плиз debug-лог нормальной корректной сессии в пару минут со стороны клиента и сервера мне на мыло [14:28:46] <phreak255> phreak255@mail.ru phreak255@gmail.com