Как подключить l2tp IPSec клиента на Linux к Mikrotik?
Всем доброго! Перепробовал масу вариантов, но подключится с linux к Mikrotik по l2tp over ipsec так и не получилось, в большинстве случаев ошибка » failed to start».
Настройки на стороне Микротика корректны, так как подключаюсь к этому vpn с телефонов (android, ios) и Windows с MacOS без проблем.
VPN на Ubuntu поднимал вот по этому мануалу
# ipsec.conf — strongSwan IPsec configuration file
config setup
# strictcrlpolicy=yes
# uniqueids = no
conn %default
ikelifetime=60m
keylife=20m
rekeymargin=3m
keyingtries=1
keyexchange=ikev1
authby=secret
ike=aes128-sha1-modp1024,3des-sha1-modp1024!
esp=aes128-sha1-modp1024,3des-sha1-modp1024!
conn myvpn
keyexchange=ikev1
left=%defaultroute
auto=add
authby=secret
type=transport
leftprotoport=17/1701
rightprotoport=17/1701
right=$VPN_SERVER_IP
потом :
mkdir -p /var/run/xl2tpd
touch /var/run/xl2tpd/l2tp-control
service strongswan restart
service xl2tpd restart
после чего iPSec поднимается.
Дале пытаюсь поднять L2tp :
но почему то в ifconfig нету нового интерфейса ppp0 🙁
Простой 2 комментария
Вы даже не описали что делали.
xl2tpd+ipsec вполне работают. Уточните где именно у Вас затык.
Виталий, я ставил libreswan для ipsec
ipsec.conf
config setup
interfaces=»ipsec0=ppp1″
plutodebug=all
plutostderrlog=/var/log/pluto.log
nat_traversal=no
protostack=netkey
uniqueids=yes
keep_alive=60
oe=off
nhelpers=0
Вот у меня рабочий конфиг с микротиком
# basic configuration config setup # strictcrlpolicy=yes # uniqueids = no # Add connections here. # Sample VPN connections conn ipsec-my ikelifetime=60m keylife=20m rekeymargin=3m keyingtries=1 keyexchange=ikev1 authby=secret ike=aes128-sha1-modp2048! esp=aes128-sha1-modp2048! conn myvpn keyexchange=ikev1 left=%defaultroute auto=add authby=secret type=transport leftprotoport=17/1701 rightprotoport=17/1701 right=vpnserverip.com - # address of VPN-server rightid=localip_of_mikrotik # without this option you will get error RightID mismatch
/etc/ipsec.secrets
%any vpnserverip.com : PSK «mykey»
[lac myl2tp] lns = vpnserverip.com ppp debug = yes pppoptfile = /etc/ppp/options.l2tpd.client length bit = yes
ipcp-accept-local ipcp-accept-remote refuse-eap require-mschap-v2 noccp noauth #idle 1800 mtu 1460 mru 1460 #defaultroute usepeerdns lock persist maxfail 10 holdoff 15 #интервал между подключениями connect-delay 5000 name YOUR_LOGIN password YOUR_PASSWORD
Но надо еще смотреть какие профили настроены в самом микротке
I’m the operator with my pocket calculator
В интернете можно найти много примеров настройки L2TP over IPSEC, в том числе с использованием оборудования Mikrotik. Беда только в том, что многие из этих гайдов являются либо не совсем корректными, либо не совсем понятными для тех, кто с IPSEC до этого не сталкивался или сталкивался поверхностно, ну и почти нигде не рассматривается вариант с L2TP-сервером на базе Linux-машины и микротиком в качестве клиента (что, опять же, может вызвать у тех, кто не имел раньше опыта с настройкой IPSEC, массу вопросов и непонимания, почему же ничего не работает).
В данной статье рассматривается организация L2TP over IPSEC с использованием Ubuntu Linux в качестве сервера (например, виртуалка в каком-нибудь DigitalOcean’е) и роутером с Mikrotik RouterOS в качестве клиента. В качестве аутентификации будем использовать pre-shared key (PSK).
ip-адреса и прочие вещи, указанные в примере (чтобы было понятно, что к чему):
Внешний IP-адрес Linux-машины с L2TP-сервером: 1.1.1.1 Внешний IP-адрес Mikrotik-клиента: 2.2.2.2 (примечание: если Mikrotik имеет динамический внешний адрес, то далее будет отдельный пункт для таких случаев) Диапазон адресов для L2TP-клиентов: 10.0.0.0/29
Подразумевается, что все команды, выполняемые на сервере, делаются от имени root.
L2TP-клиентам будем раздавать адреса из диапазона 10.0.0.0/29
В первую очередь нам нужно внести изменения в системные настройки ipv4. Дописываем в /etc/sysctl.conf следующие строчки:
net.ipv4.ip_forward = 1 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0
Применяем изменения без перезагрузки с помощью sysctl -p, на всякий случай делаем
for each in /proc/sys/net/ipv4/conf/*; do echo 0 > $each/accept_redirects; echo 0 > $each/send_redirects; done
Устанавливаем нужные пакеты (iptables-persistent в списке нужен для сохранения конфигурации iptables и автоматического восстановления оной после ребута, если вы используете другую утилиту такого толка, например vuurmuur, то не ставьте iptables-persistent и все упоминаия о нем в дальнейшем тексте статьи просто пропускайте):
apt-get update && apt-get install openswan xl2tpd iptables-persistent
Добавляем правила в iptables:
iptables -t nat -A POSTROUTING -s 10.0.0.0/29 -j MASQUERADE iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -s 10.0.0.0/29 -j ACCEPT iptables -A FORWARD -d 10.0.0.0/29 -j ACCEPT iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu iptables -A FORWARD -m state --state INVALID -j DROP iptables -A FORWARD -j DROP
Сохраним конфигурацию iptables командой /etc/init.d/iptables-persistent save
Настраиваем IPSEC. В файл /etc/ipsec.conf прописываем следующее (важно — обязательно соблюдая отступы как в примере):
config setup protostack=netkey nat_traversal=no conn L2TP-PSK authby=secret pfs=no auto=add keyingtries=3 rekey=no ikelifetime=8h salifetime=10m type=tunnel left=1.1.1.1 leftprotoport=17/%any right=%any rightprotoport=17/%any
Теперь прописываем ключи в файл /etc/ipsec.secrets
1.1.1.1 2.2.2.2: PSK "my_extremely_secure_key"
Если внешний адрес у клиента динамический, то вместо 2.2.2.2 пишем %any
Переходим к настройке L2TP-демона. Открываем /etc/xl2tpd/xl2tpd.conf и пишем:
[global] port = 1701 [lns default] ip range = 10.0.0.2-10.0.0.6 local ip = 10.0.0.1 refuse chap = yes refuse pap = yes require authentication = yes ppp debug = no pppoptfile = /etc/ppp/options.xl2tpd length bit = yes exclusive = no assign ip = yes name = VPN-Server
Прописываем опции pppd в /etc/ppp/options.xl2tpd:
require-mschap-v2 refuse-mschap ms-dns 8.8.8.8 ms-dns 8.8.4.4 asyncmap 0 auth crtscts mtu 1200 mru 1200 lock hide-password #debug modem name l2tpd proxyarp nodeflate lcp-echo-interval 30 lcp-echo-failure 4
И наконец добавляем L2TP-пользователей в /etc/ppp/chap-secrets:
# client server secret IP addresses mikrotik l2tpd another_secure_secret *
Перезапускаем ipsec и xl2tpd
service ipsec restart service xl2tpd restart
Теперь настраиваем Mikrotik. Поскольку статья ориентирована на начинающих, я постараюсь показать все на примерах скриншотов из winbox.
Важно: красным на скриншотах выделены разделы/вкладки/и т.д. для того, чтобы было проще их заметить среди остальных (многие почему-то не очень хорошо ориентируются среди множества пунктов меню в winbox, хотя по-моему там всё предельно просто и удобно). В общем, если на скриншоте приведены какие-либо параметры, значит они нужны, поэтому сверяться со скриншотами рекомендую крайне внимательно.
Открываем PPP, вкладку Profiles, добавляем новый:
В разделе IP → IPSEC, во вкладке Proposals добавляем новую запись:
Затем переходим во вкладку Policies и добавляем:
Теперь добавляем peer в одноименной вкладке (в поле Secret прописываем ключ, который на сервере добавили в /etc/ipsec.secrets):
Возвращаемся в раздел PPP, во вкладке Interfaces создаем новый интерфейс L2TP client:
Сохраняем и применяем настройки. Если все сделано правильно, то L2TP-соединение должно установиться, а в разделе IPSEC — Installed SA должны появиться две записи для наших IPSEC-туннелей.
Дополнительно создаем новое NAT-правило в разделе IP → Firewall, во вкладке NAT:
Если нужно пустить траффик до какого-либо узла через наш VPN, то нужно дополнительно прописать маршрут. Допустим, этим узлом будет 3.3.3.3, открываем IP → Routes, добавляем:
Теперь, если все сделано правильно, все должно работать, пакеты к 3.3.3.3 пойдут через VPN.
Дополнительная информация для случаев, когда Mikrotik имеет динамический внешний ip
Будем считать, что внешним интерфейсом у нас на микротике является ether1-gateway
Идем в раздел System → Scripts, создаем новый скрипт с именем update-ipsec-policy-wan, policy — read,write. Не забудьте поменять 1.1.1.1 в первой строчке на внешний ip вашего сервера, а имя вашего WAN-интерфейса — во второй.
:local VPNServer "1.1.1.1" :local WANinterface "ether1-gateway" :local WANip [/ip address get [find interface=$WANinterface] address] :local shortWANip ( [:pick "$WANip" 0 [:find "$WANip" "/" -1]] ) :set WANip ( $shortWANip . "/32" ) :local IPSECip [/ip ipsec policy get [find sa-dst-address=$VPNServer] sa-src-address] if ($shortWANip != $IPSECip) do= < /ip ipsec policy set [find sa-dst-address=$VPNServer] sa-src-address=$shortWANip src-address=$WANip >
Теперь в разделе System → Scheduler создаем новую задачу:
Сохраняем. Теперь каждые две минуты роутер будет проверять, изменился ли внешний ip, и если да, вносить его в нашу IPSEC Policy вместо старого.
p.s. после внесения изменений в настройки на сервере, чтобы не ждать таймаута сессии на роутере, можно выполнить у последнего в консоли
/ip ipsec installed-sa flush sa-type=all;/ip ipsec remote-peers kill-connections