Crossroads » BLOG » Записки чайника » Выделенный IP адрес средствами pptpd

Выделенный IP адрес средствами pptpd

  • Dislike
  • 0
  • Like
Причин для использования VPN (Виртуальная Приватная Сеть) много и у каждого они свои: Необходимость иметь выделенный «белый» IP-адрес тогда, когда провайдер не предоставляет такой возможности; обход цензуры, когда в стране проживания что-то недоступно; шифрование трафика при подключении к незащищённым сетям (WI-FI, интернет-кафе) и так далее.
В сети море содранных друг у друга «инструкций» по настройке VPN, но 95% «авторов» сами никогда это не настраивали и вообще смутно представляют, о чём идёт речь. Столкнувшись с необходимостью в такой сети впервые, неделю блуждая по таким «инструкциям», но подняв всё же VPN сервер, я решила описать свои шаги по настройке.
Имеем: Два ПК с Windows 7 и Ubuntu 12.04 на борту, специально арендованный для этой цели удалённый VPS сервер (виртуализация OpenVZ) с минимальной конфигурацией, c операционной системой Debian Squeeze и желание настроить свою VPN, а не платить за ограничения сторонних провайдеров.
На сервере должны быть включены TUN/TAP, PPP и NAT. Поэтому перед покупкой VPS нелишнем будет уточнить у хостера, разрешены ли у них виртуальные приватные сети, после чего подобрать подходящую конфигурацию, тарифный план, отписать в поддержку хостера и попросить включить вышеперечисленное для своего VPS.
Ставим пакет pptpd
apt-get install pptpd

Редактируем файл /etc/pptp.conf
Оставляем всё, что там есть, вносим лишь пару изменений. Ищем строку «bcrelay» и раскомментируем её. По умолчанию она выглядит как «bcrelay eth1», где «eth1» – сетевой интерфейс сервера. На VPS сетевой интерфейс, соединяющий сервер с внешним миром, обычно один. Уточнить это можно командой «ifconfig». В моём случае это «venet0».
Далее ищем строки «localip» и «remoteip». Раскомментируем их. Первая – внешний ip-адрес сервера, вторая – локальные адреса нашей виртуальной сети, присваиваемые компьютерам, подключающимся к VPN.
localip ххх.ххх.ххх.ххх
remoteip 10.20.20.20-23,10.20.20.25

Первая строка – ip сервера. Вторая – ip-адреса в моей сети. Из чего следует, что подключившемуся будет присвоен ip-адрес из диапазона 10.20.20.20 - 10.20.20.23. 10.20.20.25 – зарезервированный ip-адрес. Количество ip-адресов в диапазоне ограничены лишь конфигурацией вашего сервера и шириной канала. Если вы не планируете подключать к своей сети сотню пользователей, то вышеуказанного примера более чем достаточно для вашего ПК, ноутбука, Айфона и «рабочей лошадки» на работе. Один остаётся про запас.
Сохраняем изменения и переходим к файлу /etc/ppp/pptpd-options
В нём мы проверяем наличие и незакомментированность следующих строк:
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
ms-dns 8.8.8.8
ms-dns 8.8.4.4
proxyarp
nodefaultroute
lock
nobsdcomp

По умолчанию все они должны бать в таком виде, кроме строк «ms-dns». Строки «refuse» отвергают указанные в них соединения, строка «require-mschap-v2» требует соединение «mschap-v2», строка «require-mppe-128» требует 128-ми битное шифрование трафика, строки «ms-dns» - это DNS, как не трудно догадаться. Это могут быть DNS провайдера, либо публичные DNS Google, как в моём случае.
Сохраняем изменения и переходим к файлу /etc/ppp/chap-secrets. Приводим его к следующему виду:
# Secrets for authentication using CHAP
Username1            pptpd            pass          10.20.20.25
Username2            pptpd            pass          *

Где «Username» - имя пользователя, «pptpd» - имя vpn-сервера (должно совпадать со строкой «name pptpd» файла «pptpd-options»), «pass» - пароль пользователя, а далее закреплённый за пользователям ip, указанный в файле «pptp.conf» (первая строка), либо звёздочка, указывающая на то, что пользователю будет присвоен ip из диапазона, указанного в «pptp.conf» (вторая строка).
Сохраняем изменения.
На этом всё. VPN-сервер с минимальной настройкой готов к работе.
Перезагружаем сервер.
/etc/init.d/pptpd restart
Если на сервере включен фаервол (а он должен быть включен), то далее следует прописать несколько правил iptables, разрешающих трафик и соединение с сервером.
Разрешаем форвард пакетов в ядре:
echo 1 > /proc/sys/net/ipv4/ip_forward

Прописываем правила iptables:
iptables -A FORWARD -d 10.20.20.0/24 -i  venet0 -j ACCEPT
iptables -A FORWARD -s 10.20.20.0/24 -o  venet0 -j ACCEPT
iptables -t nat -A POSTROUTING -o venet0 -j MASQUERADE
iptables -A INPUT -p gre -j ACCEPT
iptables -A INPUT -m tcp -p tcp --dport 1723 -j ACCEPT

Где «10.20.20.0/24» - диапазон наших ip-адресов в локальной сети, «venet0» - сетевой интерфейс, а «1723» - порт нашего VPN-сервера.
Далее подключаемся к серверу через соединение «pptp». Ниже два скриншота. Настройки pptp соединения на Windows 7 и Ubuntu. В качестве адреса указываем IP нашего сервера, логин и пароль мы прописывали в «chap-secrets».




После удачного соединения на сервере можно снова ввести команду «ifconfig» и если всё правильно, то в списке должен появиться интерфейс «ppp0». Выглядит это примерно так:
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

ppp0      Link encap:Point-to-Point Protocol
          inet addr:ххх.ххх.ххх.ххх  P-t-P:10.20.20.25  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1396  Metric:1
          RX packets:130719 errors:0 dropped:0 overruns:0 frame:0
          TX packets:175039 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:9153208 (8.7 MiB)  TX bytes:170749759 (162.8 MiB)

venet0    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:127.0.0.2  P-t-P:127.0.0.2  Bcast:0.0.0.0  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
          RX packets:16803140 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6647430 errors:0 dropped:26058 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:21119068528 (19.6 GiB)  TX bytes:3787685919 (3.5 GiB)

venet0:0  Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr: ххх.ххх.ххх.ххх  
          P-t-P: ххх.ххх.ххх.ххх  
          Bcast:0.0.0.0  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1

ххх.ххх.ххх.ххх - внешний IP сервера. Он же теперь и внешний IP подключённого к нашей VPN компьютера. В результате мы имеем выделенный «белый» ip-адрес и незащищённые сети нам не страшны (в пределах разумного).

P.S.
При использовании VPS/VDS некоторых хост-провайдеров возникает проблема с правилами iptables - после перезагрузки сервера они слетают. Решение:
Пишем скрипт
nano -w /etc/network/if-up.d/00-iptables

Содержимое скрипта:
#!/bin/sh
iptables-restore < /etc/firewall.conf
ip6tables-restore < /etc/firewall6.conf

Выставляем права
chmod +x /etc/network/if-up.d/00-iptables

Сохраняем правила IPv4
iptables-save >/etc/firewall.conf

При необходимости IPv6
ip6tables-save >/etc/firewall6.conf

Правила принудительно будут подгружаться при загрузке сервера.
Like Dislike




 
  • Creative Commons Licence
  • Norton Safeweb
  • Website Uptime Monitoring By ServiceUptime.com