суббота, 24 сентября 2011 г.

Настройка VPN Клиент Сервер на Debian

Задача: Дать доступ к корпоративной сети удаленным пользователям.
Установить на сервере в корпоративной сети сервер vpn, разрешить использование сетевых шар, удаленным пользователям. (в сети на каждую шару стоит ограничение доступа по ip)
Сервер в сети стоит за NAT'ом.

Решение:  
1. Установка vpn сервера pptpd
apt-get install pptpd
Настройка pptp сервера.
Открываем конфиг /etc/pptp.conf

option /etc/ppp/pptpd-options
debug
bcrelay eth1
localip 192.168.0.1
remoteip 192.168.0.150-200
option - подключение конфиг файла, о нем ниже.
bcrelay eth1 - передача VPN-клиентам широковещателных пакетов, смотрящий на роутер (о настройке роутера ниже.)
localip - ip адреса vpn сервера в сети.
В данном случае:
  •  192.168.0.1 - смотрит в сеть
remouteip - диапазон адресов для выдачи клиентам при подключении к vpn
Открываем конфиг /etc/ppp/pptpd-options
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
#require-mschap
#require-mppe-128
#ms-dns 192.168.0.1
nodefaultroute
lock
nobsdcomp
proxyarp
auth
logfile /var/log/pptpd.log
name - имя сервера vpn
refuse-pap - отключаем аутентификацию по протоколу pap
refuse-chap - отключаем аутентификацию по протоколу chap
refuse-mschap - отключаем аутентификацию по протоколу mschap
require-mppe-128 - требовать использование mppe с 128-битным шифрованием, в данном случае отключено
ms-dns - указывать клиентам днс сервер, в данном случае не нужно
nodefaultroute - указываем клиентам, не использовать vpn подключение шлюзом по умолчанию. для windows это не поможет, придется в ручную убирать галку в свойствах tcp подключения.
lock - создавать файл блокировки
proxyarp - если клиентам раздавать адреса из существующей сети, то нужно указывать. Если адреса клиентов из другой подсети, нужно за комментировать.
nobsdcomp - отключаем сжатие BSD-Compress (Если используется система не BSD отключить)
auth - требовать от сервера подтвердить свою подлинность перед началом обмена пакетами

Создаем пользователей, которые могут подключаться к vpn.
Открываем файл /etc/ppp/chap-secrets
username name pptpd pass *
name * pass 192.168.0.151
пользователю username может назначится любой ip адрес из диапазона 150-200 (указывали в настройках). и этот пользователь доступен только для сервера "pptpd".
пользователю name всегда будет присваиваться ip 192.168.0.151

Очень хорошо описаны все опции конфигов pptp -  читать

Перезапускам сервер
/etc/init.d/pptpd restart

Сервер работает. Но он не доступен из вне, так он еще и за nat'ом у нас. Исправим этом.

Необходимо разрешить входящие соединения по 47 протоколу, а так же входящие соединения на tcp порт 1723

IPTABLES -A INPUT -p gre -s 0/0 -j ACCEPT
IPTABLES -A OUTPUT -p gre -m state --state RELATED,ESTABLISHED -j ACCEPT
IPTABLES -A INPUT -p tcp -s 0/0 --dport 1723 j ACCEPT
А также нужно пробросить порт 1723 в роутере:
Открываем настройки роутера. Раздел NAT. Указываем имя/выбираем из списка pptp
если в списке серверов, не оказалось pptp - указываем вручную порты 1723. Сохраняем.

Также удобно, если не выделенный ip/нет днс имени, зарегистрировать себе днс в dyndns.
в роутере также указан настрйоки dyndns. Не буду тут останавливаться, ничего сложного нет.
Если у кого сервер смотрит в интернет т.е. Не за натом. Используйте ddclient, описание здесь 


2. Настройка подключения


На клиентах устанавливаем pptp-linux
apt-get install pptp-linux
Настройка pptp подключения
Можно запустить создание подключения указав параметры.

pptpsetup -create vpn -server username.dyndns.org -username username -password passw
vpn - имя подключения
username.dyndns.org - днс имя сервера
username/passw - логин / пароль pptp

При этом создаются/редактируется файл /etc/ppp/peers/vpn, можно его отредактировать
 # written by pptpsetup
pty "username.dyndns.org --nolaunchpppd"
lock
nobsdcomp
nodeflate
name username
remotename vpn
ipparam vpn
pty - создать vpn подключение
lock - создать файл блокировки
name - логин
remotename - имя удалённой системы для аутентификации
linkname - устанавливает логическое имя канала.
ipparam - передавать ip адрес, с которого подключались к vpn

!upd: заметил, что рвется соединение при копировании файлов.
Посмотрел mtu.
ifconfig ppp1| fgrep -i mtu
 оказалось 1500
UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
Тогда в созданное подключение (/etc/ppp/peers/vpn) добавил строку
mtu 1460
Теперь соединение не рвется.

в файле /etc/ppp/chap-secrets - уже создана запись с логином и паролем для vpn

# added by pptpsetup for vpn
username vpn "passw" *
Пробуем подключится:
sudo pon vpn
Смотрим лог подключения:
sudo plog
Sep 24 13:10:39 debian pppd[15573]: Connect: ppp1 <--> /dev/pts/3
Sep 24 13:10:40 debian pppd[15573]: CHAP authentication succeeded: Access granted
Sep 24 13:10:40 debian pppd[15573]: CHAP authentication succeeded
Sep 24 13:10:41 debian pppd[15573]: local  IP address 192.168.0.150
Sep 24 13:10:41 debian pppd[15573]: remote IP address 192.168.0.1

Мы подключились.

Чтобы подключать vpn при загрузке компьютера, пропишем в файл /etc/network/interfaces
auto ppp1
iface ppp1 inet ppp
    provider vpn
    pre-up link set ppp0 up
pre-up link set ppp0 up - перед тем как подключить vpn проверяет, подключен ли интернет ppp0

Монтируем шару:
Я внес в /etc/fstab запись
//192.168.0.1/share /media/share smbfs username=user,password=pass,rw,iocharset=utf8,noauto,noexec,noatime 0 0
 И монтирую. конечно для начала нужно создать точку монтирования mkdir /media/share
 mount /media/share
монтирования описано тут


Комментариев нет: