ОС: Debian Squeeze.
Схема сети такая:
LAN: 192.168.129.0/24
WAN: 172.20.75.0/24 (плюс еще несколько сетей через маршрутизатор прова)
INET: L2TP-сервер в сети прова
Надо настроить так, чтобы клиенты могли подключаться из WAN и INET.
Использовал связку openswan+xl2tpd. Во-первых, я нуб, а по ним в гугле нашлось немало статей. Во-вторых, xl2tpd уже стоит (инет подключен через него). Ну и потому что нужно, чтобы к VPN могли подключаться виндовые клиенты.
Перечитал кучу статей и манов, но видимо все-таки что-то упускаю... Не взлетает!
При помощи openSSL создал CA, подписал им сертификаты для сервера и клиентов. CA, сертификат и ключ сервера скормил openswan. На клиентской машине (win7) .p12 версия сертификата тоже установлена через остнастку mmc.
/etc/ipsec.conf:
(Большая часть взята из /etc/ipsec.d/examples/l2tp-cert.conf)
version 2.0 # conforms to second version of ipsec.conf specification
# basic configuration
config setup
# NAT-TRAVERSAL support, see README.NAT-Traversal
nat_traversal=yes
# exclude networks used on server side by adding %v4:!a.b.c.0/24
#default: virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
virtual_private=%v4:192.168.0.0/16
# OE is now off by default. Uncomment and change to on, to enable.
oe=off
# which IPsec stack to use. auto will try netkey, then klips then mast
protostack=netkey
conn home
# Use a certificate. Disable Perfect Forward Secrecy.
#
authby=rsasig
pfs=no
auto=add
# we cannot rekey for %any, let client rekey
rekey=no
# Set ikelifetime and keylife to same defaults windows has
ikelifetime=8h
keylife=1h
# l2tp-over-ipsec is transport mode
# See http://bugs.xelerance.com/view.php?id=466
type=transport
#
keyingtries=1
#compress=yes
disablearrivalcheck=no
#
left=%ppp0
leftid=%fromcert
leftrsasigkey=%cert
leftcert=/etc/ipsec.d/certs/ipsec-server.home.pem
leftprotoport=17/1701
#
# The remote user.
#
right=%any
rightca=%same
rightrsasigkey=%cert
# Using the magic port of "0" means "any one single port". This is
# a work around required for Apple OSX clients that use a randomly
# high port, but propose "0" instead of their port. If that does
# not work, try 17/%any
rightprotoport=17/%any
rightsubnet=vhost:%priv,%no
В /var/lib/openswan/ipsec.secrets.inc PEM pass к ключу от сертификата сервера тоже прописан.
Кстати, почему-то ipsec на запускается при старте системы. Приходится принудительно запускать через init.d.
Вот лог старта ipsec:
Mar 18 00:59:47 debsrv ipsec_setup: Starting Openswan IPsec U2.6.28/K2.6.32-5-686...
Mar 18 00:59:47 debsrv ipsec_setup: Using NETKEY(XFRM) stack
Mar 18 00:59:47 debsrv ipsec_setup: ...Openswan IPsec started
Mar 18 00:59:47 debsrv ipsec__plutorun: adjusting ipsec.d to /etc/ipsec.d
Mar 18 00:59:47 debsrv ipsec__plutorun: 002 loading certificate from /etc/ipsec.d/certs/ipsec-server.home.pem
Mar 18 00:59:47 debsrv ipsec__plutorun: 002 loaded host cert file '/etc/ipsec.d/certs/ipsec-server.home.pem' (3614 bytes)
Mar 18 00:59:47 debsrv ipsec__plutorun: 002 no subjectAltName matches ID '%fromcert', replaced by subject DN
Mar 18 00:59:47 debsrv ipsec__plutorun: 002 added connection description "home"
Mar 18 00:59:47 debsrv ipsec__plutorun: 003 NAT-Traversal: Trying new style NAT-T
Mar 18 00:59:47 debsrv ipsec__plutorun: 003 NAT-Traversal: ESPINUDP(1) setup failed for new style NAT-T family IPv4 (errno=19)
Mar 18 00:59:47 debsrv ipsec__plutorun: 003 NAT-Traversal: Trying old style NAT-T
Теперь к xl2tpd.
/etc/xl2tpd/xl2tpd.conf:
[global]
port = 1701
; auth file = /etc/xl2tpd/l2tp-secrets ;
access control = no
rand source = dev
[lns home-l2tp]
ip range = 192.168.130.240-192.168.130.250
local ip = 192.168.130.5
require chap = yes
refuse pap = yes
require authentication = no
name = home-l2tp
ppp debug = yes
pppoptfile = /etc/ppp/options.home.l2tp
length bit = yes
flow bit = yes
ip range, local ip - пробовал ставить IP LAN-подсети (не занятые, local ip - IP маршрутизатора тоже пытался) - эффекта ноль.
/etc/ppp/options.home.l2tp:
lock
noauth
debug
# logfile /var/log/xl2tpd.log
mtu 1440
mru 1440
lcp-echo-failure 8
lcp-echo-interval 3
nodeflate
nomppe
noproxyarp
/etc/xl2tpd/l2tp-secrets оставлен дефолтным.
/etc/ppp/chap-secrets:
user home-l2tp pass *
Что касается настройки файервола, то специально добавлял через iptables правила, логирующие ВСЕ пакеты, а потом парсил полученный лог при помощи grep «IP_клиента». Ни одного пакета не дропается...
В итоге:
При попытке подключения у клиента выскакивает ошибка 651 (модем сообщил об ошибке...). В daemon.log при этом падали такие сообщения:
Mar 18 00:14:02 debsrv xl2tpd[12525]: control_finish: Denied connection to unauthorized peer 92.37.202.230
Mar 18 00:14:02 debsrv xl2tpd[12525]: Connection 29 closed to 92.37.202.230, port 1701 (No Authorization)
Mar 18 00:14:02 debsrv xl2tpd[12525]: check_control: Received out of order control packet on tunnel -1 (got 1, expected 0)
Mar 18 00:14:02 debsrv xl2tpd[12525]: handle_packet: bad control packet!
Mar 18 00:14:07 debsrv xl2tpd[12525]: Unable to deliver closing message for tunnel 8674. Destroying anyway.
После того, как сделал MTU LNS меньше, чем MTU INET-интерфейса, логи изменились вот таким образом:
Mar 18 00:14:02 debsrv xl2tpd[12525]: control_finish: Denied connection to unauthorized peer 92.37.202.230
Mar 18 00:14:02 debsrv xl2tpd[12525]: Connection 29 closed to 92.37.202.230, port 1701 (No Authorization)
Mar 18 00:14:02 debsrv xl2tpd[12525]: check_control: Received out of order control packet on tunnel -1 (got 1, expected 0)
Mar 18 00:14:02 debsrv xl2tpd[12525]: handle_packet: bad control packet!
Mar 18 00:14:04 debsrv xl2tpd[12525]: udp_xmit failed with err=-1:Operation not permitted
Mar 18 00:14:05 debsrv xl2tpd[12525]: udp_xmit failed with err=-1:Operation not permitted
Mar 18 00:14:06 debsrv xl2tpd[12525]: udp_xmit failed with err=-1:Operation not permitted
Mar 18 00:14:07 debsrv xl2tpd[12525]: Unable to deliver closing message for tunnel 8674. Destroying anyway.
Люди добрые! Поможите! Уже скоро неделю как воюю с этой байдой!
Спасибо!