Setup:inet:l2tpipsec:debian

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

(Различия между версиями)
Перейти к: навигация, поиск
м (Настройка L2TP на базе OpenL2TP)
Строка 371: Строка 371:
или если вы подключили репозиторий "[http://mirror.mephi.ru/debian-mephi deb http://mirror.mephi.ru/debian-mephi unstable main]" (только для wheezy[amd64]):
или если вы подключили репозиторий "[http://mirror.mephi.ru/debian-mephi deb http://mirror.mephi.ru/debian-mephi unstable main]" (только для wheezy[amd64]):
-
  #apt-get install openl2tp openl2tp-ppp
+
  # apt-get install openl2tp openl2tp-ppp
*Далее, необходимо отключить Network Manager. Для этого, проверьте стандартный runlevel в вашей системе. Например,
*Далее, необходимо отключить Network Manager. Для этого, проверьте стандартный runlevel в вашей системе. Например,

Версия 08:28, 5 октября 2012

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

Содержание

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

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

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