Setup:inet:l2tpipsec:gentoo

Материал из 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_

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

  • Добавьте в etc/make.conf флаг nat:
USE="nat"
  • Установите пакеты:
# USE="-ipv6" emerge ipsec-tools
# emerge usermode-utilities
# emerge iptables
  • Откройте в Интернет-браузере 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
  • Запустите демон:
# setkey -f /etc/ipsec-tools.conf
# /etc/init.d/racoon start

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

L2TP соединение в Gentoo можно реализовать с использованием пакета 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
  • Установите пакеты:
# emerge 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' )
  • Создайте файл
# 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"

аналогично

# touch /etc/ppp/ip-down.d/mephivpn.sh
#!/bin/bash

route del pptp.campus.mephi.ru
route del -net 0.0.0.0/1
route del -net 128.0.0.0/1
  • Сделайте скрипты исполняемыми
# chmod +x /etc/ppp/ip-up.d/mephivpn.sh
# chmod +x /etc/ppp/ip-down.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
  • Проверьте, загружен ли у вас модуль ядра l2tp_ppp комндой lsmod. Если нет, загрузите его:
# lsmod | grep l2tp_ppp || ( echo 'l2tp_ppp' >>/etc/modules; modprobe l2tp_ppp; echo 'loaded' )
  • Установите пакет:
# emerge layman
  • Допишите в файл /etc/make.conf
# echo "source /var/lib/layman/make.conf" >> /etc/make.conf
  • Обновите список оверлеев:
# layman --fetch
  • Подключите оверлей bircoph:
# layman -a bircoph

Установите или обновите пакет OpenL2TP:

# USE='rpc client examples doc stats' emerge openl2tp
  • Установите или обновите пакет OpenL2TP:
# yum install openl2tp
  • Создайте файл «/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"

аналогично

# touch /etc/ppp/ip-down.d/mephivpn.sh
#!/bin/bash

route del pptp.campus.mephi.ru
route del -net 0.0.0.0/1
route del -net 128.0.0.0/1
  • Сделайте скрипты исполняемыми
# chmod +x /etc/ppp/ip-up.d/mephivpn.sh
# chmod +x /etc/ppp/ip-down.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 есть, а тем ни менее на сайты не заходит, значит, вполне возможно, что вы забыли отключить прокси в настройках вашего браузера