Рейтинг:0

Невозможно заставить работать раздельное туннелирование в Strongswan

флаг us

Я пытаюсь настроить Strongswan для раздельного туннелирования VPN.

Я хочу только подсети 10.88.0.0/16 и 10.0.200.0/24 доступен через VPN-туннель. Все остальное обрабатывается через шлюз по умолчанию для сети.

Всем клиентам назначается IP-адрес, принадлежащий 10.0.201.0/24 подсеть.

В моем файле конфигурации у меня есть, среди прочего, следующее:

# Метод входа по умолчанию
eap-по умолчанию {
  удаленный {
   авторизация = eap-радиус
   идентификатор =% любой
   eap_id = % любой
  }
}

связи
{
  conn-unix : conn-defaults, eap-defaults {
    дети {
      сеть {
        local_ts = 10.0.200.0/24, 10.88.0.0/16
      }

      esp_proposals = aes128gcm128-x25519
    }

    пулы = IkeVPN-ipv4
    предложения = aes128-sha256-x25519
  }

  conn-windows: conn-defaults, eap-defaults {
    дети {
      сеть {
        local_ts = 10.0.200.0/24, 10.88.0.0/16
      }

      esp_proposals = aes256-sha256-prfsha256-modp1024
    }

    предложения = aes256-sha256-prfsha256-modp1024
    пулы = IkeVPN-ipv4
  }
}

бассейны
{
  IkeVPN-ipv4 {
    адрес = 10.0.201.0/24
    DNS = 10.0.88.2
  }
}

Когда я вхожу в систему через VPN, можно пинговать хосты, принадлежащие 10.88.0.0/16 и 10.0.200.0/24, поэтому я знаю, что могу использовать VPN-туннель.

Однако:

Если я попытаюсь получить доступ к любому другому ресурсу в Интернете, все еще будучи подключенным к VPN, я не смогу даже пропинговать IP-адрес, принадлежащий этому ресурсу.

В моей таблице маршрутизации на моем компьютере с Windows я могу найти следующие записи:

Частичная таблица маршрутизации для Windows-клиента, подключенного к VPN-серверу

Я знаю, что когда у вас есть два маршрута к данной подсети, например 0.0.0.0/0 в таблице маршрутизации, то выигрывает правило с наименьшей метрикой, и трафик перенаправляется с использованием этого правила.

Однако я не хочу, чтобы VPN-сервер устанавливал маршрут по умолчанию через VPN, а только сообщал, что подсети 10.88.0.0/16 и 10.0.200.0/24 должен маршрутизироваться через VPN.

Я хочу, чтобы таблица маршрутизации была ближе к этой, без необходимости вручную редактировать таблицу маршрутизации на каждом VPN-клиенте:

Желаемая таблица маршрутизации

Итак, как мне это сделать?

