Как можно направить в StrongSwan VPN только определенную подсеть, а не весь трафик на Linux?

Как можно направить в StrongSwan VPN только определенную подсеть, а не весь трафик на Linux?

У меня нет особых компетенций в сетевых технологиях, поэтому я постараюсь объяснить свои потребности. На моем ноутбуке Linux я использую StrongSwan (с NetworkManager) для подключения к определенному VPN с IPsec. Этот VPN позволяет мне достигать таких IP-адресов 10.*.*.*.

Теперь моя проблема в том, что когда я запускаю VPN, весь трафик проходит через VPN, но я бы предпочел направлять в VPN только пакеты, адресованные этим IP-адресам ( 10.*.*.*).

Как это сделать? Может ли кто-нибудь дать мне простое руководство или поделиться необходимыми конфигурациями и тем, как их применять?

решение1

Плагин NetworkManager от strongSwan в настоящее время не позволяет изменять предлагаемые селекторы трафика (которые решают, какой трафик туннелируется). Поэтому он всегда предлагает туннелировать все, и если сервер не сужает селекторы трафика (см. ниже), это то, что согласовывается.

Возможные способы решения этой проблемы:

  1. Если можете, измените конфигурацию сервера так, чтобы он сузил предложение клиента до желаемых подсетей с помощью собственного сокращенного набора селекторов трафика. Некоторые клиенты более или менее способны справиться с этим, плагин NM strongSwan должен быть хорош (на вики strongSwan вы можете найтидополнительная информация о раздельном туннелированиии потенциальные проблемы с разными клиентами).
  2. Если вас интересует только доступ к локальной сети при подключении к VPN, вы можете загрузитьобход-lanплагинвхарон-нмдемон (бэкэнд для плагина strongSwan NM), который автоматически устанавливает политики обхода IPsec для всех локально подключенных подсетей.
  3. Аналогично предыдущему варианту используйте обычный демон IKE (харонилиcharon-systemd, настроенный через swanctl.conf или ipsec.conf) для установки обходных политик IPsec для подсетей, к которым вы не хотите получать доступ через VPN (это также работает, если они не подключены локально).
  4. Предотвратитьхарон-нмдемон от установки собственных маршрутов в таблице маршрутизации 220 (черезcharon-nm.install_routesопция в strongswan.conf), или очистить таблицу маршрутизации 220 после установки соединения. А затем либо вручную, либо через скрипт NM (в /etc/NetworkManager/dispatcher.d, см.документация здесь), установите определенные маршруты только для тех подсетей, которые вы хотите туннелировать, например:

    ip route add 10.0.0.0/8 dev <outbound interface> src <virtual IP> table 220
    

    Где виртуальный IP-адрес должен быть определен через журнал или ip addr(или в скрипте через переменную среды). Если вы не отключите автоматическую установку маршрута, вы также можете получить виртуальный IP из существующего маршрута, который вы затем удалите.

  5. В качестве альтернативы используйте обычный демон IKE вместо плагина NM. Там у вас больше возможностей для туннелирования только нужного вам трафика (либо путем установки определенного селектора удаленного трафика, либо через политики обхода). Однако у вас нет графического интерфейса для настройки/запуска VPN-подключений (но вы можете запускать соединения автоматически или при обнаружении трафика для целевых подсетей).

решение2

Большое спасибо @ecdsa за полноту ответа.

Я новичок в сетевых технологиях, и мне пришлось приложить немало усилий, чтобы реализовать это решение, хотя оно и было тривиальным.

Следующее решение принимает четвертое предложение и требует следующих шагов:

  1. Включите VPN через NetworkManager
  2. Выполните следующую команду, чтобы обнаружить маршрут, созданный из NetworkManager.

    user@laptop:~$ ip route list table 220
    default via 192.168.1.1 dev enp0s31f6 proto static src 172.26.199.15
    
  3. Обратите внимание на интерфейс (enp0s31f6) и виртуальный IP (172.26.199.15)

  4. Очистите текущий маршрут, так как вы хотите использовать пользовательский маршрут, с помощью следующей команды

    sudo ip route flush table 220
    
  5. Добавьте свой собственный маршрут с помощью следующей команды

    sudo ip route add 10.0.0.0/8 dev enp0s31f6 via 172.26.199.15 table 220
    

Теперь только пакеты, адресованные10.0.0.0/8будет маршрутизироваться через VPN.

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