Setup:inet:l2tpipsec:debian

Материал из campus.mephi.ru

Перейти к: навигация, поиск

Настройка L2TP (IPSec) - соединения


Содержание

Настройка соединения

В данной пошаговой инструкции описан способ реализации защищенного VPN соединения по протоколу L2TP через IPSec. Перед началом настойки удостоверьтесь, что у вас есть рабочее соединение с интернетом по какому-либо другому протоколу для установки требуемых пакетов. Возможность автономной установки пакетов в данной инструкции не рассматривается.


  • <a href='#ipsec'>Часть I. Настройка IPSec</a>
  • <a href='#xl2tpd'>Часть II. Настройка L2TP на базе xl2tpd</a>
  • <a href='#openl2tp'>Часть III. Настройка L2TP на базе openl2tp</a>


Часть I. Настройка IPSec

Протокол IPSec имеет два режима - транспортный и туннельный. Туннельный режим хорошо работает за NAT, но сложнее, чем транспортный. Сервер для туннельного режима доступен по адресу «svpn-ipsectunnel.mephi.ru» (194.67.76.11), и для транспортного, соответственно, «svpn-ipsectransport.mephi.ru» (194.67.76.10).

  • Проверьте наличие поддержки IPSec в вашем ядре:
CONFIG_XFRM=y
CONFIG_XFRM_USER=y
CONFIG_NET_KEY=m
CONFIG_INET_AH=m
CONFIG_INET_ESP=m
CONFIG_INET_IPCOMP=m
CONFIG_INET_TUNNEL=m
CONFIG_INET_XFRM_MODE_TRANSPORT=m
CONFIG_INET_XFRM_MODE_TUNNEL=m
CONFIG_CRYPTO=y
CONFIG_CRYPTO_NULL=m
CONFIG_CRYPTO_SHA1=m
CONFIG_CRYPTO_BLOWFISH=m
CONFIG_CRYPTO_DEFLATE=m

Это можно сделать командой:

cat /boot/config-`uname -r` | grep ИМЯ_ПЕРЕМЕННОЙ

, например,

cat /boot/config-`uname -r` | grep CONFIG_INET_

Если некоторые опции не поддерживаются, вам необходимо переконфигурировать ядро ОС.</li>

  • Установите пакеты:
# apt-get install ipsec-tools
# apt-get install racoon
# apt-get install uml-utilities
# apt-get install iptables

При установке racoon выберите ручную настройку.</li>

  • Откройте в Интернет-браузере ресурс «<a href="https://svpn.mephi.ru">svpn.mephi.ru</a>», выберите произвольный логин/пароль и сохраните сертификат. Выберите формат tar. Пусть, пользователь имеет логин omg.</li>
  • Далее, необходимо извлечь сертификаты стандарта X.509 из архива и переместить их в директорию /etc/racoon/certs:
# tar -xvf omg.tar
# mv certs/useromg.crt /etc/racoon/certs
# mv keys/useromg.key /etc/racoon/certs
  • Откройте файл /etc/racoon/racoon.conf в текстовом редакторе и заполните его следующим содержимым:
log notify;
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";

