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