Translation(s): Русский

(!) ?Обсуждения


Введение


Это руководство описывает весь процесс установки VPN-сервера типа L2TP на Ваш сервер. Устанавливаем xl2tpd, для шифрования трафика по VPN-каналам по типу IPSec будем использовать актуальный на текущий момент инструмент openswan, и зависимость ppp, так как основным инструментом является Point-to-Point Protocol (PPP) для инкапсуляции PPP-кадров, которые будут передаваться внутри созданных L2TP-туннелей.

aptitude install xl2tpd openswan ppp

Настройка IPSec при помощи Openswan

В файл "/etc/ipsec.conf" скопируйте следующее:

config setup
    nat_traversal=yes
    virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:!10.152.2.0/24
# значение должно содержать список всех приватных сетей, которые
# допускаются в качестве подсетей для удалённых VPN-клиентов.
# Другими словами, это диапазон IP-адресов, который находиться
# за маршрутизатором и NAT, которым является наш VPN-сервер, через который подключаются VPN-клиенты.
    oe=off
    protostack=netkey
 
conn L2TP-PSK-NAT
    rightsubnet=vhost:%priv
    also=L2TP-PSK-noNAT
 
conn L2TP-PSK-noNAT
    authby=secret
    pfs=no
    auto=add
    keyingtries=3
    rekey=no
# Apple iOS doesn't send delete notify so we need dead peer detection
# to detect vanishing clients
    dpddelay=30
    dpdtimeout=120
    dpdaction=clear
# Устанавливаем значения параметров ikelifetime и keylife
# в соответсвующие значения по-умолчанию для Windows
    ikelifetime=8h
    keylife=1h
    type=transport
# Replace IP address with your local IP (private, behind NAT IP is okay as well)
    left=x.x.x.x
# Для новых VPN-клиентов под операционными системами Windows 2000/XP,
# то есть для поддержки VPN-клиентов под устаревшими операционными системами
# используйте leftprotoport=17/%any
    leftprotoport=17/1701
    right=%any
    rightprotoport=17/%any
#force all to be nat'ed. because of iOS
    forceencaps=yes

Проверьте ещё раз, что вы следуете инструкциям-комментариям в файле ipsec.conf, также удостоверьтесь, что названия секций "config setup" и "conn l2tp-psk" располагаются вплотную к левой стороне (с новой строки) без пробелов, в то время как весь остальной текст должен иметь ровно 8 пробелов (односимвольных отступов) вправо.

В файл "/etc/ipsec.secrets" скопируйте следующее:

A.B.C.D   %any:  PSK "хороший_пароль"

Поменяйте A.B.C.D на IP-адрес вашего сервера, на котором запущены ipsec / openswan

Запустите службу IPSec при помощи следующей команды

/etc/init.d/ipsec start

Затем настоятельно рекомендуется проверить состояние службы IPSec командой

ipsec verify

у вас не должны отображаться ошибки на данном этапе настройки!

Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path                                 [OK]
Linux Openswan U2.6.28/K2.6.32-32-generic-pae (netkey)
Checking for IPsec support in kernel                            [OK]
NETKEY detected, testing for disabled ICMP send_redirects       [OK]
NETKEY detected, testing for disabled ICMP accept_redirects     [OK]
Checking that pluto is running                                  [OK]
Pluto listening for IKE on udp 500                              [OK]
Pluto listening for NAT-T on udp 4500                           [OK]
Checking for 'ip' command                                       [OK]
Checking for 'iptables' command                                 [OK]
Opportunistic Encryption Support                                [DISABLED]

Создаём файл с именем "ipsec.vpn" в каталоге "/etc/init.d/"

case "$1" in
  start)