remote anonymous {
	exchange_mode main;
	certificate_type x509 "useromg.crt" "useromg.key";
	verify_cert off;
	nat_traversal on;
	generate_policy on;
	proposal {
		encryption_algorithm blowfish;
		hash_algorithm sha1;
		authentication_method rsasig;
		dh_group modp1024;
	}
}
sainfo anonymous {
	encryption_algorithm blowfish;
	authentication_algorithm hmac_sha1;
	compression_algorithm deflate;
}
  • Откройте файл /etc/*ipsec-tools.conf в текстовом редакторе и заполните его следующим содержимым (случай туннельного режима):
#!/usr/sbin/setkey -f
flush;
spdflush;

spdadd 0.0.0.0/0 194.67.76.11/32[1701] udp -P out ipsec
	esp/tunnel/192.168.57.1-194.67.76.11/require;
spdadd 194.67.76.11/32[1701] 0.0.0.0/0 udp -P in ipsec
	esp/tunnel/194.67.76.11-192.168.57.1/require;

или (случай транспортного режима):

flush;
spdflush;

spdadd 0.0.0.0/0 194.67.76.10/32[1701] udp -P out ipsec
	esp/transport/192.168.57.1-194.67.76.10/require;
spdadd 194.67.76.10/32[1701] 0.0.0.0/0 udp -P in ipsec
	esp/transport/194.67.76.10-192.168.57.1/require;

Далее в тексте по умолчанию приведены примеры конфигурационных файлов и команд для туннельного режима. Для транспортного режима необходимо заменить адрес 194.67.76.11 на 194.67.76.10.</li>

  • Создайте сетевой интерфейс с натированием:
# ifconfig lo:0 192.168.57.1 up
# iptables -t nat -A POSTROUTING -s 192.168.57.1 -j MASQUERADE
  • Запустите демон:
# /etc/init.d/setkey start
# /etc/init.d/racoon start

Настройка L2TP на базе XL2TPd

L2TP соединение в Debian можно реализовать с использованием пакета xl2tpd, либо openl2tp. Рассмотрим эти случаи по очереди.

  • Откройте терминал с правами суперпользователя (root). Если в вашей системе это запрещено из соображений безопасности, вам следует выполнять все действия с использованием утилиты sudo.</li>
  • Проверьте наличие поддержки PPP в вашем ядре:
CONFIG_PPP=y

Это можно сделать командой:

cat /boot/config-`uname -r` | grep CONFIG_PPP

Если некоторые опции не поддерживаются, вам необходимо переконфигурировать ядро ОС.</li>

  • Проверьте наличие «ppp» устройства. При отсутствии его необходимо создать:
# cd /dev
# ls -ld ppp
# mknod /dev/ppp c 108 0
# chmod 660 ppp
  • Установите пакеты:
# apt-get install xl2tpd
  • Отправьте письмо с просьбой выдать логин/пароль для L2TP подключения на <a href='mailto:voip@mephi.ru'>voip@mephi.ru</a>. Пусть, вы получили логин foo и пароль bar (Не путайте с omg / smb !)</li>
  • Откройте в текстовом редакторе файл /etc/xl2tpd/xl2tpd.conf и допишите в конец:
[global]
	access control = yes
	auth file=/etc/ppp/chap-secrets
	debug avp = yes
	debug network = yes
	debug state = yes
	debug tunnel = yes

[lac mephi]
	lns = svpn-ipsectunnel.mephi.ru
# or "svpn-ipsectransport.mephi.ru" in case of "transport" mode
	redial = yes
	redial timeout = 10
	require authentication = no
	ppp debug = yes
	pppoptfile = /etc/ppp/options.xl2tpd
	require chap = yes
	refuse pap = yes
	autodial = yes
	name = foo
  • Создайте файл:
# touch /etc/ppp/options.xl2tpd

со следующим содержимым:

unit 0
remotename l2tp
ipparam mephi
connect /bin/true
mru 1400
mtu 1400
nodeflate
nobsdcomp
persist
maxfail 0
nopcomp
noaccomp
nodefaultroute
noreplacedefaultroute
#debug
#proxyarp
name foo

refuse-pap
refuse-eap
refuse-chap
refuse-mschap
require-mschap-v2

noauth
  • Откройте в текстовом редакторе файл «/etc/ppp/options», найдите строку «auth» и закомментируйте её.
# Require the peer to authenticate itself before allowing network
# packets to be sent or received.
# Please do not disable this setting. It is expected to be standard in
# future releases of pppd. Use the call option (see manpage) to disable
# authentication for specific peers.
#auth
  • Допишите в конец файла «/etc/ppp/chap-secrets»:
foo * bar *
  • Проверьте, загружен ли у вас модуль ядра ppp-generic комaндой lsmod. Если нет, загрузите его
# lsmod | grep ppp-generic || ( echo 'ppp-generic' >>/etc/modules; modprobe ppp-generic; echo 'loaded' )
  • Далее, необходимо отключить Network Manager. Для этого, проверьте стандартный runlevel в вашей системе. Например,
# grep initdefault /etc/inittab
id:2:initdefault:

Т.е. в примере стандартным является runlevel 2. Затем, проверьте runlevel вашей системы в рабочем сотоянии:

# runlevel
S 3

Т.е. в примере система работает в runlevel 3. Обычно, эти значения совпадают, но, как видно из примера, не всегда.

  • Внимание! Следующее действие может привести к неработоспособности сети, в случае, если вы перезагрузка машину до окончательной настройки L2TP (или другого подключения)! Следует отключить задгузку Network Manager как в стандартном, так и в рабочем runlevel. Для этого надо переименовать ссылку на Network Manager в директории /etc/rdS, где S - номер runlevel. Для приведённого выше примера:
# rename 's/\/S/\/K/' /etc/rc2.d/S??network-manager
# rename 's/\/S/\/K/' /etc/rc3.d/S??network-manager

Перестройте запуск программ в соответствии с внесёнными изменениями:

# update-rc.d network-manager defaults
  • Остановите Network Manager:
# /etc/init.d/network-manager stop

Если вам потребуется восстановить подключение к сети по старому протоколу, то можно снова запустить Network Manager командой:

# /etc/init.d/network-manager start
  • Создайте файл
# touch /etc/ppp/ip-up.d/mephivpn.sh

со следующим содержимым:

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

DEFAULT_GW=$(netstat -nr | awk '{if($1=="0.0.0.0" && $3=="0.0.0.0") print $2}' | head -1)

route add -net svpn.mephi.ru/31 gw "$DEFAULT_GW"
route add -net 10.0.57.0/24 gw "$5"
  • Сделайте скрипт исполняемым и выполнте его
# chmod +x /etc/ppp/ip-up.d/mephivpn.sh
# /etc/ppp/ip-up.d/mephivpn.sh
  • Запустите демон:
# /etc/init.d/xl2tpd start

После этого таблица маршрутизации должна выглядеть примерно так:

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.57.1       0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
194.67.76.10    10.4.254.1      255.255.255.254 UGH   0      0        0 eth0
10.4.254.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.0.57.0       10.0.57.1       255.255.255.0   UG    0      0        0 ppp0
  • Проверьте доступность удалённого PtP хоста:
# ping 10.0.57.1
PING 10.0.57.1 (10.0.57.1) 56(84) bytes of data.
64 bytes from 10.0.57.1: icmp_req=1 ttl=63 time=0.745 ms
64 bytes from 10.0.57.1: icmp_req=2 ttl=63 time=0.617 ms
64 bytes from 10.0.57.1: icmp_req=3 ttl=63 time=0.650 ms
64 bytes from 10.0.57.1: icmp_req=4 ttl=63 time=0.606 ms
^C

--- 10.0.57.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 0.606/0.654/0.745/0.060 ms

Если сервер доступен, то настройка соединения прошла успешно.

Настройка L2TP на базе OpenL2TP

  • Откройте терминал с правами суперпользователя (root). Если в вашей системе это запрещено из соображений безопасности, вам следует выполнять все действия с использованием утилиты sudo.
  • Проверьте наличие поддержки PPP over L2TP в вашем ядре:
CONFIG_PPP=y
CONFIG_PPPOL2TP=y

Это можно сделать командой:

cat /boot/config-`uname -r` | grep ИМЯ_ПЕРЕМЕННОЙ

, например,

cat /boot/config-`uname -r` | grep CONFIG_PPP

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

  • Проверьте наличие «ppp» устройства. При отсутствии его необходимо создать:
# cd /dev
# ls -ld ppp
# mknod /dev/ppp c 108 0
# chmod 660 ppp
  • Проверьте последнюю опубликованную версию программы на странице «http://openl2tp.org/downloads». На момент написания инструкции - это «openl2tp-1.8». Далее в тексте будет упоминаться именно эта версия.
  • Проверьте версию вашего дистрибутива:
# more /etc/debian_version

Если в данном файле версия debian указана в численном виде, то можно использовать следующее соответствие чисел и имени:

5 - это "lenny"
6 - это "squeeze"
7 - это "wheezy"

Например, 6.0.2 - это "squeeze"

openl2tp_1.8-1_amd64.deb
openl2tp_1.8-1_i386.deb

Скачайте пакет, соответствующий вашему дистрибутиву и релизу вашего ядра. Релиз ядра можно узнать командай uname -r. Например:

# uname -r
2.6.32-5-amd64
# wget ftp://ftp.openl2tp.org/releases/openl2tp-1.8/debian-squeeze/openl2tp_1.8-1_amd64.deb

Также предлагается отдельно собранная версия openl2tp-1.8 под debian wheezy [amd64], пакеты доступны по ссылкам <a href='http://ut.mephi.ru/deb/openl2tp_1.8-1_amd64.deb'>[1]</a> и <a href='http://ut.mephi.ru/deb/openl2tp-ppp_1.8-1_amd64.deb'>[2]</a>.

  • Установите полученный пакет:
  1. dpkg -i openl2tp_1.8-1_amd64.deb
  • Отправьте письмо с просьбой выдать логин/пароль для L2TP подключения на <a href='mailto:voip@mephi.ru'>voip@mephi.ru</a>. Пусть, вы получили логин foo и пароль bar (Не путайте с omg / smb !)
  • Далее, необходимо отключить Network Manager. Для этого, проверьте стандартный runlevel в вашей системе. Например,
# grep initdefault /etc/inittab
id:2:initdefault:

Т.е. в примере стандартным является runlevel 2. Затем, проверьте runlevel вашей системы в рабочем сотоянии:

# runlevel
S 3

Т.е. в примере система работает в runlevel 3. Обычно, эти значения совпадают, но, как видно из примера, не всегда.

  • Внимание! Следующее действие может привести к неработоспособности сети, в случае, если вы перзагрузита машину до окончательной настройки L2TP (или другого подключения)! Следует отключить задгузку Network Manager как в стандартном, так и в рабочем runlevel. Для этого надо переименовать ссылку на Network Manager в директории /etc/rdS, где S - номер runlevel. Для приведённого выше примера:
# rename 's/\/S/\/K/' /etc/rc2.d/S??network-manager
# rename 's/\/S/\/K/' /etc/rc3.d/S??network-manager
  • Перестройте запуск программ в соответствии с внесёнными изменениями:
# update-rc.d network-manager defaults
  • Остановите Network Manager:
# /etc/init.d/network-manager stop

Если вам потребуется восстановить подключение к сети по старому протоколу, то можно снова запустить Network Manager командой:

# /etc/init.d/network-manager start

Однако, для дальнейшей настройки L2TP его следует снова выключить.

  • Создайте файл «/etc/ppp/ip-up.d/mephivpn.sh» со следующим содержимым:
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

DEFAULT_GW=$(netstat -nr | awk '{if($1=="0.0.0.0" && $3=="0.0.0.0") print $2}' | head -1)

route add -net svpn.mephi.ru/31 gw "$DEFAULT_GW"
route add -net 10.0.57.0/24 gw $5
  • Сделайте скрипт исполняемым:
# chmod +x /etc/ppp/ip-up.d/mephivpn.sh
  • Запустите демон
# /etc/init.d/openl2tpd start
  • Запустите утилиту настройки OpenL2TP:
# l2tpconfig
> system modify deny_remote_tunnel_creates=yes tunnel_establish_timeout=60 session_establish_timeout=30 tunnel_persist_pend_timeout=60 session_persist_pend_timeout=30
> peer profile modify profile_name=default lac_lns=lac
> ppp profile modify profile_name=default mru=1400 mtu=1400 default_route=no proxy_arp=no auth_pap=no auth_chap=no auth_mschapv1=no auth_mschapv2=yes auth_eap=no
> tunnel create tunnel_name=mephi dest_ipaddr=svpn-ipsectunnel.mephi.ru use_udp_checksums=off persist=yes
> session create tunnel_name=mephi session_name=mephi user_name=foo user_password=bar

Проверьте состояние соединения:

> system show status
L2TP service status:-
tunnels: 1, sessions: 1
> user list
TunId  SesId  User                                              Create Time
17767   9158  foo                                  Thu Jul  5 13:45:10 2012

> session show tunnel_id=17767 session_id=9158
Session 9158 on tunnel 17767:-
type: LAC Incoming Call, state: ESTABLISHED
created at:  Jul  5 16:22:18 2012
created by admin: YES, peer session id: 17432
ppp user name: foo
ppp interface name: ppp0
data sequencing required: O
use data sequence numbers: OFF
trace flags: NONE
framing types: SYNC ASYNC
bearer types: DIGITAL ANALOG
connect speed: 1000000
use ppp proxy: NO

Peer configuration data:-
data sequencing required: OFF
framing types: SYNC
bearer types: ANALOG
connect speed: 54000000
data rx packets: 593, rx bytes: 608676, rx errors: 1
data tx packets: 135, tx bytes: 40145, tx errors: 0

Если в строке state: указано ESTABLISHED, то конфигурирование пакета прошло успешно. Сохраните файл с настройками:

> config save file=/etc/openl2tpd.conf
> exit
#

После этого таблица маршрутизации должна выглядеть примерно так:

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.57.1       0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
194.67.76.10    10.4.254.1      255.255.255.254 UGH   0      0        0 eth0
10.4.254.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.0.57.0       10.0.57.1       255.255.255.0   UG    0      0        0 ppp0
  • Проверьте доступность ptp сервера:
# ping 10.0.57.1
PING 10.0.57.1 (10.0.57.1) 56(84) bytes of data.
64 bytes from 10.0.57.1: icmp_req=1 ttl=63 time=0.745 ms
64 bytes from 10.0.57.1: icmp_req=2 ttl=63 time=0.617 ms
64 bytes from 10.0.57.1: icmp_req=3 ttl=63 time=0.650 ms
64 bytes from 10.0.57.1: icmp_req=4 ttl=63 time=0.606 ms
^C

--- 10.0.57.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 0.606/0.654/0.745/0.060 ms

Если сервер доступен, то настройка соединения прошла успешно.

Отладка

Proxy

Если в командной строке "ping 8.8.8.8" сообщает о том, что связь до 8.8.8.8 есть, а тем ни менее на сайты не заходит, значит, вполне возможно, что вы забыли отключить прокси в настройках вашего браузера