У меня есть компьютер с дополнительным, локальным интерфейсом 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.