echo "Starting my Ipsec VPN"
iptables  -t nat   -A POSTROUTING -o eth0 -s 10.152.2.0/24 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
for each in /proc/sys/net/ipv4/conf/*
do
    echo 0 > $each/accept_redirects
    echo 0 > $each/send_redirects
done
/etc/init.d/ipsec start
/etc/init.d/xl2tpd start
;;
stop)
echo "Stopping my Ipsec VPN"
iptables --table nat --flush
echo 0 > /proc/sys/net/ipv4/ip_forward
/etc/init.d/ipsec stop
/etc/init.d/xl2tpd stop
;;
restart)
echo "Restarting my Ipsec VPN"
iptables  -t nat   -A POSTROUTING -o eth0 -s 10.152.2.0/24 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
for each in /proc/sys/net/ipv4/conf/*
do
    echo 0 > $each/accept_redirects
    echo 0 > $each/send_redirects
done
/etc/init.d/ipsec restart
/etc/init.d/xl2tpd restart
 
;;
  *)
 echo "Usage: /etc/init.d/ipsec.vpn  {start|stop|restart}"
 exit 1
  ;;
esac

Вышеприведённое содержимое файла "ipsec.vpn" настроит фаервол на вашем сервере на передачу IP-пакетов (IP Forwading), что позволит использовать в дальнейшем ваш сервер в качестве шлюза для IPv4-пакетов.

Затем устанавливаем права на выполнение:

chmod 755 ipsec.vpn

Отключаем init-скрипт по-умолчанию, который был установлен при установке пакета openswan

 update-rc.d -f ipsec remove

И включаем наш чуть ранее созданный скрипт как init-скрипт по-умолчанию

 update-rc.d ipsec.vpn defaults

Настройка L2TP

В файл "/etc/xl2tpd/xl2tpd.conf" скопируйте следующее

[global]
ipsec saref = no
 
[lns default]
ip range = 10.152.2.2-10.152.2.254
local ip = 10.152.2.1
require chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

Некоторые замечания по поводу вышеупомянутого содержимого файла "xl2tpd.conf"

  1. ip range = диапазон IP-адресов для выдачи клиентам при их подключении
  2. local ip = IP-адрес сервера VPN. Значение должно находиться за пределами указанного диапазона параметра "ip range".
  3. refuse pap = отвергать аутентификацию методом PAP
  4. ppp debug = "yes" для тестировки и "no" для production

Выбираем устойчивую к подбору паролей строку для аутентификации по схеме "Вызов-Ответ". Длина строки представляющей из себя пароль, в идеале, должна превышать 16 символов, что, вероятно, потребует достаточно много времени на подбор пароля (символов данной строки), и обеспечит достаточную безопасность. Обратите внимание, что требований к минимальной длине строки не существует. Файл "/etc/xl2tpd/l2tp-secrets" отредактируйте следующим образом:

* * пароль_для_аутентификации_VPN-клиента_при_подключении

В файл "/etc/ppp/options.xl2tpd" скопируйте следующее:

refuse-mschap-v2
refuse-mschap
ms-dns 8.8.8.8
ms-dns 8.8.4.4
asyncmap 0
auth
crtscts
idle 1800
mtu 1200
mru 1200
lock
hide-password
local
#debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4

Некоторые замечания по поводу вышеупомянутого содержимого файла "options.xl2tpd"

Здесь вы можете перечислить DNS-сервера, которые используются внутри существующей вашей локальной сети, этот список серверов DNS принудительно будет отправлен VPN-клиенту при подключении. Если вам требуется добавить несколько DNS-серверов, то просто добавьте несколько соответствующих строчек.

Примечание: Если вам потребуется принудительно отправить VPN-клиенту список WINS-серверов, то для этого существует определённый отдельный параметр.

На openswan.org сообщается, что значение данного параметра важно для того, чтобы уменьшить размер MRU / MTU. Так как L2TP/IPSec инкапсулируется несколько раз в различные протоколы, то этот факт создаёт небольшой overhead (накладные расходы), а уменьшая размер MRU / MTU мы позволяем передавать все пакеты по инкапсулированным каналам просто передавая их с уменьшенным размером MTU.

Добавляет запись с IPv4-адресом peer'a (VPN-клиента) и Ethernet-адресом сетевого адаптера вашего сервера в ARP-таблицу (Address Resolution Protocol) операционной системы которая установлена на вашем сервере. Мы получим в результате эффект: запись о peer'e (VPN-клиенте) появится в других системах (на других компьютерах) и peer будет доступен в вашей локальной сети Ethernet.

Значение данного параметра используется в файле аутентификации PPP (см. ниже).

Добавление пользователей

В файл "/etc/ppp/chap-secrets" скопируйте:

user1 l2tpd пароль_для_аутентификации_VPN-клиента_user1_при_подключении *
user2 * пароль_для_аутентификации_VPN-клиента_user2_при_подключении *

Некоторые замечания по поводу вышеупомянутого содержимого файла "options.xl2tpd"

  1. client = username (имя пользователя, логин) для VPN-клиента
  2. server = имя сервера, которое мы указали в файле "ppp.options" для xl2tpd; это привязка, предназначено для указания различных параметров настройки PPP (PPP options) на каждый уникальный username (логин) VPN-клиента
  3. secret = password (пароль к логину) для VPN-клиента
  4. IP Address = оставьте значение * для любого IPv4-адреса у источника инициирующего подключение (VPN-клиента) к VPN-серверу или укажите IPv4-адреса с которых будет доступна (срабатывать) аутентификация когда пользователь попытается подключиться как VPN-клиент; в случае если VPN-клиент попытается выполнить аутентификацию с определённым IP-адресом вне заданного диапазона IPv4, то в аутентификации ему под данным username (логином) будет отказано.

Примечание: Вы можете добавлять столько пользователей сколько захотите. Вместо пробелов рекомендуется использовать для наглядности символы табуляции - клавиша "Tab"

Передача IPv4-пакетов

в файл "/etc/sysctl.conf"

net.ipv4.ip_forward=1

Инициализировать новые отредактированные значения параметров из файла "/etc/sysctl.conf"

sysctl -p

Запуск VPN

Сервер VPN запускается при помощи совместной работы двух служб - шифрование и демон слушающий подключения от клиентов

/etc/init.d/ipsec.vpn restart
/etc/init.d/xl2tpd restart

Ссылки