Tutorial

Как настроить VPN с помощью PPTP

Published on January 29, 2015
    authorauthor

    Bulat Khamitov and maxmikheev

    Русский
    Как настроить VPN с помощью PPTP

    Введение

    Один из часто задаваемых нашими пользователями вопросов - как добавить другой IP-адрес к их серверу. Вы можете назначить свой приватный IP-адрес Вашему дроплету путем создания VPN-туннеля. Для построения своей собственной виртуальной частной сети (VPN) или присвоения SSL-сертификата этому IP-адресу существует несколько вариантов. Из всех возможных вариантов наиболее оптимальным является выбор между PPTP и OpenVPN. Point-To-Point Tunneling Protocol (PPTP) позволяет Вам поднять свой VPN очень быстро и является совместимым с большинством мобильных устройств. И хотя PPTP менее безопасен, чем OpenVPN, он быстрее и использует меньше ресурсов процессора.

    Шаг 1 - Установка PPTP

    Вам необходимо выбрать один сервер, который будет отвечать за раздачу IP-адресов другим серверам и авторизацию всех Ваших серверов в Вашей VPN. Он и станет Вашим PPTP-сервером.

    На CentOS 6 x64:

    rpm -i http://poptop.sourceforge.net/yum/stable/rhel6/pptp-release-current.noarch.rpm
    yum -y install pptpd
    

    На Ubuntu 12.10 x64:

    apt-get install pptpd
    

    Теперь необходимо отредактировать файл /etc/pptpd.conf, добавив в него следующие строчки:

    localip 10.0.0.1
    remoteip 10.0.0.100-200
    

    В данном случае, localip - это IP-адрес вашего сервера, а remoteip - IP-адреса, которые будут присваиваться клиентам, которые в ним соединяются.

    Затем Вам необходимо настроить авторизацию для PPTP путем добавления пользователей и их паролей. Просто добавьте их в /etc/ppp/chap-secrets:

    Здесь сlient - это имя пользователя (логин), server - тип сервиса (в нашем примере - pptpd), secret - пароль, а в IP addresses указывается, какие IP-адреса могут авторизоваться (с данным логином и паролем). Установив в поле IP-адресов звёздочку * Вы указываете, что данная пара логин/пароль должна приниматься с любого IP.

    Шаг 2 - Добавление DNS-серверов в /etc/ppp/pptpd-options

    ms-dns 8.8.8.8
    ms-dns 8.8.4.4
    

    Теперь Вы можете запустить PPTP-демон:

    service pptpd restart
    

    Проверьте, что он работает и принимает соединения:

    Шаг 3 - Настройка форвардинга (Forwarding)

    Очень важно включить форвардинг IP на Вашем PPTP-сервере. Это позволит Вам пересылать пакеты между публичным IP и приватными IP, которые Вы настроили при помощи PPTP. Просто отредактируйте /etc/sysctl.conf, добавив туда следующую строку, если ее там еще не было:

    net.ipv4.ip_forward = 1
    

    Для применения изменений выполните команду sysctl -p

    Шаг 4 - Создание NAT-правил для iptables

    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE && iptables-save
    

    Если Вы также хотите, чтобы Ваши PPTP-клиенты могли общаться между собой, добавьте следующие правила для iptables:

    iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE
    iptables -I INPUT -s 10.0.0.0/8 -i ppp0 -j ACCEPT
    iptables --append FORWARD --in-interface eth0 -j ACCEPT
    

    Теперь Ваш PPTP-сервер также работает и как роутер.

    Если Вы хотите установить ограничение на то, какие сервера могут соединяться с Вашими дроплетами, Вы можете задать правило для IP-таблиц, которое ограничивает TCP-соединения к порту 1723.

    Шаг 5 - Настройка клиентов

    Установите PPTP-клиент на Ваших клиентских серверах:

    yum -y install pptp
    

    Шаг 6 - Добавление необходимого модуля ядра

    modprobe ppp_mppe
    

    Создайте новый файл /etc/ppp/peers/pptpserver и добавьте туда следующие строчки, заменяя имя и пароль Вашими значениями:

    pty "pptp 198.211.104.17 --nolaunchpppd"
    name box1
    password 24oiunOi24
    remotename PPTP
    require-mppe-128
    

    Здесь 198.211.104.17 - публичный IP-адрес нашего PPTP-сервера, box1 и 24oiunOi24 - это пара логин/пароль, которые мы задали в файле /etc/ppp/chap-secrets на нашем PPTP-сервере.

    Теперь мы можем “вызывать” этот PPTP-сервер. В следующей команде необходимо использовать имя, которое Вы дали файлу с пирами (peers) в директории /etc/ppp/peers/. Поскольку в нашем примере мы назвали этот файл pptpserver, наша команда выглядит следующим образом:

    pppd call pptpserver
    

    Вы должны увидеть успешное подключение в логах PPTP-сервера:

    На Вашем PPTP-клиенте настройте маршрутизацию на Вашу приватную сеть через интерфейс ppp0:

    ip route add 10.0.0.0/8 dev ppp0
    

    Ваш интерфейс ppp0 должен быть настроен, что можно проверить путем запуска ifconfig

    Теперь Вы можете сделать пинг к Вашему PPTP-серверу и любым другим клиентам, подключенным к этой сети:

    Мы можем добавить второй PPTP-клиент к этой сети:

    yum -y install pptp
    modprobe ppp_mppe
    

    Добавьте необходимые строки в файл /etc/ppp/peers/pptpserver (заменяя логины и пароли своими):

    pty "pptp 198.211.104.17 --nolaunchpppd"
    name box2
    password 239Aok24ma
    remotename PPTP
    require-mppe-128
    

    Теперь на втором клиенте выполните следующие команды:

    pppd call pptpserver
    ip route add 10.0.0.0/8 dev ppp0
    

    Вы можете сделать пинг к первому клиенту, при этом пакеты будут идти через PPTP-сервер и перенаправляться по правилам ip-таблиц, которые мы задали ранее:

    Такая настройка позволит Вам создать Вашу собственную виртуальную частную сеть:

    Если Вы хотите, чтобы все ваши устройства общались безопасно в рамках одной сети, это наиболее быстрый способ сделать это.

    Вы можете использовать такой подход совместно с Nginx, Squid, MySQL и любыми другими приложениями.

    Поскольку трафик внутри сети шифруется 128-битным шифрованием, PPTP меньше нагружает процессор, чем OpenVPN, но все же обеспечивает дополнительный уровень безопасности Вашего трафика.

    Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

    Learn more about our products


    About the authors
    Default avatar
    Bulat Khamitov

    author


    Default avatar
    maxmikheev

    translator


    Still looking for an answer?

    Ask a questionSearch for more help

    Was this helpful?
     
    7 Comments
    

    This textbox defaults to using Markdown to format your answer.

    You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

    В статье забыли указать что все правила iptables будут очищены после перезагрузки дропплета. Что-бы этого избежать необходимо после установки правил маршрутизации в iptables сохранить их.

    sudo iptables-save > /etc/iptables_rules
    

    После этого отредактировать файл /etc/rc.local

    sudo nano rc.local
    

    и перед exit добавить строку

    /sbin/iptables-restore < /etc/iptables_rules
    

    что позволит при загрузке дропплета эти правила заново установить

    Много проблем,в том числе открытием сайтов, решает строка

    iptables -t mangle -A FORWARD -p tcp -m tcp --tcp-flags RST,SYN SYN -j TCPMSS --clamp-mss-to-pmtu
    

    с сохранением описанным выше

    для виндовых клиентов эта инструкция не канает

    В инструкции не хватает очень важного шага без которого ничего не работает - добавление gre в iptables. Делается так:

    iptables -A ufw-before-input -p gre -j ACCEPT
    

    Также могут возникнуть проблемы при доступе к сайтам по https-протоколу. Помогает уменьшение параметра mtu и mru в файле /etc/ppp/pptpd-options:

    mtu 1367
    mru 1367
    

    Для применения измененных параметров надо перезапустить демон командой service pptpd restart

    А как быть с ipv6

    непашет

    Try DigitalOcean for free

    Click below to sign up and get $200 of credit to try our products over 60 days!

    Sign up

    Join the Tech Talk
    Success! Thank you! Please check your email for further details.

    Please complete your information!

    Featured on Community

    Get our biweekly newsletter

    Sign up for Infrastructure as a Newsletter.

    Hollie's Hub for Good

    Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

    Become a contributor

    Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

    Welcome to the developer cloud

    DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

    Learn more
    DigitalOcean Cloud Control Panel