Setup:inet:l2tpipsec:debian

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

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

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

Содержание

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

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

Обращаем ваше внимание, что настройку IPSec можно пропустить. IPSec используется исключительно для защиты вашего трафика.

Настройка IPSec

  • Проверьте наличие поддержки 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_

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

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

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

  • Откройте в Интернет-браузере http://gencert.campus.mephi.ru/. В поле "Login" вводим номер своей зачётной книжки (например, 112358), в поля "Password" вводим пароль для защиты сертификата (этот пароль не обязательно должен совпадать с паролем для доступа в Интернет) и нажимаем "Generate!". Сохраните сертификат в формате tar.
  • Далее, необходимо извлечь сертификаты стандарта X.509 из архива и переместить их в директорию /etc/racoon/certs:
# tar -xvf 112358.tar
# mv certs/user112358.crt /etc/racoon/certs
# mv keys/user112358.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 "user112358.crt" "user112358.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 10.50.0.20/32[1701] udp -P out ipsec
	esp/tunnel/192.168.57.1-10.50.0.20/require;
spdadd 10.50.0.20/32[1701] 0.0.0.0/0 udp -P in ipsec
	esp/tunnel/10.50.0.20-192.168.57.1/require;
  • Создайте сетевой интерфейс с натированием:
# 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.
  • Проверьте наличие поддержки PPP в вашем ядре:
CONFIG_PPP=y

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

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

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

  • Проверьте наличие «ppp» устройства. При отсутствии его необходимо создать:
# cd /dev
# ls -ld ppp
# mknod /dev/ppp c 108 0
# chmod 660 ppp
  • Установите пакеты:
# apt-get install xl2tpd
  • Откройте в текстовом редакторе файл /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 = l2tp.campus.mephi.ru
	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

, либо (для сотрудников):

[global]
	access control = yes
	auth file=/etc/ppp/pap-secrets
	debug avp = yes
	debug network = yes
	debug state = yes
	debug tunnel = yes

[lac mephi]
	lns = l2tp.campus.mephi.ru
	redial = yes
	redial timeout = 10
	require authentication = no
	ppp debug = yes
	pppoptfile = /etc/ppp/options.xl2tpd
	require pap = yes
	refuse chap = 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

, либо (для сотрудников):

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

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

noauth

Здесь и далее вместо foo следует укаpывать логин, а вместо bar - пароль для доступа в интернет. (Не путайте с паролем для сертификата!)

  • Откройте в текстовом редакторе файл «/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» , или (для сотрудников) в конец файла «/etc/ppp/pap-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 -host l2tp.campus.mephi.ru gw "$DEFAULT_GW"
route add -net 0.0.0.0/1 gw "$5"
route add -net 128.0.0.0/1 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
0.0.0.0         10.7.2.16       128.0.0.0       UG    0      0        0 ppp0
0.0.0.0         10.50.0.1       0.0.0.0         UG    O      O        O eth0
10.50.0.0       0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.7.2.16       0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
128.0.0.0       10.7.2.16       128.0.0.0       U     0      0        0 ppp0
10.50.0.20      10.50.0.1       255.255.255.255 UH    0      0        0 eth0
  • Проверьте доступность удалённого PtP хоста:
# ping `netstat -nr | awk '{if($3=="255.255.255.255" && $8=="ppp0") print $1}' | head -1`
PING 10.7.2.16 (10.7.2.16) 56(84) bytes of data.
64 bytes from 10.7.2.16: icmp_req=1 ttl=63 time=0.745 ms
64 bytes from 10.7.2.16: icmp_req=2 ttl=63 time=0.617 ms
64 bytes from 10.7.2.16: icmp_req=3 ttl=63 time=0.650 ms
64 bytes from 10.7.2.16: icmp_req=4 ttl=63 time=0.606 ms
^C

--- 10.7.2.16 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], пакеты доступны по ссылкам http://ut.mephi.ru/deb/openl2tp_1.8-1_amd64.deb и http://ut.mephi.ru/deb/openl2tp-ppp_1.8-1_amd64.deb.

  • Установите полученный пакет:

! Также предлагается отдельно собранная версия openl2tp-1.8 под debian wheezy[amd64], пакеты доступны по ссылкам 1 и 2 или из репозитория "deb http://mirror.mephi.ru/debian-mephi unstable main".

# dpkg -i openl2tp_1.8-1_amd64.deb

или если вы подключили репозиторий "deb http://mirror.mephi.ru/debian-mephi unstable main" (только для wheezy[amd64]):

# apt-get install openl2tp openl2tp-ppp
  • Далее, необходимо отключить 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 -host l2tp.campus.mephi.ru gw "$DEFAULT_GW"
route add -net 0.0.0.0/1 gw "$5"
route add -net 128.0.0.0/1 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=10.50.0.20 use_udp_checksums=off persist=yes
> session create tunnel_name=mephi session_name=mephi user_name=foo user_password=bar

, либо (для сотрудников):

# 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=yes auth_chap=no auth_mschapv1=no auth_mschapv2=no auth_eap=no
> tunnel create tunnel_name=mephi dest_ipaddr=10.50.0.20 use_udp_checksums=off persist=yes
> session create tunnel_name=mephi session_name=mephi user_name=foo user_password=bar

Здесь и далее вместо foo следует укаpывать логин, а вместо 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
0.0.0.0         10.7.2.16       128.0.0.0       UG    0      0        0 ppp0
0.0.0.0         10.50.0.1       0.0.0.0         UG    O      O        O eth0
10.50.0.0       0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.7.2.16       0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
128.0.0.0       10.7.2.16       128.0.0.0       U     0      0        0 ppp0
10.50.0.20      10.50.0.1       255.255.255.255 UH    0      0        0 eth0
  • Проверьте доступность удалённого PtP хоста:
# ping `netstat -nr | awk '{if($3=="255.255.255.255" && $8=="ppp0") print $1}' | head -1`
PING 10.7.2.16 (10.7.2.16) 56(84) bytes of data.
64 bytes from 10.7.2.16: icmp_req=1 ttl=63 time=0.745 ms
64 bytes from 10.7.2.16: icmp_req=2 ttl=63 time=0.617 ms
64 bytes from 10.7.2.16: icmp_req=3 ttl=63 time=0.650 ms
64 bytes from 10.7.2.16: icmp_req=4 ttl=63 time=0.606 ms

--- 10.7.2.16 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 есть, а тем ни менее на сайты не заходит, значит, вполне возможно, что вы забыли отключить прокси в настройках вашего браузера