OpenVPN
Особая благодарность Ck-NoSFeRaTU
Установка
Пример настройки в среде FreeBSD.
1. Ставим openvpn из портов:
# cd /usr/ports/security/openvpn # make clean install
2. Radiusplugin for OpenVPN
Забираем последнюю версию радиус-плагина для openvpn с cvs и собираем его(последний выложенный релиз на сайте глючит)
# cd /tmp # cvs -z3 -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/radiusplugin co radiusplugin # cd radiusplugin # g++ -Wall -I/usr/local/include -L/usr/local/lib -shared -o radiusplugin.so \ AccountingProcess.cpp Exception.cpp PluginContext.cpp UserAuth.cpp AcctScheduler.cpp \ IpcSocket.cpp radiusplugin.cpp User.cpp AuthenticationProcess.cpp main.cpp UserAcct.cpp \ UserPlugin.cpp Config.cpp RadiusClass/RadiusAttribute.cpp RadiusClass/RadiusPacket.cpp \ RadiusClass/RadiusConfig.cpp RadiusClass/RadiusServer.cpp \ RadiusClass/RadiusVendorSpecificAttribute.cpp -lgcrypt -lgpg-error -lstdc++ -lm
3. Создаем папку с конфигами, копируем туда радиус-плагин, его конфиг
# mkdir /usr/local/etc/openvpn # cp radiusplugin.so /usr/local/etc/openvpn/ # cp radiusplugin.cnf /usr/local/etc/openvpn/
Создаем сертификаты (Читаем команды для openssl тут)
4. Файл /usr/local/etc/openvpn/server.conf
dev tap8 port 1194 mode server tls-server server 10.1.100.0 255.255.255.0 10.1.100.1 management 127.0.0.1 7505 ca /usr/local/etc/openvpn/keys/server/ca.crt cert /usr/local/etc/openvpn/keys/server/server.crt key /usr/local/etc/openvpn/keys/server/server.key dh /usr/local/etc/openvpn/keys/server/dh1024.pem tls-auth /usr/local/etc/openvpn/keys/server/ta.key keepalive 10 60 client-connect /usr/local/abills/libexec/openvpn-up client-disconnect /usr/local/abills/libexec/openvpn-down ifconfig-pool-persist /usr/local/etc/openvpn/keys/server/ip.txt 1300000 plugin /usr/local/etc/openvpn/radiusplugin.so /usr/local/etc/openvpn/radiusplugin.cnf username-as-common-name comp-lzo push "redirect-gateway def1" push "route 0.0.0.0 0.0.0.0" push "dhcp-option DNS 10.1.100.1" log-append /var/log/openvpn-server.log
5. Файл /usr/local/etc/openvpn/radiusplugin.cnf
NAS-Identifier=openvpn Service-Type=2 Framed-Protocol=1 NAS-Port-Type=5 NAS-IP-Address=127.0.0.1 OpenVPNConfig=/usr/local/etc/openvpn/server.conf #subnet=255.255.255.0 server { acctport=1813 authport=1812 name=127.0.0.1 retry=1 wait=1 sharedsecret=наш_секретный_пароль_от_радиуса }
6. Файл /usr/local/abills/libexec/openvpn-up
#!/bin/bash /usr/local/abills/libexec/linkupdown openvpn up $dev inet $ifconfig_local $ifconfig_pool_remote_ip $common_name >& /dev/null **/usr/local/abills/libexec/openvpn-down**\\ #!/bin/bash /usr/local/abills/libexec/linkupdown openvpn down $dev inet $ifconfig_local $ifconfig_pool_remote_ip $common_name >& /dev/null
7. Заводим ещё один nas с NAS-Identifier=тому, что мы указывали в radiusplugin.cnf, тип Other nas server. В radius-параметры не забываем Acct-Interim-Interval=300.
8. /usr/local/sbin/openvpn –daemon –config /usr/local/etc/openvpn/server.conf
Теперь про клиентов (Мастдай):
9. Openvpn/config/example.ovpn
nobind remote ип_нашего_сервера port 1194 client dev tap proto udp auth-user-pass authinfo tls-auth ta.key pull tls-client reneg-sec 1209600 ca tmp-ca.crt cert client.crt key client.key comp-lzo
В Openvpn/config/authinfo две строчки:
логин
пароль
Примечания
Примечание по клиентскому openvpn:
С какой-то версии openvpn`а заблокирована возможность хранения в текстовом файле логина и пароля пользователя, я не хотел напрягать пользователей каждый раз вводить его вручную, поэтому собрал собственный инсталятор openvpn для клиентов. В него входят уже разблокированные бинарники openvpn, драйвера, openvpn-gui, набор нужных сертификатов и конфигов, а также форма, где просит указать логин и пароль, т.е. клиенту нужно только вписать свой логин/пароль прямо в формочку в инсталяторе, а остальное всё настроит он уже сам. Если кому нужно, то поделюсь скриптами для nsis`а.
Примечание по radiusplugin:
Обработку Framed-IP-Address завести не удалось. Автор пишет следующее:
- OpenBSD(BSD):
- RADIUS attributes FramedIP and FramedRoutes mandatory
- RADIUS attribute FramedIP is ignored
Надо бы связаться с автором и спросить будет ли чинить FramedIP в бсд или нет…
Поэтому пока как костыль, если нужно использование статики, юзаем ifconfig-pool-persist в конфиге openvpn, к примеру ifconfig-pool-persist /usr/local/etc/openvpn/keys/server/ip.txt 1300000.
И в этот ip.txt прописываем вручную/скриптами статические ипшники, в таком формате:
логин,ип
логин2,ип2