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».