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

networkmanager-strongswan vpn - маршрутизация определенного IP-адреса через VPN

Я пытаюсь настроить VPN на Linux Mint 19.2.

Я использую сетевой менеджер-strongswan поэтому я добавил этот файл с именем VPN под /etc/NetworkManager/system-connections/

[connection]
id=VPN
uuid=be1d4fd1-bbaa-4aa9-9fdc-e293bf16fe67
type=vpn
autoconnect=false
permissions=
timestamp=1582680217

[vpn]
address=vpn********.it
certificate=
encap=yes
ipcomp=no
method=eap
password-flags=0
proposal=no
user=user
virtual=yes
service-type=org.freedesktop.NetworkManager.strongswan

[vpn-secrets]
password=password

[ipv4]
dns-search=
ignore-auto-dns=true
ignore-auto-routes=true
method=auto

[ipv6]
addr-gen-mode=stable-privacy
dns-search=
ip6-privacy=0
method=ignore

Соединение в порядке, я могу получить доступ по ssh в частной сети. Большая проблема в том, что после подключения я не могу выходить в Интернет, подключившись к vpn, заблокировав все остальные адреса.
Я добавил ignore-auto-routes флаг в конфигурации, так почему мое соединение заблокировано?


ip a вывод*

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:3c:de:1b brd ff:ff:ff:ff:ff:ff
    inet yy.16.209.132/24 brd yy.16.209.255 scope global dynamic noprefixroute ens33
       valid_lft 1656sec preferred_lft 1656sec
    inet yy.26.199.18/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::216e:bcc0:3b4f:44b2/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

маршрут -n вывод

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         yy.16.209.2    0.0.0.0         UG    20100  0        0 ens33
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 ens33
yy.16.209.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33
yy.26.199.18   0.0.0.0         255.255.255.255 UH    50     0        0 ens33
yy.26.199.18   0.0.0.0         255.255.255.255 UH    100    0        0 ens33

политика ip xfrm вывод НЕТ VPN

src yy.16.209.0/24 dst yy.16.209.0/24 
    dir fwd priority 175423 
src yy.16.209.0/24 dst yy.16.209.0/24 
    dir in priority 175423 
src yy.16.209.0/24 dst yy.16.209.0/24 
    dir out priority 175423 
src 169.254.0.0/16 dst 169.254.0.0/16 
    dir fwd priority 183615 
src 169.254.0.0/16 dst 169.254.0.0/16 
    dir in priority 183615 
src 169.254.0.0/16 dst 169.254.0.0/16 
    dir out priority 183615 
src fe80::/64 dst fe80::/64 
    dir fwd priority 134463 
src fe80::/64 dst fe80::/64 
    dir in priority 134463 
src fe80::/64 dst fe80::/64 
    dir out priority 134463 
src yy.26.199.18/32 dst 0.0.0.0/0 
    dir out priority 383615 
    tmpl src yy.16.209.132 dst xx.xx.124.58
        proto esp spi 0xc57cfb3f reqid 7 mode tunnel
src 0.0.0.0/0 dst yy.26.199.18/32 
    dir fwd priority 383615 
    tmpl src xx.xx.124.58 dst yy.16.209.132
        proto esp reqid 7 mode tunnel
src 0.0.0.0/0 dst yy.26.199.18/32 
    dir in priority 383615 
    tmpl src xx.xx.124.58 dst yy.16.209.132
        proto esp reqid 7 mode tunnel
src ::1/128 dst ::1/128 
    dir fwd priority 68927 
src ::1/128 dst ::1/128 
    dir in priority 68927 
src ::1/128 dst ::1/128 
    dir out priority 68927 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket in priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket out priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket in priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket out priority 0 
src ::/0 dst ::/0 
    socket in priority 0 
src ::/0 dst ::/0 
    socket out priority 0 
src ::/0 dst ::/0 
    socket in priority 0 
src ::/0 dst ::/0 
    socket out priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket in priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket out priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket in priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket out priority 0 
src ::/0 dst ::/0 
    socket in priority 0 
src ::/0 dst ::/0 
    socket out priority 0 
src ::/0 dst ::/0 
    socket in priority 0 
src ::/0 dst ::/0 
    socket out priority 0

политика ip xfrm вывод ПОД VPN

src yy.26.199.18/32 dst 0.0.0.0/0 
    dir out priority 383615 
    tmpl src yy.16.209.132 dst xx.xx.124.58
        proto esp spi 0xc787ea42 reqid 2 mode tunnel
src 0.0.0.0/0 dst yy.26.199.18/32 
    dir fwd priority 383615 
    tmpl src xx.xx.124.58 dst yy.16.209.132
        proto esp reqid 2 mode tunnel
src 0.0.0.0/0 dst yy.26.199.18/32 
    dir in priority 383615 
    tmpl src xx.xx.124.58 dst yy.16.209.132
        proto esp reqid 2 mode tunnel
src fe80::/64 dst fe80::/64 
    dir fwd priority 134463 
src fe80::/64 dst fe80::/64 
    dir in priority 134463 
src fe80::/64 dst fe80::/64 
    dir out priority 134463 
src ::1/128 dst ::1/128 
    dir fwd priority 68927 
src ::1/128 dst ::1/128 
    dir in priority 68927 
src ::1/128 dst ::1/128 
    dir out priority 68927 
src yy.16.209.0/24 dst yy.16.209.0/24 
    dir fwd priority 175423 
src yy.16.209.0/24 dst yy.16.209.0/24 
    dir in priority 175423 
src yy.16.209.0/24 dst yy.16.209.0/24 
    dir out priority 175423 
