Есть у меня подписка на полезный 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
Как быть ?