У меня нет особых компетенций в сетевых технологиях, поэтому я постараюсь объяснить свои потребности. На моем ноутбуке Linux я использую StrongSwan (с NetworkManager) для подключения к определенному VPN с IPsec. Этот VPN позволяет мне достигать таких IP-адресов 10.*.*.*
.
Теперь моя проблема в том, что когда я запускаю VPN, весь трафик проходит через VPN, но я бы предпочел направлять в VPN только пакеты, адресованные этим IP-адресам ( 10.*.*.*
).
Как это сделать? Может ли кто-нибудь дать мне простое руководство или поделиться необходимыми конфигурациями и тем, как их применять?
решение1
Плагин NetworkManager от strongSwan в настоящее время не позволяет изменять предлагаемые селекторы трафика (которые решают, какой трафик туннелируется). Поэтому он всегда предлагает туннелировать все, и если сервер не сужает селекторы трафика (см. ниже), это то, что согласовывается.
Возможные способы решения этой проблемы:
- Если можете, измените конфигурацию сервера так, чтобы он сузил предложение клиента до желаемых подсетей с помощью собственного сокращенного набора селекторов трафика. Некоторые клиенты более или менее способны справиться с этим, плагин NM strongSwan должен быть хорош (на вики strongSwan вы можете найтидополнительная информация о раздельном туннелированиии потенциальные проблемы с разными клиентами).
- Если вас интересует только доступ к локальной сети при подключении к VPN, вы можете загрузитьобход-lanплагинвхарон-нмдемон (бэкэнд для плагина strongSwan NM), который автоматически устанавливает политики обхода IPsec для всех локально подключенных подсетей.
- Аналогично предыдущему варианту используйте обычный демон IKE (харонилиcharon-systemd, настроенный через swanctl.conf или ipsec.conf) для установки обходных политик IPsec для подсетей, к которым вы не хотите получать доступ через VPN (это также работает, если они не подключены локально).
Предотвратитьхарон-нмдемон от установки собственных маршрутов в таблице маршрутизации 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 из существующего маршрута, который вы затем удалите.- В качестве альтернативы используйте обычный демон IKE вместо плагина NM. Там у вас больше возможностей для туннелирования только нужного вам трафика (либо путем установки определенного селектора удаленного трафика, либо через политики обхода). Однако у вас нет графического интерфейса для настройки/запуска VPN-подключений (но вы можете запускать соединения автоматически или при обнаружении трафика для целевых подсетей).
решение2
Большое спасибо @ecdsa за полноту ответа.
Я новичок в сетевых технологиях, и мне пришлось приложить немало усилий, чтобы реализовать это решение, хотя оно и было тривиальным.
Следующее решение принимает четвертое предложение и требует следующих шагов:
- Включите VPN через NetworkManager
Выполните следующую команду, чтобы обнаружить маршрут, созданный из NetworkManager.
user@laptop:~$ ip route list table 220 default via 192.168.1.1 dev enp0s31f6 proto static src 172.26.199.15
Обратите внимание на интерфейс (enp0s31f6) и виртуальный IP (172.26.199.15)
Очистите текущий маршрут, так как вы хотите использовать пользовательский маршрут, с помощью следующей команды
sudo ip route flush table 220
Добавьте свой собственный маршрут с помощью следующей команды
sudo ip route add 10.0.0.0/8 dev enp0s31f6 via 172.26.199.15 table 220
Теперь только пакеты, адресованные10.0.0.0/8будет маршрутизироваться через VPN.