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