IKEv2 туннель между MikroTik и StrongSwan: EAP ms-chapv2 и доступ к сайтам

Введение

Идея статьи возникла из желания пропускать определенные сайты через VPN-туннель напрямую через маршрутизатор, так как дома большое количество устройств, а пускать весь трафик через VPN неудобно в связи с низкой пропускной способностью туннеля. Статья написана сразу после создания конфигурации. Настройка будет проходить в Winbox MikroTik.

Конфигурация StrongSwan

Здесь я рассмотрю только основные конфигурационные файлы StrongSwan, без углубления в настройку данного демона.

/etc/ipsec.conf

config setup
   charondebug="ike 2, knl 2, cfg 2, net 2, esp 2, dmn 2,  mgr 2"
   uniqueids=never

conn ikev2-vpn
   auto=add
   compress=no
   type=tunnel
   keyexchange=ikev2
   fragmentation=yes
   forceencaps=yes
   dpdaction=clear
   dpddelay=300s
   rekey=no
   left=%any
   leftid=
   leftcert=server-cert.pem
   leftsendcert=always
   leftsubnet=0.0.0.0/0
   right=%any
   rightid=%any
   rightauth=eap-mschapv2
   rightsourceip=10.10.10.0/24
   rightdns=8.8.8.8,8.8.4.4
   rightsendcert=never
   eap_identity=%identity

/etc/ipsec.secrets

# This file holds shared secrets or RSA private keys for authentication.

# RSA private key for this host, authenticating it to any other host
# which knows the public part.

# this file is managed with debconf and will contain the automatically created $
include /var/lib/strongswan/ipsec.secrets.inc

: RSA "server-key.pem"
user1 : EAP "password1"
user2 : EAP "password2"

iptables на VPS

-A FORWARD -s 10.10.10.0/24 -o eth0 -p tcp -m policy --dir in --pol ipsec -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360

-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --dir out --pol ipsec -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p udp -m udp --dport 500 -j ACCEPT
-A INPUT -p udp -m udp --dport 4500 -j ACCEPT
-A INPUT -j DROP
-A FORWARD -s 10.10.10.0/24 -m policy --dir in --pol ipsec --proto esp -j ACCEPT
-A FORWARD -d 10.10.10.0/24 -m policy --dir out --pol ipsec --proto esp -j ACCEPT
-A FORWARD -j DROP

Импорт сертификатов и настройка IPSec MikroTik

Импорт сертификатов

Для добавления сертификатов, необходимо перенести их в память вашего MikroTik в раздел Files.

System -> Certificates

Импортируем открытый ключ корневого сертификата вашего центра сертификации на VPS на котором установлен StrongSwan.

Последовательно импортируем открытый и закрытый ключи авторизации используемые в конфигурации StrongSwan.

Настройка клиента IPsec

IP -> IPsec

Импортируем закрытый ключ авторизации StrongSwan, для использования в клиенте.

Далее, последовательно настраиваем профиль VPN-клиента.

Вместо "VPS IP" указываем адрес вашего сервера, где развернут StrongSwan.

В разделе IPsec Idenity настраиваем профиль авторизации, указываем учётные данные и сертификат импортированный ранее.

После выполнения этого шага туннель между MikroTik и StrongSwan будет поднят автоматически.

Вывод в разделе Log при успешной авторизации
Вывод в разделе Log при успешной авторизации

В разделе IP -> Addresses при успешной авторизации, появится IP адрес выданный StrongSwan.

Настройка маршрутизации трафика и списка ресурсов

IP -> Firewall

В разделе NAT создаем правило перенаправления трафика.

В данном случае я использовал списки адресов.

local - подсеть маршрутизатора.

List1 - список сайтов.

Перенаправляем трафик на шлюз(IP адрес выданный StrongSwan)

Настройка списков

IP -> Firewall

В разделе Address Lists необходимо добавить следующие списки:

local - подсеть маршрутизатора, в моем случае 192.168.1.0/24

List1 - список сайтов. Например habr.com, можно добавить сайт по fqdn, ip адрес будет определён автоматически.

List1 - список сайтов. Например habr.com, можно добавить сайт по fqdn, ip адрес будет определён автоматически.

Заключение

В данной статье я постарался подробно описать настройку туннеля между MicroTik и StrongSwan. Очень жду фидбека и вашей конструктивной критики.

Комментарии 14

    +3
    Хорошо бы кроме картинок winbox, дублировать настройки в консольном варианте. Как минимум, это будет читабельней.
      0
      Мне кажется было бы неплохо добавить процесс генерации сертификатов для стронгсвана.
        0
        на эту тему гуглится over9000 статей, правильно что этого тут нет, т.к. текст не про настройки сервера, а клиента, более того конкретного клиента микротик
        0
        И небольшой оффтоп: сам strongswan считает настройку через ipsec.conf устаревшей, и рекомендует переходить на swanctl.
        Убедиться в этом можно на сайте в разделе примеров.
          +1
          Самое собственно интересное – роутинг по fqdn остался под завесой тайны. Как это работает, в какой момент резолвится адрес, сколько живет, что происходит, если dns постоянно ротирует адреса, и как это работает с UDP потоками итд. Магическая технология )
            +1
            Зачем импортировать ключ сервера в микротик? Он, по идее, никогда не должен покидать сервер. Да и рутовый сертификат импортировать не обязателено кмк
              +1
              Для авторизации EAP через ms-chapv2 достаточно импортировать созданный вами сертификат CA, поскольку авторизация происходит по логину и паролю, то ключи не нужны… А вообще хорошая статья, самое главное что настройка простая. Я правда предпочитаю делать маршрутизацию по Mangle через список адресов или контент адреса, т.к. у меня 2 VPN сервера, чтобы не плодить множество правил NAT. Но если этот вариант рабочий — то тоже неплохо.
              0
              Вот был 2.5 лет назад пост про микротик и bgp от товарища Furriest (https://habr.com/ru/post/413049/).

              Ищу и не могу понять, как мне из списка, полученного по BGP загнать траффик в ikev2. Вот если есть отдельный интерфейс, то все он, но тут он не создаётся.

              Может подскажет кто, более знающий? Вариант генерить списки адресов рассматриваем как запасной.
                0
                Можно костылить псевдоинтерфейсы (например дополнительные bridge), весь трафик через которые политикой заворачивать в ikev2. Можно сделать отдельный VRF, из которого в ikev2 будет смотреть дефолт, а полученный по bgp список использовать как раутлик. Мало ли как еще можно извратиться :)

                Но, честно говоря, для такой конфигурации гораздо проще не генерить, а просто регулярно дергать с antifilter списки адресов в формате микротика — antifilter.download/list/allyouneed.rsc
                0
                открытый ключ корневого сертификата


                Сертификат — это и есть открытый ключ + дополнительная информация.
                  0

                  Почему не сделать поще, например микротик<==>микротик, и какой нибудь l2tp ipsec

                    0
                    например микротик<==>микротик

                    Проще микротики связать с собой как раз по ikev2. Но не всем удобно разворачивать chr (и монопольно занимать ip и vds) ради одного-двух тоннелей.

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                  Самое читаемое