Исключить локальную подсеть из StrongSwan VPN

Исключить локальную подсеть из StrongSwan VPN

У меня есть компьютер с дополнительным, локальным интерфейсом Ethernet с частной подсетью. Когда устанавливается StrongSwan VPN, я не могу получить доступ к этой подсети.

Это локальная «левая» конфигурация (установленнаяалго):

conn ikev2-<rightip>
    fragmentation=yes
    rekey=no
    dpdaction=clear
    keyexchange=ikev2
    compress=no
    dpddelay=35s

    ike=aes128gcm16-prfsha512-ecp256!
    esp=aes128gcm16-ecp256!

    right=<rightip>
    rightid=<rightip>
    rightsubnet=0.0.0.0/0
    rightauth=pubkey

    leftsourceip=%config
    leftauth=pubkey
    leftcert=daves.crt
    leftfirewall=yes
    left=%defaultroute

    auto=add

Рассматриваемая подсеть — 10.0.0.0/24. %defaultroute разрешается в адрес в диапазоне 192.168.0.0/24.

'left' и 'leftsubnet' не выглядят правильными вариантами для этого, но я не вижу ничего лучшего. Я пробовал устанавливать leftsubnet на 10.0.0.0/24 и на !10.0.0.0/24.

Как исключить локальную подсеть из VPN-подключения StronSwan?

Как проверить конфигурацию маршрута соединения?

решение1

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

ОБНОВЛЕНИЕ: как заметил @ecdsa, в strongswan >= 5.5.2 естьболее простой метод, посмотрите в конце, может ли ваша версия его использовать.

Пример с несколькими случайными IP-адресами. До любых изменений и туннелирования:

# ip route get 10.0.0.55
10.0.0.55 dev lxcbr0 src 10.0.0.77 uid 0 

После создания туннеля возникла проблема:

# ip route get 10.0.0.55
10.0.0.55 via 192.168.0.1 dev eth0 table 220 src 192.168.0.44 uid 0 

Добавляем эту конфигурацию в /etc/ipsec.conf:

conn ignorelan
    left=127.0.0.1 #prevents usage in peers selection algorithm
    leftsubnet=10.0.0.0/24
    rightsubnet=10.0.0.0/24
    authby=never
    type=passthrough
    auto=route

и перезагружаем его:

# ipsec reload

следует активировать его немедленно. Если этого не произошло (в этот раз), вы можете сделать следующее:

# ipsec route ignorelan
'ignorelan' shunt PASS policy installed

В любом случае его следует использовать при любом последующем перезапуске. Теперь у вас есть (в дополнение к любому туннелю):

# ipsec status 
Shunted Connections:
     ignorelan:  10.0.0.0/24 === 10.0.0.0/24 PASS

[...]

Теперь, независимо от того, установлен туннель или нет, вы получаете правильный маршрут (обрабатываемый strongswan, то есть в таблице 220, а не (только) в таблице main (больше)):

# ip route get 10.0.0.55
10.0.0.55 dev lxcbr0 table 220 src 10.0.0.77 uid 0 
    cache 

При создании туннеля для 0.0.0.0/0 будет получен результат, аналогичный показанному в таблице 220:

# ip route show table 220
default via 192.168.0.1 dev eth0 proto static src 192.168.0.44 
10.0.0.0/24 dev lxcbr0 proto static src 10.0.0.77 
192.168.0.0/24 dev eth0 proto static src 192.168.0.44 

Если вы не укажете маршруты, соответствующие действительности (например, неверную сетевую маску) в настройках сквозного пропуска, ожидайте неправильных результатов для «шунта» (например, ожидаемый исходный IP, но проходящий через неверную сетевую карту), поэтому будьте осторожны.


ОБНОВЛЯТЬ:плагин обхода локальной сетипроще в использовании, особенно в динамических средах.

Вместо добавления новых connзаписей активируйте его (например, в Debian buster (нестабильной версии) отредактируйте /etc/strongswan.d/charon/bypass-lan.conf и установите load=yes (например: charon.plugins.bypass-lan.load=yes) ). По умолчанию каждый интерфейс шунтируется, то есть туннель будет установлен, но не будет использоваться по умолчанию. Поэтому просто установите interfaces_ignoreили interfaces_useсоответственно. Вам следует установить interfaces_ignoreдля интерфейса(ов)не хочудля обхода туннелей или, в противном случае, interfaces_useдля установки интерфейса(ов) выхотетьдля обхода туннелей. Например:

interface_use = lxcbr0

В этом примере получим после ipsec start, как и предыдущий метод:

# ip route show table 220
10.0.0.0/24 dev lxcbr0 proto static src 10.0.0.77

(но также будут учитываться маршруты IPv6, связанные с этим интерфейсом, если используется IPv6).


Еще один (хакерский) метод — обойти таблицу 220 strongswan: вместо любых настроек strongswan то же самое можно сделать (для этих вопросов и примеров) с помощью:

ip rule add priority 219 to 10.0.0.0/24 lookup main

Он будет использовать таблицу маршрутизации по умолчанию (основную) с целевой сетью вместо перехода к следующей записи с использованием таблицы Strongswan 220.

Связанный контент