L2TP/IPSEC между роутером MikroTik и Ubuntu Linux 5


Появилась потребность в организации тунеля между локальным роутером c RouterOS на борту и удаленным сервером на базе Ubuntu . Причем сервер должен выглядеть для локальной сети местным, т.е. находится в этом же L2-сегменте. В качетве тунеля был выбран , практика показывает что он более стабилен, чем тот же pptp. Так как не обеспечивает шифрование данных поверх него был настроеен . В качестве сервера выступает RouterOS. Конфигурация узлов следуюущая:

Узел Внешний адрес Локальный адрес
MikroTik 192.168.0.1 10.0.0.1/24
Linux 192.168.1.100 10.0.0.100

1. L2TP сервер на стороне MikroTik

Создаем пользоваьеля для VPN.

 /ppp secret add name=l2tp-user1 service=l2tp password=s3cr3t \
local-address=10.0.0.1 remote-address=10.0.0.100

Включаем L2TP-сервер.

 /interface l2tp-server server set enabled=yes
/interface l2tp-server server print
enabled: yes
max-mtu: 1460
max-mru: 1460
mrru: disabled
authentication: chap,mschap1,mschap2
keepalive-timeout: 30
default-profile: default-encryption

Для того чтобы присутсвие удаленного сервера в локальной сети работало необходимо Proxy ARP на локальном интерфесе.

 /interface ethernet set ether2 arp=proxy-arp               

2. L2TP клиент Ubuntu Linux

Устананвливаем xl2tpd, это сервер и клиент для протокола l2tp.

  apt-get install xl2tpd

Приводим конфигурационный файл /etc/xl2tpd/xl2tpd.conf к следующему виду

[global]
access control = yes
port = 1701
rand source = dev
[lac MikroTik]
lns = 192.168.0.1
redial = yes
redial timeout = 3
require chap = yes
require authentication = no
name = l2tp-user1
ppp debug = yes
pppoptfile = /etc/ppp/options.MikroTik
require pap = no
autodial = yes

Создаем /etc/ppp/options.MikroTik

 unit 0
remotename l2tp
ipparam MikroTik
connect /bin/true
mru 1460
mtu 1460
nodeflate
nobsdcomp
persist
maxfail 0
nopcomp
noaccomp
noauth
nodefaultroute
name l2tp-user1

Добавляем учетные данные пользователя в /etc/ppp/chap-secrets

 l2tp-user1 l2tp s3cr3t

Перезапускаем сервис.

 
service xl2tpd restart

Тунель долежен подняться и работать. Однако, данные передаются через интернет инкапсулированными без шифрования, в большинстве случаем это не приемлемо. Поэтому продолжаем и настраиваем ipsec поверх l2tp-тунеля.

3. MikroTik IPSEC

Кинфигурация узла.

 /ip ipsec peer add address=192.168.1.100/32 port=500 \
auth-method=pre-shared-key secret="topsecret" \
generate-policy=no exchange-mode=main send-initial-contact=no nat-traversal=no \
proposal-check=obey hash-algorithm=md5 enc-algorithm=3des dh-group=modp1024 lifetime=1d

Политики шифрования трафика.

 /ip ipsec policy add src-address=192.168.1.100/32 src-port=1701 \
dst-address=192.168.0.1/32 dst-port=1701 \
sa-src-address=192.168.1.100 sa-dst-address=192.168.0.1 \
tunnel=no action=encrypt proposal=default
/ip ipsec policy add src-address=192.168.0.1/32 src-port=1701 \
dst-address=192.168.1.100/32 dst-port=1701 \
sa-src-address=192.168.0.1 sa-dst-address=192.168.1.100 \
tunnel=no action=encrypt proposal=default

4. Ubuntu IPSEC

В Linux нам потребуется два пакета, собственно ipsec-tools и racoon, поскольку мы используем pre-shared key для идентификация.

 apt-get install ipsec-tools racoon

Заносим реквизиты в /etc/racoon/psk.txt

 192.168.0.1   topsecret

Приводим /etc/racoon/racoon.conf к следующему виду

log notify;
path pre_shared_key "/etc/racoon/psk.txt";
remote 192.168.0.1 {
exchange_mode main;
lifetime time 24 hour;
proposal {
encryption_algorithm 3des;
hash_algorithm md5;
authentication_method pre_shared_key;
dh_group modp1024;
}
generate_policy off;
}
sainfo anonymous {
pfs_group modp1024;
encryption_algorithm 3des;
authentication_algorithm hmac_sha1, hmac_md5;
compression_algorithm deflate;
}

Настраиваем политики шифрования трафика /etc/ipsec-tools.conf

 !/usr/sbin/setkey -f
flush;
spdflush;
spdadd 192.168.1.100[1701] 192.168.0.1[1701] any -P out ipsec
esp/transport//require;
spdadd 192.168.0.1[1701] 192.168.1.100[1701] any -P in ipsec
esp/transport//require;

Перезапускаем сервисы.

  service setkey restart
service racoon restart
service xl2tpd restart

Если все сделано правильно, то можно увидеть следующее:

 ifconfig ppp0
