Установка VPN-сервера MPD5 для подключений через протокол PPTP на VDS на виртуализации KVM
Инсталляция проводилась на чистый сервер на шаблоне программного обеспечения 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
На этом установка и настройка закончена.