флаг cn
Пожалуйста, взгляните на [это](https://wiki.strongswan.org/projects/strongswan/wiki/ForwardingAndSplitTunneling#Split-Tunneling-with-IKEv2) и [это](https://wiki.strongswan.org/ Projects/strongswan/wiki/WindowsClients#Split-routing-on-Windows-10-and-Windows-10-Mobile) на вики strongSwan.
флаг us
Итак, Strongswan необходимо обновить свою документацию, потому что, похоже, Windows ДЕЙСТВИТЕЛЬНО устанавливает шлюз по умолчанию, когда вы регистрируете новое соединение vpn. По крайней мере для ipv4.
флаг us
Мне пришлось отключить «маршрутизацию по умолчанию» и включить «отключить добавление маршрутизации на основе классов» (перевод с датского), чтобы удалить шлюз по умолчанию или, по крайней мере, только трафик для подсети «10.0.0.0/8» через VPN. Я надеялся, что в Strongswan есть что-то похожее на директиву OpenVPN `push route`.
флаг us
Немного поискав в Google, я сказал, что мне нужно отправить клиентам «код опции dhcp 121 и 249». Код опции 121 работает с Linux и более ранними версиями Windows, а код опции 249 работает с более новыми версиями Windows (новее, чем Vista) и MacOS. Однако Strongswan не использует стандартный шлюз, так как же это влияет на отправку маршрутов клиентам?
Рейтинг:0
флаг us

Оказывается, моя проблема с раздельным туннелированием была помещена в совершенно другую область, потому что у меня дома 2 маршрутизатора, поэтому моя домашняя сеть выглядит примерно так: ISP <-> R1 <-> R2 <-> Me.

... и R1 был настроен на IP-адрес в диапазоне 10.0.0.0/24.

Когда вы отключаете маршрутизацию по умолчанию в клиенте Windows VPN, он затем добавит вставленный маршрут на основе класса, поэтому в моем случае он добавит маршрут, который отправляет все для 10.0.0.0/8 через VPN, что, конечно, будет конфликтовать с настройкой. на роутере R1.

Поэтому хотел вообще убрать маршрут 10.0.0.0/8 и пропихнуть маршруты для подсетей 10.88.0.0/16 и 10.0.200.0/16 через VPN.

Оказывается, это выполнимо.

Маршрутизация на основе классов удаляется путем включения отключить маршрутизацию на основе классов когда вы отключаете маршрутизация по умолчанию в VPN-клиенте.

В Strongswan вам необходимо перенаправить запрос DHCP от клиентов на DHCP-сервер, на котором реализован RFC3442.

Итак, в моей конфигурации выше я должен заменить все вхождения пулы = IkeVPN-ipv4 с пулы = DHCP И в Strongswan.conf Я должен добавить следующее в подраздел плагинов charon:

харон {
  плагины {
    ...
    DHCP {
      server = ip.address.of.dhcp.server
    }
  }
}

Я могу тогда удалить все бассейны раздел внизу моей конфигурации.

Есть еще несколько вариантов что можно прочитать здесь.

Руководство от Strongswan from @ecdsa подсказка дала некоторую информацию, но это руководство специфично для Windows, поэтому оно не расскажет вам, как обращаться с устройствами Linux, MacOS или Android. Однако RFC3442 будет обрабатывать общий случай.

Вкратце, в RFC3442 говорится, что вы должны отправить следующие два параметра dhcp:

  • опция 121 (относится к Linux, Android и Windows Vista или старше)
  • опция 249 (относится к Windows 7 или новее и MacOS)

В основном вы должны кодировать каждый маршрут как массив int, используя следующий синтаксис:

х, у1, у2, у3, у4, z1, z2, z3, z4

Где:

  • x: сетевая маска CIDR
  • y1 - y4: это сеть, которую вы хотите маршрутизировать, но с той особенностью, что когда хвост последовательности y1, y2, y3, y4 состоит из нулей, они затем опускаются.
  • z1 - z4: шлюз следующего перехода в подсеть.

Если есть более одного маршрута для отправки через DHCP, вам придется добавить еще одну последовательность, аналогичную приведенной выше, в хвосте первого маршрутизатора.

Согласно документации Strongswan я могу заменить стандартный шлюз на 0.0.0.0.

Это означает, что мой путь к 10.0.200.0/24 кодируется как 24,10,0,200,0,0,0,0 и 10.88.0.0/16 кодируется в 16,10,88,0,0,0,0.

Сочетание двух дает мне 24,10,0,200,0,0,0,0,16,10,88,0,0,0,0, что приводит меня к следующей конфигурации в ISC DHCP-сервер:

опция rfc-routes code 121 = массив целых чисел 8;
опция ms-routes code 249 = массив целых чисел 8;

время аренды по умолчанию 21600;
максимальное время аренды 86000;

подсеть 10.0.201.0 сетевая маска 255.255.255.0 {
    диапазон 10.0.201.1 10.0.201.254;

    вариант доменного имени "example.com";
    вариант доменных имен-серверов ip.address.of.dns.server;

    опция rfc-routes 24,10,0,200,0,0,0,0,16,10,88,0,0,0,0;
    опция ms-routes 24,10,0,200,0,0,0,0,16,10,88,0,0,0,0;
}

Я надеюсь, что это поможет любому, кто борется с раздельным туннелированием.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.