IPsec L2TP VPN (версия 2015)

Начиная с 2010 года права и свободы российских интернет-пользователей регулярно пересматриваются. Однако, уже сегодня каждый может самостоятельно поставить в этом вопросе жирную точку. С помощью собственного VPN.

По обновленной инструкции вы настроите VPN быстрее. Сеть будет безопаснее, а поддержка современных клиентов — шире.

Дело принципа

Проблемы реализации общегражданских прав пришли в российский интернет со знаковым событием февраля 2010 года — блокировкой1 домена torrents.ru в нарушение существовавших процессуальных норм. В октябре того же года вступил в силу «налог на болванки»2.

1 августа 2013 года запомнилось профильному сообществу «антипиратским» законом3 и началом применения механизма досудебных блокировок, одним из прецедентов которого стала блокировка Github4 на территории России в конце 2014 года.

Ограничительные инициативы можно перечислять достаточно долго: паспортизация общественных точек доступа5, планирующийся «налог на интернет»6, предписание хранить персональные данные российских граждан на технических мощностях внутри страны7.

И это уже не говоря о базовых принципах обеспечения сохранности личных данных: пароли только сайтам с SSL, никаких кредиток в сомнительных общественных точках доступа и многие другие. Иными словами, начал формироваться устойчивый спрос на безопасность, приватность, а местами и на анонимность.

Дело техники

VPN — виртуальная приватная сеть (англ. virtual private network) — решает бóльшую часть проблем. VPN позволяет получить IP-адрес любой нужной страны (привет, недоступный в России Spotify!), скрыть реальное местоположение и все передаваемые данные. В максимально упрощенном виде VPN — сеть из двух устройств (например, ваш смартфон с 3G в России и сервер в Нидерландах), все передаваемые данные между которыми зашифрованы и недоступны посторонним.

На «срезе» VPN напоминает матрешку. Внешним слоем выступает IPSec, который шифрует ключом все передаваемые данные. В этом шифрованном потоке создается сеть (по протоколу L2TP) внутри которой необходимо пройти аутентификацию с логином и паролем (средствами PPP). Все, что происходит внутри этой конструкции, недоступно посторонним.

Помните: если вы работаете со сторонними интернет-ресурсами через VPN-сервер, трафик между двумя этими узлами может быть перехвачен. В этом случае VPN не освобождает вас от необходимости использовать дополнительные средства защиты — например, SSL.

Подготовительная часть

