Есть у меня подписка на полезный online-tv сервис NetFlix. Сервис позволяет смотреть массу фильмов онлайн с большого количества устройств, PC, PS3, Android, iPad/iPhone — все бы ничего, но сервис работает только для их Соединенных Штатов. Отсюда возникла необходимость быстренько настроить PPTP VPN сервер на американьском VPSе. Ключевой особенностью, явлеется то, что для корректной работы с iPhone/iPad требуется несколько неочевидных настроек. Итак, поехали.
Установка пакетов
В качестве сервера PPTP будем использовать PoPToP демон. Имеет смысл скачать готовые RPM пакеты, для моей CentOS 5.5 это делается так:
wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-2.rhel5.x86_64.rpm wget http://poptop.sourceforge.net/yum/stable/packages/ppp-2.4.4-14.1.rhel5.x86_64.rpm
И установка:
rpm -i ./ppp-2.4.4-14.1.rhel5.x86_64.rpm rpm -i ./pptpd-1.3.4-2.rhel5.x86_64.rpm
Настройка PPTP сервера
Далее правим /etc/pptpd.conf. Все что в нем нужно сделать, это раскомментировать строки:
localip 10.100.0.1 remoteip 10.100.0.234-238,10.100.0.245
И изменить там IP адреса (по желанию). Параметр localip — будет адресом сервера на конце ppp туннеля, remoteip — соответственно диапазон IP которые будут выдаваться клиентам. На этом с /etc/pptpd.conf закончили.
Следующим на очереди /etc/ppp/options.pptpd. Тут правок побольше. Привожу файл целиком:
###############################################################################
# $Id: options.pptpd,v 1.11 2005/12/29 01:21:09 quozl Exp $
#
# Sample Poptop PPP options file /etc/ppp/options.pptpd
# Options used by PPP when a connection arrives from a client.
# This file is pointed to by /etc/pptpd.conf option keyword.
# Changes are effective on the next connection. See "man pppd".
#
# You are expected to change this file to suit your system. As
# packaged, it requires PPP 2.4.2 and the kernel MPPE module.
###############################################################################
# Authentication
# Name of the local system for authentication purposes
# (must match the second field in /etc/ppp/chap-secrets entries)
name pptpd
# Strip the domain prefix from the username before authentication.
# (applies if you use pppd with chapms-strip-domain patch)
#chapms-strip-domain
# Encryption
# (There have been multiple versions of PPP with encryption support,
# choose with of the following sections you will use.)
# BSD licensed ppp-2.4.2 upstream with MPPE only, kernel module ppp_mppe.o
# {{{
refuse-pap
refuse-chap
refuse-mschap
# Require the peer to authenticate itself using MS-CHAPv2 [Microsoft
# Challenge Handshake Authentication Protocol, Version 2] authentication.
require-mschap-v2
# Require MPPE 128-bit encryption
# (note that MPPE requires the use of MSCHAP-V2 during authentication)
require-mppe-128
# }}}
# OpenSSL licensed ppp-2.4.1 fork with MPPE only, kernel module mppe.o
# {{{
#-chap
#-chapms
# Require the peer to authenticate itself using MS-CHAPv2 [Microsoft
# Challenge Handshake Authentication Protocol, Version 2] authentication.
#+chapms-v2
# Require MPPE encryption
# (note that MPPE requires the use of MSCHAP-V2 during authentication)
#mppe-40 # enable either 40-bit or 128-bit, not both
#mppe-128
#mppe-stateless
# }}}
# Network and Routing
# If pppd is acting as a server for Microsoft Windows clients, this
# option allows pppd to supply one or two DNS (Domain Name Server)
# addresses to the clients. The first instance of this option
# specifies the primary DNS address; the second instance (if given)
# specifies the secondary DNS address.
ms-dns 8.8.8.8
ms-dns 8.8.4.4
# If pppd is acting as a server for Microsoft Windows or "Samba"
# clients, this option allows pppd to supply one or two WINS (Windows
# Internet Name Services) server addresses to the clients. The first
# instance of this option specifies the primary WINS address; the
# second instance (if given) specifies the secondary WINS address.
#ms-wins 10.0.0.3
#ms-wins 10.0.0.4
# Add an entry to this system's ARP [Address Resolution Protocol]
# table with the IP address of the peer and the Ethernet address of this
# system. This will have the effect of making the peer appear to other
# systems to be on the local ethernet.
# (you do not need this if your PPTP server is responsible for routing
# packets to the clients -- James Cameron)
proxyarp
# Normally pptpd passes the IP address to pppd, but if pptpd has been
# given the delegate option in pptpd.conf or the --delegate command line
# option, then pppd will use chap-secrets or radius to allocate the
# client IP address. The default local IP address used at the server
# end is often the same as the address of the server. To override this,
# specify the local IP address here.
# (you must not use this unless you have used the delegate option)
#10.8.0.100
# Logging
# Enable connection debugging facilities.
# (see your syslog configuration for where pppd sends to)
#debug
# Print out all the option values which have been set.
# (often requested by mailing list to verify options)
#dump
# Miscellaneous
# Create a UUCP-style lock file for the pseudo-tty to ensure exclusive
# access.
lock
# Disable BSD-Compress compression
nobsdcomp
noaccomp
# Disable Van Jacobson compression
# (needed on some networks with Windows 9x/ME/XP clients, see posting to
# poptop-server on 14th April 2005 by Pawel Pokrywka and followups,
# http://marc.theaimsgroup.com/?t=111343175400006&r=1&w=2 )
#novj
#novjccomp
# turn off logging to stderr, since this may be redirected to pptpd,
# which may trigger a loopback
nologfd
# put plugins here
# (putting them higher up may cause them to sent messages to the pty)
Основной параметр, без которого не работает связь с iPhone/iPad — noaccomp.
Двльше настраиваем логины и пароли для доступа к VPN в файле /etc/ppp/chap-secrets, их может быть несколько.
# Secrets for authentication using CHAP # client server secret IP addresses your_login pptpd superpass * your_login1 pptpd superpass1 *
Теперь можно запустить pptpd и включить автозапуск при старте системы:
/etc/init.d/pptpd start chkconfig pptpd on
Конфигурация файрволла
На данном этапе, мы имеем полностью настроенный PPTP VPN сервер, к котому можно подключаться, с использованием логина/пароля из файла /etc/ppp/chap-secrets. Теперь необходимо включить ip_forwarding и создать парвила файрволла для NAT, чтобы мы могли выходить в интернет с IP-адреса сервера. В файле /etc/sysctl.conf раскомментируем строчку
net.ipv4.ip_forward=1
И выполняем:
sysctl -p
Далее добавляем правила в iptables и сохраняем для автозапуска:
iptables -t nat -A POSTROUTING -s 10.100.0.0/24 -o eth0 -j SNAT --to-source 1.2.3.4 /etc/init.d/iptables save
Где вместо 1.2.3.4 ставится IP сетевого интерфейса eth0 вашего сервера.
В общем то, на этом и все.
Каким образом посмотреть eth0, и если с роутера пробрасывать (Port Forwarding) то какой порт для pptpd указать ?
PPTP использует порт 1723.
Также убедитесь в том, что ваш роутер пропускает 47 IP Protocol (GRE)
Делал по Вашей инструкции, возникла проблема:
не запускается service pptpd,
service pptpd status
pptpd dead but subsys locked
Как быть ?