четверг, 20 августа 2009 г.

Pop-Top или VPN сервер на Linux с использованием PPTPD.




В своё время задача доставила мне хлопот. Имеется 2 линуксовых машины. Сервер - Mandriva 2007, client - Ubuntu Server 8.04 LTS - отличная система. Собственно vpn гейт сделан в первую очередь для того, чтобы виндовые пользовтели имели доступ к корпоративной локалке, файловому самбовому серваку и т.д. Но от того чтоб сделать туннель между линуксами я тож не удержался... изначально сервак был без шифрования, потом всётки решил, что оно пригодится :)

Итак параметры немного отличаются в разных версиях pptpd. В манах все подробно описано. Нам нужно, чтоб на машине были pppd, pptpd, pptpd-client.
Настраиваем vpn сервер. Конфиги:

[root@gate ~]# cat /etc/pptpd.conf
option /etc/ppp/options.pptpd
logwtmp
speed 115200

# IP-адрес сервера в локальной сети
localip 172.26.0.1

# Диапазон адресов для клиентов PPTP-сервера
remoteip 172.26.0.2-254

debug

[root@gate ~]# cat /etc/ppp/options.pptpd
lock
debug
auth
refuse-pap
refuse-chap
proxyarp
mppe stateless
ms-dns 172.26.0.1
ms-dns 192.168.0.2
#require-chapms
require-mschap-v2
#+chapms-v2
novj
novjccomp
nologfd



[root@gate ppp]# cat /etc/ppp/options

lock
noauth
noipdefault
usepeerdns
mppe required

[root@gate ppp]# cat chap-secrets
# Secrets for authentication using CHAP
# client server secret IP addresses


# Если мы хотим привязать определённый IP к логину:
vpupkin * 12311jj12 172.26.0.37
vbukin * asda 172.26.0.5
и т.д.
чтобы дать динамич ip ставим вместо адреса звёздочку.

Не забываем про IPTABLES:
#VPN SERVER разрешаем GRE. Нужно помнить, что это portless протокол ;)
$IPTABLES -A INPUT -i $INTERNET -p gre -j ACCEPT
$IPTABLES -A OUTPUT -o $INTERNET -p gre -j ACCEPT

#Ну и дырочка, через которую мы будем заходить на сервер :)
$IPTABLES -A INPUT -i $INTERNET -p tcp -m tcp --dport 1723 -j ACCEPT
$IPTABLES -A OUTPUT -o $INTERNET -p tcp -m tcp --dport 1723 -j ACCEPT

Настройки Linux клиента:

root@file:/etc/ppp# cat options
name vpupkin
remotename vpn
defaultroute
asyncmap 0
crtscts
hide-password
local
lcp-echo-interval 30
lcp-echo-failure 4
noipx
lock
debug
auth
refuse-pap
refuse-chap
proxyarp
#mppe stateless
require-mschap-v2
novj
novjccomp

Собственно подключение для конкретного аккаунта.
root@file:/etc/ppp/peers# cat vpn
pty "pptp 192.168.0.3 --loglevel 2 --nolaunchpppd"
user vpupkin
password "12311jj12"
nodeflate
nobsdcomp
noauth
lock
noproxyarp
nomppe-stateful
require-mppe-128 #Включаем шифрование
file /etc/ppp/options.pptp

root@file:~# cat /etc/ppp/options.pptp
lock
noauth
nobsdcomp
nodeflate
persist
mppe-stateful
#mppe-stateless
#require-mschap-v2

Набираем в строке клиента:

Client:
pppd call vpn

/var/log/messages
Aug 20 22:24:36 file pppd[995]: pppd 2.4.4 started by root, uid 0
Aug 20 22:24:36 file pppd[995]: Using interface ppp0
Aug 20 22:24:36 file pppd[995]: Connect: ppp0 <--> /dev/pts/1
Aug 20 22:24:40 file pppd[995]: CHAP authentication succeeded
Aug 20 22:24:40 file pppd[995]: MPPE 128-bit stateless compression enabled
Aug 20 22:24:43 file pppd[995]: local IP address 172.26.0.11
Aug 20 22:24:43 file pppd[995]: remote IP address 172.26.0.1


root@file:~# ifconfig ppp0

ppp0 Link encap:Point-to-Point Protocol
inet addr:172.26.0.11 P-t-P:172.26.0.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1496 Metric:1
RX packets:9 errors:0 dropped:0 overruns:0 frame:0
TX packets:17 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:125 (125.0 B) TX bytes:669 (669.0 B)


Server:

/var/log/messages
Aug 20 22:24:38 gate pptpd[31628]: CTRL: Client 192.168.0.2 control connection started
Aug 20 22:24:39 gate pptpd[31628]: CTRL: Starting call (launching pppd, opening GRE)
Aug 20 22:24:39 gate pppd[31629]: Plugin /usr/lib/pptpd/pptpd-logwtmp.so loaded.
Aug 20 22:24:39 gate pppd[31629]: pptpd-logwtmp: $Version$
Aug 20 22:24:39 gate pppd[31629]: pppd 2.4.3 started by root, uid 0
Aug 20 22:24:39 gate pppd[31629]: Using interface ppp1
Aug 20 22:24:39 gate pppd[31629]: Connect: ppp1 <--> /dev/pts/3
Aug 20 22:24:42 gate pppd[31629]: MPPE 128-bit stateless compression enabled
Aug 20 22:24:45 gate pppd[31629]: Cannot determine ethernet address for proxy ARP
Aug 20 22:24:45 gate pppd[31629]: local IP address 172.26.0.1
Aug 20 22:24:45 gate pppd[31629]: remote IP address 172.26.0.11
Aug 20 22:24:45 gate pppd[31629]: pptpd-logwtmp.so ip-up ppp1 vpupkin 192.168.0.2

Тунель создан. Как видно у клиента более свежая версия pptpd :)

Из винды всё проще. Создать подключение - подключение к сети на рабочем месте - подключенме к vpn - имя - ip. Потом в свойствах включаем шифрование (вроде уже включено по умолчанию). И всё. Вуаля:



Будут вопросы, милости прошу - icq #53819426.

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

Отправить комментарий