Потребуется сервер с Ubuntu 14.04, пользователь с правами sudo. Выясните реальный IP-адрес (с помощью ifconfig или curl http://ip.mtak.nl), а также заранее определитесь, какой пул адресов вы будете использовать в приватной сети. Предположим, что сервер имеет IP 0.0.0.0, для VPN будет использоваться подсеть 192.168.1.0/24 (с клиентской адресацией в диапазоне от 192.168.1.1 до 192.168.1.128 и шлюзом 192.168.1.254).

sudo apt-get update
sudo apt-get upgrade

Ядро операционной системы и файрвол

Прежде всего, активируйте форвардинг IP-пакетов и отключите ICP-редиректы в ядре операционной системы, а также добавьте в файрвол правило для проброса трафика из VPN-сети. Добавьте в конец файла /etc/sysctl.conf следующие параметры:

net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.icmp_ignore_bogus_error_responses = 1

Для корректной работы ряд процедур необходимо выполнять во время загрузки системы, поэтому пропишите их непосредственно в /etc/rc.local перед строкой exit 0.

for vpn in /proc/sys/net/ipv4/conf/*; do echo 0 > $vpn/accept_redirects; echo 0 > $vpn/send_redirects; done
iptables -t nat -A POSTROUTING -j SNAT --to-source 0.0.0.0 -o eth+

Активируйте изменения и перезагрузите систему:

sudo sysctl -p
sudo shutdown -r now

Internet Protocol Security (IPSec) и Openswan

Фундаментом для построения защищенных соединений будет IPSec — набор протоколов для защищенного обмена ключами, шифрования, подтверждения подлинности и проверки целостности данных. Используйте реализацию IPSec для линукса — Openswan; устновите пакет (от генерации сертификата откажитесь):

sudo apt-get install openswan -y

При редактировании всех упомянутых ниже файлов конфигураций обязательно оставляйте в конце пустую строку. Ее отсутствие не позволит службе корректно работать.

Основные настройки IPSec задаются в файле /etc/ipsec.conf. Можно смело использовать приведенную ниже конфигурацию, не забудьте лишь вписать на 19-й строке реальный IP-адрес.

version 2.0
config setup
    dumpdir=/var/run/pluto/
    nat_traversal=yes
    virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v6:fd00::/8,%v6:fe80::/10
    protostack=netkey
    force_keepalive=yes
    keep_alive=60
conn L2TP-PSK-noNAT
    authby=secret
    pfs=no
    auto=add
    keyingtries=3
    ikelifetime=8h
    keylife=1h
    ike=aes256-sha1,aes128-sha1,3des-sha1
    phase2alg=aes256-sha1,aes128-sha1,3des-sha1
    type=transport
    left=0.0.0.0
    leftprotoport=17/1701
    right=%any
    rightprotoport=17/%any
    dpddelay=10
    dpdtimeout=20
    dpdaction=clear

Для обеспечения безопасности VPN-соединения IPSec использует так называемый общий ключ, сгенерировать который можно с помощью команды openssl rand -hex 30 (в принципе, можно использовать любую фразу). Его необходимо добавить в файл /etc/ipsec.secrets в следующем формате (не забудьте про реальный IP-адрес):

0.0.0.0 %any: PSK "5b61f4b7a6f2b6f88753982ee695d3869d6378fac0f9c1acc6d624fde696"

С этого момента настройка IPSec завершена, в чем можно убедиться, выполнив команду ipsec verify. На отличные от OK значения SAref Kernel Support и Opportunistic Encription Support не обращайте внимания.

Убедиться в корректности настройки IPSec можно уже сейчас. На локальном компьютере создайте VPN-подключение к серверу, укажите использованный общий ключ, а также любые логин и пароль. В процессе подключения в лог-файле операционной системы будет фигурировать запись IPSec connection established.

L2TP

Внешний слой, защищающий передаваемые данные, настроен. Теперь установите пакет xl2tpd:

sudo apt-get install xl2tpd -y

В файле /etc/xl2tpd/xl2tpd.conf укажите пул IP-адресов для приватной сети и присвойте внутренний адрес самому серверу. (Если потребуется более полный лог работы соединения — раскомментируйте последние строки.)

[global]
ipsec saref = yes
saref refinfo = 30

[lns default]
ip range = 192.168.1.1-192.168.1.128
local ip = 192.168.1.254
require authentication = yes
refuse pap = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

;ppp debug = yes
;debug avp = yes
;debug network = yes
;debug state = yes
;debug tunnel = yes

Параметры PPP и создание пользователей

На всякий случай удостоверьтесь, что пакеты ppp и lsof установились из зависимостей в процессе предыдущих шагов:

sudo apt-get install ppp lsof -y

После создайте файл /etc/ppp/options.xl2tpd и укажите в нем следующие настройки для PPP. (Смело можете менять IP-адреса у параметров ms-dns, если у вас есть более предпочтительные DNS-серверы.)

require-mschap-v2
ms-dns 8.8.8.8
ms-dns 8.8.4.4
auth
mtu 1200
mru 1000
crtscts
hide-password
modem
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4

Осталось прописать в файл /etc/ppp/chap-secrets пользователей. Пароли в этом файле хранятся в открытом виде, поэтому будьте внимательнее с правами доступа.

# username  server      password        IP
benedict    l2tpd       cumberbatch     *
jonny       l2tpd       leemiller       *

Аутентификация может также осуществляться при помощи PAM (pluggable authentication modules); таким образом доступ будет предоставлен всем пользователям операционной системы с корректно указанной оболочкой.

Применение конфигураций

sudo service ipsec restart
sudo service xl2tpd restart

Настройка подключений

В настройках подключения не забудьте поставить галочку напротив параметра «Отправлять весь трафик через VPN».