Чуточку о VPN в Linux

Данная статья не претендует на полноту описания натроек VPN. Здесь описано решение конкретной задачи, и ни в коем случае не может являться панацеей.
В наличии есть оборудование ADSL которое работает только мостом. Т.е. вопросы маршрутизации, автоирзации и аккаунтинга она решать не может. Именно поэтому было принято решение пускать пользователей через VPN.

Исходные данные:
1. Сервер на базе OS Linux (что может быть прекрасней :) )
2. DSLAM ZyXEL IES-1000 с модулями ADSL
3. Было указание выделять пользователям сетки по 4 ip. У меня получилост 16 сетей по 4 адреса.
4. Сервисы каждого клиента должны быть видны из вне. Т.е. NAT мне не подходит

Устанавливаем pppd. Версию и способ установки можете выбрать сами. Я ставил из rpm версию 2.4.1
Устанавливаем pptpd. С ней заморочек не возникло. Установлена так же из rpm, версия pptpd-server-1.1.2

Правим файлы.
-----------

--------- /etc/pptpd.conf --------
#Указываем файл в котором будут настройки самого ppp соединения
options /etc/ppp/options.adsl
#Чтобы значть что происходит с pptpd включаем debug
debug
#Указываем на то что приниматься запрсы будут только на 192.168.0.3
listen 192.168.0.3
#В каком файлике хранится pid
pidfile /var/run/pptpd.pid
----------------------------------

этот файлик остался нетронутым. Его используют пользователи dial-up совместно с файлами вида options.ttyX

------------ options -------------
-detach
auth
login
proxyarp
modem
crtscts
lock
debug
----------------------------------

--------- options.adsl -----------
ipparam PoPToP
lock
mtu 1490
mru 1490
192.168.0.3:192.168.65
ms-dns 192.168.0.3
proxyarp
auth
-pap
+chap
ipcp-accept-local
ipcp-accept-remote
deflate 0
----------------------------------

Будем использовать CHAP аутентификацию. Заводить реальных пользователей в системе не имеет смысла.

--------- chap-secrets -----------
user * password 192.168.0.66
----------------------------------

Я хочу присваивать IP по именам, поэтому в файле chap-secrets указываю его явным образом. До подключения абонент настраивает свою сетевую карту, прописывая первый ip адрес из отведенной ему сети с маской этой сети, т.е.
ip 192.168.0.65
mask 255.255.255.252
gw 192.168.0.3

После подключения к серверу VPN ему отдается адрес 192.168.0.66 с маской 255.255.255.255

Далее мне нужно разобраться с маршрутизацией подсетей и выпускать пользователей за пределы своего сервера.

route add -net 192.168.0.64 netmask 255.255.255.252 eth0
route add -net 192.168.0.68 netmask 255.255.255.252 eth0
route add -net 192.168.0.72 netmask 255.255.255.252 eth0
....
route add -net 192.168.0.124 netmask 255.255.255.252 eth0

Теперь iptables
---------------
#Здесь позволяем нашим подсетям работать с pptpd и пропускаем протокол 47

iptables -A INPUT -p tcp -s 192.168.0.64/26 --sport 1024:65535 -d 192.168.0.3 --dport 1723 -j ACCEPT
iptables -A INPUT -p 47 -s 192.168.0.64/26 -d 192.168.0.3 -j ACCEPT

#Готовимся пропускать пользователей наружу и в их сторону. Здесь же считаем входящий/исходящий трафик

iptables -A FORWARD -i ppp+ -o eth0 -s 192.168.0.64/30 -d 0/0 -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp+ -s 0/0 -d 192.168.0.64/30 -j ACCEPT

И так для каждой подсети, т.е. 16 раз :)
Вообще-то добавлять правила iptables можно в момент подключения пользователя. Так даже гибче получится. Пишется скрипт по вкусу. Запускается из /etc/ppp/auth-up. В этом же скрипте можете развить тему биллинга, хоть повременного, хоть по объему трафика.

Теперь настройка MS клиента.
----------------------------
Настройка виндового клиента не составляет особого труда. В Windows2000, например, создается VPN соединение с параметрами по умолчанию, а затем в свойствах соединения убирается галочка относительно шифрования данных.

PS: Эта статья написана скорее для того чтобы самому не забыть как делалось, ну и заодно, может, пригодится кому.
При создании данной статьи не пострадало ни одной клавиатуры.

RSS-материал