Сегодня мы заглянем в гости к OpenBSD, поскольку статьи на сайте посвящены в основном FreeBSD. Но и обходить вниманием такую замечательную систему как OpenBSD было бы неправильным. Данная статья представляет вольный перевод англоязычной статьи
мартовского номера BSDMag.
В январе 2010 года
npppd был добавлен в кодовую базу OpenBSD и позиционировался как PPTP/L2TP VPN и PPPoE сервер. Поскольку npppd находится в стадии активной разработки, то порта пока нет, но его можно собрать из исходных текстов. Для начала установите OpenBSD-current либо дождитесь версии OpenBSD 5.1, которая должна выйти 1 мая 2012 г.
Для начала проведем небольшие подготовительные работы: задействуем протоколы gre, esp и pipex через sysctl:
$ sudo sysctl net.inet.gre.allow=1 #(for PPTP)
$ sudo sysctl net.inet.esp.allow=1 #(for IPSEC)
$ sudo sysctl net.pipex.enable=1 #(for PIPEX)
и перезагрузимся, чтобы изменения вступили в силу.
Далее установим
npppd:
cd /usr
cvs -d anoncvs@anoncvs.fr.openbsd.org:/cvs checkout -P src/usr.sbin/{Makefile.inc,npppctl,npppd}
cd src/usr.sbin/npppd
make
sudo make install
cd ../npppctl
make
sudo make install
После компиляции и установки в каталоге /usr/sbin появятся 2 файла - это
npppd (собственно демон) и
npppctl (утилита управления).
Создадим конфигурационный файл:
sudo mkdir -m 0755 /etc/npppd
Вот пример конфигурационного файла:
[npppd.conf]
-------------------------------------------------------------------------------
interface_list: tun0
interface.tun0.ip4addr: 192.168.255.1
# IP address pool
pool.dyna_pool: 192.168.255.0/25
pool.pool: 192.168.255.0/24
# Local file authentication
auth.local.realm_list: local
auth.local.realm.acctlist: /etc/npppd/npppd-users.csv
realm.local.concentrate: tun0
# RADIUS authentication / accounting
#auth.radius.realm_list: radius
#auth.radius.realm.server.address: 127.0.0.1:1812
#auth.radius.realm.server.secret: password
#auth.radius.realm.acct_server.address: 127.0.0.1:1813
#auth.radius.realm.acct_server.secret: password
#realm.radius.concentrate: tun0
lcp.mru: 1400
auth.method: mschapv2 chap
ipcp.dns_primary: 192.168.107.254
#ipcp.dns_secondary: 192.168.6.20
ipcp.nbns_primary: 192.168.107.254
#ipcp.nbns_secondary: 192.168.6.20
#ipcp.assign_fixed: true
#ipcp.assign_userselect: true
pptpd.enabled: true
pptpd.ip4_allow: 0.0.0.0/0
# L2TP daemon
l2tpd.enabled: true
l2tpd.ip4_allow: 0.0.0.0/0
l2tpd.require_ipsec: false
В этом тестовом конфиге для VPN соединений используется интерфейс tun0 и пользователям выдается подсеть 192.168.255.0/25
При старте
npppd интерфейсу tun0 будет присвоен IP 192.168.255.1, пользователи будут авторизоваться по записям в файле /etc/npppd/npppd-users.csv
npppdтакже может использвать для авторизации RADIUS-сервер.
Формат файла /etc/npppd/npppd-users.csv весьма прост:
Username,Password,Framed-IP-Address,Framed-IP-Netmask,Description,Calling-Id
user1,password1
user2,password2
То есть, мы можем задать логин, пароль, выдаваемый IP-адрес и маску подсети и описание.
По умолчанию, достаточно задать только первые два поля.
Следует учесть что пароли хранятся в открытом виде и безопасность обеспечивается только правами доступа к файлу, если вам потребуется большая безопасность - используйте RADIUS-сервер.
Настройка PPTP завершена и можно запустить
npppd с ключами -d для отладки и -D для запуска в режиме демона.
#/usr/sbin/npppd -D
Попробуем соединиться с нашим VPN сервером, используя pptp. Для начала поставим его:
$ sudo pkg_add pptp
и поправим конфиг /etc/ppp/ppp.conf:
vpn_pptp:
set device "!/usr/local/sbin/pptp --nolaunchpppd A.B.C.D"
set authname user1
set authkey password1
set mppe 128 stateless
disable protocomp
deny protocomp
disable ipv6cp
где соотвественно A.B.C.D нужно заменить на внешний IP адрес сервера.
Соединяемся:
$ sudo ppp -ddial vpn_pptp
Для мониторинга подключенных пользователей можно использовать утилиту
npppctl # npppctl session brief
Ppp Id Assigned IPv4 Username Proto Tunnel From
---------- --------------- -------------------- ----- -------------------------
6 192.168.255.62 giovanni PPTP host222-19-dyn.51-85-r.provider.it:49230
# npppctl session all
Ppp Id = 8
Ppp Id : 8
Username : giovanni
Realm Name : local
Concentrated Interface : tun0
Assigned IPv4 Address : 192.168.255.62
Tunnel Protocol : PPTP
Tunnel From : host222-19-dyn.51-85-r.provider.it
Start Time : 2012/02/07 14:05:41
Elapsed Time : 6967 sec (1 hour and 56 minutes)
Input Bytes : 5233902 (5.0 MB)
Input Packets : 38364
Input Errors : 1 (0.0%)
Output Bytes : 27619691 (26.3 MB)
Output Packets : 46374
Output Errors : 26 (0.1%)
Если вы хотите отключить всех пользователей, то
#npppctl clear all
Если ваш VPN сервер находится за NAT-ом, будет полезным добавить
inet 192.168.255.1
!route add 192.168.255.0/25 192.168.255.1
в файл /etc/hostname.tun0.
Ну вот и все. Удачи ;)