ppp0      Link encap:Point-to-Point Protocol  
inet addr:10.0.0.100  P-t-P:10.0.0.1  Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1460  Metric:1
RX packets:87 errors:0 dropped:0 overruns:0 frame:0
TX packets:95 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3 
RX bytes:10167 (10.1 KB)  TX bytes:6472 (6.4 KB)
racoonctl show-sa esp
192.168.1.100 192.168.0.1
esp mode=transport spi=237896903(0x0e2e04c7) reqid=0(0x00000000)
E: 3des-cbc  c46af899 be45953c 90096761 701e1160 06dc1b82 dfd79c2f
A: hmac-sha1  79bf3cdc d00636fe 89fff227 0677c5a5 aa8a8e22
seq=0x00000000 replay=4 flags=0x20000000 state=mature 
created: Feb  9 15:41:48 2013	current: Feb  9 15:47:37 2013
diff: 349(s)	hard: 28800(s)	soft: 23040(s)
last: Feb  9 15:41:49 2013	hard: 0(s)	soft: 0(s)
current: 13086(bytes)	hard: 0(bytes)	soft: 0(bytes)
allocated: 174	hard: 0	soft: 0
sadb_seq=3 pid=8374 refcnt=0
192.168.0.1 192.168.1.100
esp mode=transport spi=140925062(0x08665886) reqid=0(0x00000000)
E: 3des-cbc  d98325cf da2b362e e4490eb6 462fd74a a4740169 4ce450b4
A: hmac-sha1  cccf10e4 bc6ad65e 9e5c6e64 17fa9572 d090ed6c
seq=0x00000000 replay=4 flags=0x20000000 state=mature 
created: Feb  9 15:41:48 2013	current: Feb  9 15:47:37 2013
diff: 349(s)	hard: 28800(s)	soft: 23040(s)
last: Feb  9 15:41:49 2013	hard: 0(s)	soft: 0(s)
current: 17785(bytes)	hard: 0(bytes)	soft: 0(bytes)
allocated: 158	hard: 0	soft: 0
sadb_seq=0 pid=8374 refcnt=0

5 мыслей про “L2TP/IPSEC между роутером MikroTik и Ubuntu Linux

  • Andrew

    Кроме этого, не получается с пробросом порта на камеру в подсети опенврт.

    На микротике открыл порт, смотрю торчем на л2тп интерфейс. запросы из вне идут. А назад нет.

    Дело в маршрутах на оперврт я так понимаю? когда я с локалки микротика захожу все пашет, так как прописан маршрут.
    а из когда из вне, трафик идёт через тунель, только в одну сторону, назад он не идёт.

    я вижу 2 выхода. смаскарадить или маршрут по умолчанию поменять на тунель. только как это сделать?

  • Andrew

    Эту проблему поборол. на опенврт прописал в конфигах след.

    1. /etc/config/network

    config interface ‘vpn’
    option ifname ‘ppp0’
    option proto ‘none’

    2. /etc/config/firewall

    config zone
    option name ‘lan’
    option network ‘lan vpn’
    option input ‘ACCEPT’
    option output ‘ACCEPT’
    option forward ‘ACCEPT’

    На камеру удаленно заходит, видео еле-еле пашет на битрейте 80кбит, хотя сигнал стабильный. И если я поставлю в камере битрейт побольше, сначала пинги растут, потом туннель рвется, и восстанавливается через определенное время. Неужели l2tp такая нестабильная технология? в логах микротика —
    logged out
    terminating — administrator request
    disconnected

    Если туннель не грузить, он не падает.

    Вопрос: Не знаешь, как сделать, чтобы при подключении туннеля на опенврт маршрут сам добавлялся…
    пока, что приходится ручками route add -net 192.168.0/24 ppp0

  • Andrew

    С наступившим!

    Сделал по офф мануалу с микротик wiki site2site l2tp

    прописал маршруты. сдвинулось, но не сильно,

    с локалки микротика смог зайти в веб-интерфейс openwrt. а дальше на камеру зайти не смог( которая в локалке openwrt) не пингуется..

    и вот ещё что заметил, если я пингую с локалки openwrt комп в локалке микротика, пинги не идут… а ели пинговать напрямую с самой opewrt то пинги проходят..

    грешу на модем в режиме сетевой карты. где-то читал, что с ним и vpn могут быть проблемы.

    попробую, отпишусь.

  • Rascal От автора

    Здравствуйте.

    Есть два варианта:
    1. Локальная сеть ходит на удаленный сервер через l2tp с NAT, который не корректно настроен
    2. Локальная сеть ходит на удаленный сервер через l2tp, при этом на удаленном сервере не прописан маршрут в локальную сеть через l2tp

    P.S. C наступающим новым годом!

  • Andrew

    Привет, поднял xl2tpd на собранной openwrt со скриптами Huntsman (для 3g/4g модема — huawei e3276 — работает в режиме сетевой карты). роутер tp-link 842nd.

    Соединился с микротиком по твоему мануалу, пока без шифрования.
    Если пинговать удаленный сервер напрямую с микротика, то пинги проходят.
    А с локальной сети не могу пропинговать, ssh и тд не работает — connection refused

    Понимаю, что дело в микротике. пробовал proxy-arp на интерфейс бридж ставить и на лан2, ничего не меняется.

    конфиг:
    1. Локалка микротика — 192.168.1.0/24
    2. Локалка openwrt — 192.168.2.0/24
    3. l2tp — remote-adress — 192.168.3.2 local-adress — 192.168.3.1

    PS: очень прошу помощи — это один из последних шагов в подключении ip камеры c хранилищем на роутере. ( видеоархив уже пишется) через 3g

Комментарии закрыты