Назад | Перейти на главную страницу

Исключить локальную подсеть из 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?

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

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

ОБНОВЛЕНИЕ: как отмечает @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, а не (просто) table 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-адрес источника, но проходящий через неправильную сетевую карту), поэтому будьте осторожны.


ОБНОВИТЬ: the плагин bypass-lan проще в использовании, особенно в динамических средах.

Вместо добавления новых 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

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