Появилась потребность в организации VPN тунеля между локальным роутером MikroTik c RouterOS на борту и удаленным сервером на базе Ubuntu Linux. Причем сервер должен выглядеть для локальной сети местным, т.е. находится в этом же L2-сегменте. В качетве тунеля был выбран l2tp, практика показывает что он более стабилен, чем тот же pptp. Так как l2tp не обеспечивает шифрование данных поверх него был настроеен ipsec. В качестве сервера l2tp выступает 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”
Кроме этого, не получается с пробросом порта на камеру в подсети опенврт.
На микротике открыл порт, смотрю торчем на л2тп интерфейс. запросы из вне идут. А назад нет.
Дело в маршрутах на оперврт я так понимаю? когда я с локалки микротика захожу все пашет, так как прописан маршрут.
а из когда из вне, трафик идёт через тунель, только в одну сторону, назад он не идёт.
я вижу 2 выхода. смаскарадить или маршрут по умолчанию поменять на тунель. только как это сделать?
Эту проблему поборол. на опенврт прописал в конфигах след.
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
С наступившим!
Сделал по офф мануалу с микротик wiki site2site l2tp
прописал маршруты. сдвинулось, но не сильно,
с локалки микротика смог зайти в веб-интерфейс openwrt. а дальше на камеру зайти не смог( которая в локалке openwrt) не пингуется..
и вот ещё что заметил, если я пингую с локалки openwrt комп в локалке микротика, пинги не идут… а ели пинговать напрямую с самой opewrt то пинги проходят..
грешу на модем в режиме сетевой карты. где-то читал, что с ним и vpn могут быть проблемы.
попробую, отпишусь.
Здравствуйте.
Есть два варианта:
1. Локальная сеть ходит на удаленный сервер через l2tp с NAT, который не корректно настроен
2. Локальная сеть ходит на удаленный сервер через l2tp, при этом на удаленном сервере не прописан маршрут в локальную сеть через l2tp
P.S. C наступающим новым годом!
Привет, поднял 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