Быстро настроить VPN

VPN в каждый дом / Хабрахабр: "openswan "



'via Blog this'



VPN в каждый дом



Всем привет! Желание сделать VPN сервер максимально простым в установке и удобным в использовании назревало уже давно. За основу я взял L2TP/IPsec, эта технология нативно поддерживается всеми устройствами и в отличии от PPTP не вызывает проблем при подключении через сотовых операторов.

tl;dr
Для установки нам потребуется машинка с Ubuntu 14.04 на борту и «белым» IP-адресом, любой VPS подойдет. Достаточно ввести эту волшебную строчку:
 curl -sS https://sockeye.cc/instavpn.sh | sudo bash 

и через несколько минут у вас будет рабочий VPN с управлением через браузер (httр://ip-address:8080/) или консоль (instavpn -h).


Что внутри?


После загрузки скрипт загружает сам VPN сервер (openswan и xl2tpd), node.js и vnstat, настраивает конфиги и iptables, устанавливает веб-интерфейс. Если вы используете Security Groups или любой другой внешний файрвол, придется открыть следующие порты: 4500/udp, 500/udp, 1701/udp, 8080/tcp

Это слишком дорого для меня


Такие провайдеры как DigitalOcean или OVH предоставят вам вполне подходящую машинку за 5 долларов в месяц. Если поискать получше, можно сократить расходы до 2-3$. Имхо, чашка кофе в месяц — не такая уж и большая цена за защиту от меняющих SSL-сертификаты провайдеров, блокировок сайтов, прослушки в публичных точках доступа и прочих «радостей» Интернета

Ссылки


Репозиторий на GitHub

upd от Ernillew: Сидящим за NATом пользователям Windows может понадобится добавить одно значение в реестр. support.microsoft.com/kb/926179



Iptables
Открываем порты для своих нужд

iptables -t nat -A PREROUTING -p tcp --dport 3389 -j DNAT --to-destination 17?.???.???.30
iptables -A FORWARD -p tcp --dport 3389 -j ACCEPT


Сообщаем брандмауэру «выпускать» трафик через публичный интерфейс eth0, иначе доступ будет ограничен, хотя это может быть полезно в ряде случаев.

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


В /etc/sysctl.conf:
net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0


Что делает скрипт см. ниже.

Openswan в качестве IPSec-сервера, xl2tpd (есть в EPEL) — в качестве провайдера L2TP с аутентификацией по PPP.
IPSec предоставляет безопасность на пакетном уровне, а L2TP выступает в роли транспорта. Для настройки требуется CentOS 6 с внешним IP и правами суперпользователя; порты 1701 (TCP), 4500 (UDP) и 500 (UDP) должны быть разрешены в брандмауэре.
Iptables и sysctl
Сообщаем брандмауэру «выпускать» трафик через публичный интерфейс eth0, иначе доступ будет ограничен, хотя это может быть полезно в ряде случаев.
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Не забудьте включить форвардинг IP-пакетов и отключить приём/отправку ICMP-перенаправлений на всех интерфейсах, они могут быть использованы злоумышленником для изменения таблиц маршрутизации.
В /etc/sysctl.conf:
net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0

В командной строке:
for iface in /proc/sys/net/ipv4/conf/*; do 
  echo 0 > $iface/accept_redirects; 
  echo 0 > $iface/send_redirects; 
done
sysctl -p

xL2TPd

Пул IP-адресов (ip range) для выдачи подключившимся клиентам.
В /etc/xl2tpd/xl2tpd.conf:
[global]
ipsec saref = yes
force userspace = yes

[lns default]
ip range = 172.16.1.30-172.16.1.100
local ip = 172.16.1.1
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
Список ваших DNS-серверов (ms-dns), например, Google Public DNSили Yandex.DNS.
В /etc/ppp/options.xl2tpd:
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

Openswan (IPSec)

Каталог для работы Pluto (dumpdir), включаем NAT-T (nat_traversal), чтобы IPSec-пакет во всей сети обрабатывался как обычный пакет UDP/IP и хост получателя не проводил проверок целостности. Добавьте локальные подсети (RFC1918) за исключением уже используемой в NAT (virtual_private), Подробнее: ipsec.conf(5).
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
    oe=off

conn L2TP-PSK-NAT
    rightsubnet=vhost:%priv
    also=L2TP-PSK-noNAT

conn L2TP-PSK-noNAT
    authby=secret
    pfs=no
    auto=add
    keyingtries=8
    ikelifetime=8h
    keylife=1h
    type=transport
    left=%SERVERIP%
    leftprotoport=17/1701
    right=%any
    rightprotoport=17/%any
Pre-shared Key (PSK). Ключ должен быть длинным и случайным. 
В /etc/ipsec.secrets:
%SERVERIP%  %any:   PSK "2FYjhC12qgs0i98Rcb0jVtVBmqrFBrInHqqsxf04zE5bP85Syxy2sUe3ZJmjeaHy"
Данные для CHAP-аутентификации.
В /etc/ppp/chap-secrets:
alice          l2tpd   uye69opZ            *
bob            l2tpd   cYKtyVSe            *

Поиск по этому блогу