Установка VPN-сервера MPD5 для подключений через протокол PPTP на VDS на виртуализации KVM

Материал из wiki.p3.ru

Инсталляция проводилась на чистый сервер на шаблоне программного обеспечения KVM-FreeBSD-8.2-i386-minimal. На него был установлен сервер mpd5 (Multi-link PPP daemon), выход в интернет проводится осуществляться через этот сервер используя трансляцию адресов (NAT) с компьютера под управлением Windows Vista.

Работать MPD будет только на виртуальном сервере с виртуализацией KVM или на выделенном сервере.

Преимущество использвания MPD перед сервером OpenVPN в том, что не требуется установка дополнительного ПО на клиентские компьютеры и их настройках гораздо проще - требуется ввести в настройках подключения только адрес сервера и логин и пароль.


Установка MPD5

Подключитесь к серверу по протоколу SSH и установите дерево портов

# portsnap fetch extract

После того как порты будут установлены необходимо произвести установку mpd5

# cd /usr/ports/net/mpd5
# make install clean

Опции на стадии configure (вернуться к ним можно потом можно используя команду make config) оставьте по-умолчанию (все галочки сняты)

После успешной компиляции следует его настроить

Скопируйте файл примера конфигурации в реальный конфиг

# cp /usr/local/etc/mpd5/mpd.conf.sample /usr/local/etc/mpd5/mpd.conf

и отредактируйте его в текстовом редакторе

# vi /usr/local/etc/mpd5/mpd.conf

В самом начала есть секция которая начинается с параметра default:

default:
        load dialup

Изменим load dialup на load pptp_server

Затем отредактируем секцию pptp_server в этом же файле Собственно меняем только параметры

set ippool add pool1 192.168.1.50 192.168.1.99 

пул адресов который назначается клиентам. У меня используются уже адреса из сети 192.168.1.0/24 так как я подключен к интернет через ADSL-модем и он выдает такой адрес (большинство использует эту сеть по-умолчанию). Меняем на другую сеть для частных IP-адресов (из RFC 1918)

set ippool add pool1 172.17.0.2 172.17.0.50

Далее внесите также правки изменив на свои адреса адрес который будет являться шлюзом и DNS-сервером

set ipcp ranges 172.17.0.1/32 ippool pool1
        set ipcp dns 172.17.0.1
    

Строку

set ipcp nbns 192.168.1.4

просто удалите или закоментируйте

Укажите также адрес на котором будем принимать подключения - реальный IP-адрес вашего VDS-сервера

set pptp self 149.154.10.10


Изменения в файле конфигурации в diff-формате:

# diff mpd.conf.sample mpd.conf
31c31
<       load dialup
---
>       load pptp_server
184c184
<       set ippool add pool1 192.168.1.50 192.168.1.99
---
>       set ippool add pool1 172.17.0.2 172.17.0.50
193,195c193,194
<       set ipcp ranges 192.168.1.1/32 ippool pool1
<       set ipcp dns 192.168.1.3
<       set ipcp nbns 192.168.1.4
---
>       set ipcp ranges 172.17.0.1/32 ippool pool1
>       set ipcp dns 172.17.0.1
220c219
<         set pptp self 1.2.3.4
---
>         set pptp self 149.154.10.10


Теперь отредактируйте файл паролей и добавьте пользователей

# vi /usr/local/etc/mpd5/mpd.secret
vpnuser password
vpnuser1 password1

Можно также указывать статический адрес добавив его 3м параметром в строке

Также поправьте права на файлы для большей безопасности c 644 на 600 (владелец файлов root:wheel)

# chmod 600 /usr/local/etc/mpd5/*

Добавьте mpd в автозапуск в файл /etc/rc.conf

# echo 'mpd_enable=YES' >> /etc/rc.conf

и запустите

# /usr/local/etc/rc.d/mpd5 start


Настройка DNS-сервера

Запустите также DNS-сервер на VDS чтобы использовать его для резолвинга имен

Отредактируйте его файл конфигурации

# vi /etc/namedb/named.conf

и закоментируйте символами // строку или удалите

listen-on       { 127.0.0.1; };

и добавьте

allow-recursion { 127.0.0.1; 172.17.0.0/24;};

После чего добавьте в автозапуск и запустите

