O
O
Oleg Nerwin2015-11-11 11:09:52
VPN
Oleg Nerwin, 2015-11-11 11:09:52

Merge 2 Mikrotiks over l2tp+ipsec, why aren't sa created?

I'm trying to set up a l2tp/ipsec vpn tunnel between rb2011u (server behind nat; 500, 4500, 1701 ports forwarded) and rb750up (client behind nat).
Separately l2tp works.
I configure ipsec. I create peers on the server:

address - 0.0.0.0/0
port - 500
auth - psk
passive
policy template - l2tp (created a new one)
exchange mode - main l2tp
send initial contact
nat-t
proposial - obey
hash - sha1
encrypt - 3des, aes-256
dh - modp1024
generate policy-port strict

Created a new one in proposial, enabled sha1, 3des, aes-256cbc
On the client:

Created peers:
address - white server ip
port - 500
auth - psk
policy template group - l2tp (created a new one)
exchange mode - main l2tp
send initial contact
nat-t
proposial check - obey
hash - sha1
encrypt - 3des, aes-256
dh - modp1024
generate policy - port strict

Created new proposials with sha1, 3des, aes-256cbc.
Created a new policy:

src addr - gray client address behind nat
dst addr - white server ip
proto - udp
template
group - l2tp
action - encrypt
level - require
ipsec proto - esp
SA src - gray client address behind
SA nat dst - white server ip
proposial - the one that created

only sa src and sa dst are reset to 0.0.0.0 for some reason after pressing apply.
as a result, remote peer appears on the server but sa is not created and l2tp goes without encryption (mppe 128bit rsa is encrypted if encryption is reuired in the profile)
What is wrong here?
If you connect from a computer, then sa appear, but the traffic goes only towards the server, the responses to the client do not go through them.

Answer the question

In order to leave comments, you need to log in

2 answer(s)
O
Oleg Nerwin, 2015-11-11
@Nerwin

All figured out.
the finished config looks like this
for the server

#все, что касается l2tp
#пул адресов для l2tp клиентов
/ip pool
  add name=vpn-net ranges=192.168.100.2-192.168.100.254

#создадим профиль l2tp сервера
/ppp profile
  add name=l2tp-vpn change-tcp-mss=yes local-address=192.168.100.1 only-one=no \
    remote-address=vpn-net use-encryption=required 

#включим l2tp сервер используя наш профиль, авторизовться клиенты будут по mschap2,
#mtu от балды, чтобы точно дефрагментации не было
/interface l2tp-server server
  set authentication=mschap2 default-profile=l2tp-vpn enabled=yes \
    max-mru=1300 max-mtu=1300

#пользователи l2tp
/ppp secret
  add name=<юзер> password=<пароль> local-address=192.168.100.1 profile=l2tp-vpn \
    remote-address=192.168.100.2 service=l2tp

#добавим отдельный интерфейс для пользователя юзер
/interface l2tp-server
  add name=l2tp-s user=<юзер>

#все, что касается ipsec
#писали, что в ipsec группе default есть баг, создадим свою
/ip ipsec policy group
  add name=l2tp 

#какие алгоритмы шифрования поддерживает сервер (винда sha1-3des, android sha256-aes256cbc)
/ip ipsec proposal
  set [ find default=yes ] auth-algorithms=sha1,sha256 enc-algorithms=\
    3des,aes-128-cbc,aes-256-cbc pfs-group=none

#добавим пира, который будет ждать подключения по ipsec
/ip ipsec peer
  add address=0.0.0.0/0 \ #можно подключиться с любого адреса ip
    enc-algorithm=3des,aes-128,aes-192,aes-256 \ #по умолчанию, используется только во время подключения
    exchange-mode=main-l2tp \
    generate-policy=port-override \ #создавать политики автоматически (иногда создаются не правильно)
    my-id=user-fqdn \
    passive=yes \ #только слушать
    policy-template-group=l2tp \
    secret=<секретное слово>

#добавим политики ipsec	
/ip ipsec policy
  #добави стандартную политику шаблон в нашу группу
  set 0 dst-address=0.0.0.0/0 group=l2tp src-address=0.0.0.0/0
  #при подклчении политики для клиентов будут создаваться автоматически, но иногда
  #они создаются с неправильныйми адресами, если так будет, надо добавить политику вручную
  add dst-address=<белый ip клиента>/32 \ 
    sa-dst-address=<белый ip клиента> \
    src-address=<серый ip сервера, на внешнем интерфейсе>/32 \
    sa-src-address=<серый ip сервера, на внешнем интерфейсе>

#если включен firewall, добавим правила
#используются порты 500 (для установки соединения ipsec), 4500 (через него передаются данные если включен nat-t), 1701 (l2tp)
/ip firewall filter
  add chain=input dst-port=500 in-interface=eth1 protocol=udp
  add chain=input dst-port=4500 in-interface=eth1 protocol=udp
  add chain=input dst-port=1701 in-interface=eth1 protocol=udp

for client
#все, что касается l2tp
#создадим профиль подключения
/ppp profile
  add name=vpnc use-compression=yes use-encryption=required use-mpls=yes

#создадим клиента используя наш профиль
/interface l2tp-client
  add allow=mschap2 \
    name=l2tp-c \
    connect-to=<белый ip сервера> \
    disabled=no \
    keepalive-timeout=disabled \
    max-mru=1300 \
    max-mtu=1300 \
    password=<пароль> \
    profile=vpnc \
    user=<юзер>

#все, что касается ipsec
#как и в случае с сервером создадим отдельную группу
/ip ipsec policy group
  add name=l2tp

#какие алгоритмы шифрования поддерживает клиент (хотя бы 1 из них должен быть и на сервере)
/ip ipsec proposal
  set [ find default=yes ] enc-algorithms=aes-128-cbc pfs-group=none

#создадим пира, который будет подключаться
/ip ipsec peer
  add address=<белый ip сервера>/32 \
    enc-algorithm=3des,aes-128,aes-192,aes-256 \ #это все по умолчанию, как и у пира на сервере
    exchange-mode=main-l2tp \
    generate-policy=port-override \ #может и не надо, все равно вручную создается
    local-address=0.0.0.0 \
    my-id=user-fqdn \
    policy-template-group=l2tp \
    secret=<секретное слово, как и на сервере>

#создадим политики
/ip ipsec policy
  #как и на сервере, добавим стандартный шаблон в нашу группу
  set 0 dst-address=0.0.0.0/0 group=l2tp src-address=0.0.0.0/0
  #наша политика для подключения
  add dst-address=<белый ip сервера>/32 \
    dst-port=1701 \
    src-address=<серый ip клиента, на внешнем интерфейсе>/32 \
    src-port=1701
    sa-dst-address=<белый ip сервера> \
    sa-src-address=<белый ip клиента> \

#если планируется пускать весь траффик по vpn, оставим траффик к серверу через основной шлюз
/ip route
  add distance=1 dst-address=<белый ip сервера>/32 gateway=<наш шлюз>

C
Cool Admin, 2015-11-11
@ifaustrue

I'm not 100% sure, but I have a feeling that IPSec won't survive double nat.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question