• Собственный VPN за пять минут

    5a64a79fc2d2cspy

    Существует несколько способов сжечь книгу. И мир полон людей, бегущих с зажженными спичками.

    «Звук бегущих ног», Рей Бредбери

    Лирическое вступление

    Наиболее устойчивые системы — децентрализованные и, к счастью, интернет из их числа. Своим появлением эта технология изменила всё. Никогда ранее не было возможно так просто обмениваться знаниями и новостями, иметь свободный доступ к практически любой точке земного шара. Это позволяет любому мнению быть услышанным — и это прекрасно и очень важно.

    К сожалению, кроме людей созидающих знания, есть люди запрещающие знания. Запрещать знания — попросту глупо: знание есть знание, у него нет никакой моральной подоплеки, но оно, определенно, может быть кому-то не выгодно. И потому жгли людей, потом книги, теперь же они открыли для себя интернет. Но с интернетом такой фокус уже не пройдет. Потому что нам на помощь спешит VPN — виртуальные тоннели, с помощью которых мы будем выходить в интернет, например, из Амстердама, на самом же деле потягивая чаек из натурального русского самовара.

    Установка сервера PPTP

    Для начала потребуется сервер, находящийся в той точке мира, через которую вы хотите выходить в сеть, с установленным на него Docker и утилитой Docker Compose. Для этого можно использовать виртуальные сервера от Amazon или DigitalOcean — путь от регистрации до работающего сервера займет несколько минут.

    Создайте директорию /docker-apps/pptpd и разместите в ней следующие файлы.

    # /docker-apps/pptpd/pptpd.conf
    option /etc/ppp/pptpd-options
    pidfile /var/run/pptpd.pid
    localip 192.168.127.1
    remoteip 192.168.127.100-199
    
    # /docker-apps/pptpd/pptpd-options
    name pptpd
    refuse-pap
    refuse-chap
    refuse-mschap
    require-mschap-v2
    require-mppe-128
    proxyarp
    nodefaultroute
    lock
    nobsdcomp
    novj
    novjccomp
    nologfd
    ms-dns 8.8.8.8
    ms-dns 8.8.4.4

    В этом файле описаны данные, которые потребуются для подключения к нашему серверу:

    # /docker-apps/pptpd/chap-secrets
    
    username1    *    password1    *
    username2    *    password2    *

    И, наконец, конфигурация для запуска демона в контейнере Docker:

    # /docker-apps/pptpd/docker-compose.yml
    pptpd:
      image: astartsky/pptpd
      ports:
        - 1723:1723
      volumes:
        - ./pptpd.conf:/etc/pptpd.conf
        - ./pptpd-options:/etc/ppp/pptpd-options
        - ./chap-secrets:/etc/ppp/chap-secrets
      privileged: true
      net: host
      restart: always

    На настройках запуска этого контейнера стоит остановиться поподробнее.

    К сожалению, Docker на данный момент умеет форвардить с сетевого интерфейса хоста на виртуальный сетевой интерфейс контейнера только протоколы TCP и UDP. Так как протокол PPTPD также использует GRE для передачи данных, требуется запускать этот контейнер с сетью в режиме «host». Это означает, что контейнер будет использовать родной сетевой интерфейс своего хоста, а не виртуальный собственный — следовательно, форвардинг не потребуется вовсе. Не самое красивое решение, поэтому будем надеяться, что Docker скоро научится форвардить GRE тоже.

    Торжественный запуск

    cd /docker-apps/pptpd/
    docker-compose up -d

    Ура!