src 169.254.0.0/16 dst 169.254.0.0/16 
    dir fwd priority 183615 
src 169.254.0.0/16 dst 169.254.0.0/16 
    dir in priority 183615 
src 169.254.0.0/16 dst 169.254.0.0/16 
    dir out priority 183615 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket in priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket out priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket in priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket out priority 0 
src ::/0 dst ::/0 
    socket in priority 0 
src ::/0 dst ::/0 
    socket out priority 0 
src ::/0 dst ::/0 
    socket in priority 0 
src ::/0 dst ::/0 
    socket out priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket in priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket out priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket in priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    socket out priority 0 
src ::/0 dst ::/0 
    socket in priority 0 
src ::/0 dst ::/0 
    socket out priority 0 
src ::/0 dst ::/0 
    socket in priority 0 
src ::/0 dst ::/0 
    socket out priority 0

Различая выходы, я вижу, что этот фрагмент добавлен, пока подключен VPN:

src yy.26.199.18/32 dst 0.0.0.0/0 
    dir out priority 383615 
    tmpl src yy.16.209.132 dst xx.xx.124.58
        proto esp spi 0xc787ea42 reqid 2 mode tunnel
src 0.0.0.0/0 dst yy.26.199.18/32 
    dir fwd priority 383615 
    tmpl src xx.xx.124.58 dst yy.16.209.132
        proto esp reqid 2 mode tunnel
src 0.0.0.0/0 dst yy.26.199.18/32 
    dir in priority 383615 
    tmpl src xx.xx.124.58 dst yy.16.209.132
        proto esp reqid 2 mode tunnel

Я много чего пробовал, но безуспешно.

и много других глупостей.

Поэтому я хочу использовать свое соединение для «нормального Интернета» при маршрутизации определенных адресов через VPN.
Это возможно?

В нынешнем состоянии charon-nm не существует «настройки» для определения удаленной сети на другом конце туннеля. Клиент VPN по умолчанию предлагает полное адресное пространство и зависит от ответчика VPN, чтобы сузить селектор трафика до более конкретной удаленной подсети или подсетей. Вы можете увидеть это в Код Харона-нм. И это также упоминается в Strongswan вики для плагина NetworkManager.

Как видите, для туннеля нет конфигурации подсети. Мы позволяем администрации сервера выбирать подсеть (и); клиент всегда предлагает 0.0.0.0/0 для удаленной сети, а сервер сужает это число до настроенных подсетей.

Таким образом, если ответчик не сузит этот диапазон, весь одноадресный трафик, покидающий хост, будет направлен в туннель.

Однако есть маршрутизация Выход из этого при условии, что ответчик VPN назначает виртуальный IP. Он прикреплен к внешнему интерфейсу с помощью charon-nm. Это запрашивается virtual=yes настройка. Из приведенных данных это второй адрес вашего внешнего интерфейса.

Strongswan по умолчанию использует идентификатор таблицы маршрутизации 220 и правило политики маршрутизации с приоритетом 220 для вызова этой таблицы. Эта таблица фактически устанавливает источник пакетов, предназначенных для VPN, на виртуальный IP-адрес на вашей стороне, а затем они перехватываются правилами политики xfrm. Таким образом, вы можете обойти эти правила с более низкими (как при выполнении ранее) правилами приоритета и избежать совпадения с политиками xfrm.

Например, если вы хотите, чтобы в туннель входил только трафик на 192.168.0.1/16:

ip rule add from all to 192.168.0.1/16 table 220 priority 218
ip rule add table main priority 219

Первое правило захватывает ваш «желаемый» трафик и отправляет его в таблицу Strongswan, второе правило пропускает таблицу Strongswan в основную таблицу (именно сюда вы добавляете маршруты, если не указываете таблицу).

Или с одним отрицательным правилом:

ip rule add not from all to 192.168.0.1/16 table main priority 128

Вы можете автоматизировать добавление и удаление таких правил с помощью сетевых хуков в /etc/NetworkManager/dispatcher.d/ внутри ./pre-up.d/ и ./pre-down.d/, просто поместите туда исполняемые скрипты с режимом 0755, принадлежащие 'root'. $2 будет содержать vpn-pre-up или vpn-pre-down соответственно. $1 будет содержать имя внешнего интерфейса. $CONNECTION_FILENAME будет путь /etc/NetworkManager/system-connections/yourfilename.

Например:

#!/bin/bash
if [[ "$2" == "vpn-pre-up" ]]
then
  ip rule ...
fi

Чтобы узнать, не исходит ли маршрут к определенному адресу из таблицы 220

ip route get address/32

Вы не должны видеть таблицу 220, если она не проходит через VPN, иначе вы бы это сделали. Также VPN-маршрут показывает виртуальный IP-адрес как src, а в «основной» таблице обычный внешний IP-адрес отображается как src.

Отображение правил в таблице 220:

ip route show table 220

При многократном изменении настроек в VPN или в таблицах маршрутизации может быть полезно очистить кэшированные маршруты:

ip route flush cache

Также хорошо знать, что, возможно, включение VPN также отключит уже работающую связь на уровне IP, которая работает в «обычном тексте», которая должна проходить через VPN. Но если VPN-соединение с полным выбором трафика адресного пространства открывается ДО того, как вы обойдете маршрут, это также означает, что вы потеряете все работающие TCP-соединения в это время. Несмотря на то, что диспетчер NetworkManager вызывает свое предварительное подключение, правила и маршрут ip xfrm в таблице 220 уже задействованы, когда вызываются сценарии предварительной подготовки, поэтому вам нужно учитывать это и, возможно, установить обход маршрута таблицы 220 в время загрузки.