Так, вот ситуация: у меня есть два местоположения – дом родителей, где я использую ADSL-соединение и у меня нет статического публичного IP-адреса, и мой дом, где роутеру назначен публичный IP-адрес. Коротко говоря, я хочу установить IPsec-соединение, чтобы иметь возможность получить доступ к обеим сетям без необходимости использования OpenVPN-клиента или чего-то подобного. Это план. Изучая документацию в поисках возможных решений, я, кажется, нашел то, что искал: http://wiki.mikrotik.com/wiki/Manual:IP/IPsec#Simple_Mutual_PSK_XAuth_Config в разделе про настройку "Road Warrior" с Mode Conf. Мне кажется, это именно то, что нужно, но, очевидно, чего-то не хватает в моей конфигурации, так как она не работает так, как ожидается.
Немного больше деталей о моей настройке: роутер, подключенный к ADSL-соединению… У него нет публичного IP-адреса, как я уже упоминал, поэтому можно считать, что каждый раз, когда я включаю или выключаю его, публичный IP-адрес будет меняться. У него есть только одна LAN-сеть, настроенная - 192.168.88.0/24. Роутер в моём доме имеет публичный IP-адрес, который статически настроен на интерфейсе выхода. У него также есть только одна LAN, настроенная - 192.168.99.0/24. Настройка кажется довольно простой, поэтому я изменил конфигурацию из упомянутой выше ссылки, вот как она выглядит на обоих устройствах:
**Конфигурация на стороне сервера**
``` [admin@MikroTik_main] > /ip ipsec export dec/26/2013 17:07:58 by RouterOS 6.7 software id = 2DWW-HXRL /ip ipsec mode-cfg add address-pool=dhcp name=ipsec-cfg split-include=192.168.99.0/24 /ip ipsec policy group add name=ipsec-group /ip ipsec proposal set [ find default=yes ] enc-algorithms=3des /ip ipsec peer add auth-method=pre-shared-key-xauth generate-policy=port-strict mode-cfg=ipsec-cfg passive=yes policy-group=ipsec-group secret=123 /ip ipsec policy add dst-address=192.168.99.0/24 group=ipsec-group src-address=192.168.99.0/24 template=yes [admin@MikroTik_main] > /ip ipsec user print NAME PASSWORD 0 MikrotikDz sample-password [admin@MikroTik_main] > /ip pool print NAME RANGES 0 dhcp 192.168.99.10-192.168.99.50 ```
Что это значит, что у меня нет установленного IPsec-соединения… Чего мне не хватает? И проблема в том, что я еще не придумал, как это отладить… В упомянутом документе автор рекомендует использовать `/ip ipsec policy dump-kernel-policies` для отладки установки IPsec-соединения, но… когда я пытаюсь это сделать на своих роутерах, команда не поддерживается:
``` [admin@MikroTik] > /ip ipsec policy dump-kernel-policies bad command name dump-kernel-policies (line 1 column 18) ```
Это похоже на типичную настройку site-to-site, единственное отличие в том, что один из ваших эндпоинтов не имеет статического IP-адреса. Это значит, что вам не нужны mode-cfg и xauth. Удалите их. Измените ‘pre-shared-key-xauth’ на ‘pre-shared-key’. Можно добавить ‘send-initial-contact=no’, но это не кажется строго необходимым. Измените src-address на 192.168.88.0/24. Удалите это (и пользователей IPsec, и пул). Снова, измените ‘pre-shared-key-xauth’ на ‘pre-shared-key’. Также удалите ‘xauth-login’ и ‘xauth-password’. И вам также нужно настроить клиентские политики (не шаблоны политик!!!). Эта часть сложная, так как вам нужно указать внешний IP-адрес туннеля вашего клиента, который, как вы написали, не статический. Решение — указать произвольный IP-адрес в вашей политике, а затем использовать скрипт, который будет обновлять вашу политику каждый раз, когда меняется ваш публичный IP-адрес. Эта политика должна выглядеть так: /ip ipsec policy add dst-address=192.168.99.0/24 sa-dst-address=77.70.67.28 sa-src-address=x.x.x.x src-address=192.168.88.0/24 tunnel=yes, где x.x.x.x — IP-адрес, который должен быть изменен скриптом. Я видел готовый к использованию скрипт где-то либо на этом форуме, либо на Mikrotik wiki, попробуйте использовать поиск.
Андрий, спасибо за быстрый и подробный ответ… Я просто задумался… а не ломает ли предлагаемая тобой конфигурация концепцию mode-cfg и шаблонной настройки? То есть, насколько я понимаю, она позволяет мне использовать устройство как VPN-концентратор, где я могу завершать IPsec-туннели от клиентов – будь то другие маршрутизаторы MikroTik или хосты с установленным VPN-приложением.
Mode-cfg в основном предназначен для настроек "дорожных воинов", когда клиент — это IPsec-программное обеспечение, установленное на компьютере пользователя. Он не предназначен для случаев, как ваш, когда у вас есть отдельная сеть, скрытая за вашим клиентским устройством. Тем не менее, все же возможно использовать mode-cfg + шаблоны в вашем случае, я просто не вижу смысла/пользы в этом.
andriys, кажется, вся суть конфигурации mode-cfg в том, что мне не придется создавать скрипт для динамически меняющегося IP-адреса. Кстати, я уже поменял конфигурацию на обоих роутерах. Теперь соединение IPsec указано как установленное на обоих концах:
[admin@MikroTik_main] > /ip ipsec installed-sa print Flags: A - AH, E - ESP, P - pfs 0 E spi=0x2ECECA9 src-address=46.10.36.211 dst-address=77.70.67.28 auth-algorithm=sha1 enc-algorithm=3des replay=4 state=mature auth-key="04a8924a813ab0fb44490097fcf34ecb43e35345" enc-key="b25e3c69d8bdd19cf320a592d2a02212c9612fabc54b9e00" add-lifetime=24m/30m 1 E spi=0x7B984D1 src-address=77.70.67.28 dst-address=46.10.36.211 auth-algorithm=sha1 enc-algorithm=3des replay=4 state=mature auth-key="902fd02ebaad49981354ca8b63923a853fb62eac" enc-key="28d5a7eac21deb3e4b068b1566caf7a1ee7a48304b15c98b" addtime=dec/28/2013 21:15:57 expires-in=23m2s add-lifetime=24m/30m current-bytes=672
[admin@MikroTik] > /ip ipsec installed-sa print Flags: A - AH, E - ESP, P - pfs 0 E spi=0x2ECECA9 src-address=192.168.1.2 dst-address=77.70.67.28 auth-algorithm=sha1 enc-algorithm=3des replay=4 state=mature auth-key="04a8924a813ab0fb44490097fcf34ecb43e35345" enc-key="b25e3c69d8bdd19cf320a592d2a02212c9612fabc54b9e00" add-lifetime=24m/30m 1 E spi=0x7B984D1 src-address=77.70.67.28 dst-address=192.168.1.2 auth-algorithm=sha1 enc-algorithm=3des replay=4 state=mature auth-key="902fd02ebaad49981354ca8b63923a853fb62eac" enc-key="28d5a7eac21deb3e4b068b1566caf7a1ee7a48304b15c98b" add-lifetime=24m/30m
Похоже, все хорошо… но я по-прежнему не могу пинговать сети за роутерами 192.168.88.0/24 и 192.168.99.0/24. И я подумал, что, возможно, виноват NAT. По моему пониманию, IPsec туннель установлен и работает. Я вернулся к документу, который упомянуты в моем первом посте, и действительно, такая ситуация обсуждается там. Поэтому я добавил следующую конфигурацию:
Благодаря этим настройкам оба роутера должны исключать трафик, инициированный локально и направленный в сеть партнерского роутера, из правила NAT. Но опять же… нет пинга! У вас есть идея, как я мог бы отслеживать, есть ли какой-нибудь трафик, проходящий через IPsec туннель? Вывод `/ip ipsec statistics print` показывает только счетчики ошибок, и все они равны нулю…
Я думаю, что параметр mode-cfg — это настройка на стороне отвечающего только в RouterOS. Так что, нет, mode-cfg не поможет избежать использования этого скрипта. Пусть ребята из техподдержки Mikrotik поправят меня, если я ошибаюсь.
Нет, других политик, кроме обсуждаемой, у меня нет… Я все равно считаю, что дело не в IPsec. Судя по результатам, она настроена. Но, полагаю, трафик блокируется файерволом или NAT…
Я спрашивал про динамические политики. Они должны создаваться во время соединения, по крайней мере, на стороне отвечающего. Инициатор обычно имеет обычные (статические) политики, предварительно настроенные, но если вы правы и mode-cfg + templates можно использовать и на стороне инициатора, то динамические политики должны быть и на стороне инициатора. Политики — это то, что говорит вашему роутеру, какой трафик нужно шифровать, поэтому без них ваш VPN-туннель не заработает.
Андрий, кажется, я начинаю понимать конфигурацию IPsec по кусочкам. Думаю, я что-то упускаю. Вывод получаю только в разделе `/ip ipsec remote-peer print`. Но пока что динамических политик не вижу. Проверю ещё раз через пару дней, я немного в разъездах сейчас и нет прямого доступа к одному из роутеров, чтобы протестировать…
Наконец-то нашёл время, чтобы проверить это ещё раз. И IPsec туннель работает. Спасибо, andriys! Теперь у меня вполне сложилось представление о том, как настраивать IPsec в RouterOS. Хотя, придётся ещё поискать способ динамического установления IPsec туннеля. Посмотрю ещё раз документацию…