# echo 'named_enable=YES' >> /etc/rc.conf
# /etc/rc.d/named start


Первоначальная проверка работоспособности

В принципе можно уже пробовать подключаться со своего компьютера к VPN-серверу - создайте подключение к удаленному рабочему месту со всеми настройками по-умолчанию и подключитесь.

С вашего компьютера должны работать команды ping 172.17.0.1, nslookup yandex.ru, вы сможете подключится по ssh к адресу 172.17.0.1

C:\>ping 172.17.0.1

Обмен пакетами с 172.17.0.1 по с 32 байтами данных:
Ответ от 172.17.0.1: число байт=32 время=100мс TTL=64
Ответ от 172.17.0.1: число байт=32 время=100мс TTL=64
Ответ от 172.17.0.1: число байт=32 время=100мс TTL=64
Ответ от 172.17.0.1: число байт=32 время=101мс TTL=64

Статистика Ping для 172.17.0.1:
    Пакетов: отправлено = 4, получено = 4, потеряно = 0
    (0% потерь)
Приблизительное время приема-передачи в мс:
    Минимальное = 100мсек, Максимальное = 101 мсек, Среднее = 100 мсек


C:\>nslookup yandex.ru
Server:  UnKnown
Address:  172.17.0.1

Неофициальный ответ:
Name:    yandex.ru
Addresses:  213.180.193.11
          213.180.204.11
          77.88.21.11
          87.250.250.11

И на самом сервере будет видно командой ifconfig поднятный тунель.

ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> metric 0 mtu 1396
        inet 172.17.0.1 --> 172.17.0.2 netmask 0xffffffff

Все пакеты будут отправляться в туннель (так как в настройках TCP/IP-протокола в windows в свойствах VPN-подключения по-умолчанию стоит флажок Использовать основной шлюз в удаленной сети и пропадать оставаться там, так как нет трансляции адресов.


Настройка NAT

Теперь следует настроить NAT для трансляции IP-адресов чтобы можно выходить в интернет через VPN-сервер

Используйте для этого штатный ipfw nat. Добавьте в /etc/rc.conf следующие строки

# echo 'gateway_enable=YES' >> /etc/rc.conf
# echo 'firewall_enable=YES' >> /etc/rc.conf
# echo 'firewall_type="/etc/firewall.conf"' >> /etc/rc.conf

И, собственно, сам firewall - отредактируйте /etc/firewall.conf чтобы он содержал строки

nat 1 config if re0 reset same_ports
add nat 1 ip from any to any via re0
add allow ip from any to any

Теперь включите forward между интерфейсами и перечитайте правила firewall

# sysctl net.inet.ip.forwarding=1
# nohup /etc/rc.d/ipfw restart &

Внимание. Если вы где-либо ошиблись в firewall, то будет правило по-умолчанию deny from any и вам придется подключаться к локальной консоли VDS-сервера через VNC-протокол чтобы исправить это.

Поэтому можно воспользоваться скриптом change_rules.sh для установки правил

# sh /usr/share/examples/ipfw/change_rules.sh

где в окне редактора vi который будет запущен через данный скрипт установить нужные правила и применить их. При этом если в течение 30 секунд не будет нажато y (отключился терминал), то правила не будут установлены и будут восстановлена предыдущая конфигурация.

Если все успешно, то подключившись по VPN к серверу вы увидете что пакеты в интернет отправляются через него

C:\>tracert ya.ru

Трассировка маршрута к ya.ru [77.88.21.3]
с максимальным числом прыжков 30:

  1   155 ms   100 ms   102 ms  172.17.0.1
  2   102 ms   102 ms   102 ms  gw.webdc.ru [188.120.247.254]
  3   104 ms   101 ms   101 ms  xe200-40.webdc.ru [92.63.108.89]
  4   103 ms   104 ms   103 ms  msk-ix-m10.yandex.net [193.232.246.93]
  5   104 ms   102 ms   105 ms  l3-s3500-marionetka.yandex.net [213.180.213.76]
  6     *        *        *     Превышен интервал ожидания для запроса.
  7   104 ms   104 ms   105 ms  www.yandex.ru [77.88.21.3]


Посмотреть также работу ipfw nat можно командой

 # ipfw nat 1 show

На этом установка и настройка закончена.