Оказывается, моя проблема с раздельным туннелированием была помещена в совершенно другую область, потому что у меня дома 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;
}
Я надеюсь, что это поможет любому, кто борется с раздельным туннелированием.