Как автоматически подключиться к VPN с помощью Network-Manager

У меня есть рабочее соединение VPN. Теперь я хочу, чтобы это VPN-соединение автоматически активировалось, когда я нахожусь в определенной беспроводной сети. Есть ли ненавязчивый графический способ с помощью апплета network-manager-applet? Если я правильно помню, это работало некоторое время и больше не работает.

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

Используемая программа CLI - это vpnc с включенной гибридной аутентификацией (cisco VPN-client-совместимый) от PPA sroecker.

РЕДАКТИРОВАТЬ: я могу 'попробовать ответы больше (из-за eduroam), и так как ни один ответ, кажется, не набирает большинство голосов, я просто оставлю это без ответа пока пока один не проголосовал, тогда я приму это.

12 ответов

Решение, предложенное con-f-use должен работать, но не работает из-за давней ошибки:

https://bugs.launchpad.net/ubuntu/+source/network-manager/+bug/280571

Есть обходные пути, хотя. Для последних версий NetworkManager, есть возможность командной строки, nmcli, который можно отредактировать и сохранить как что-то вроде /etc/NetworkManager/dispatcher.d/vpn-up:

#! /bin/bash

REQUIRED_CONNECTION_NAME="<name-of-connection>"
VPN_CONNECTION_NAME="<name-of-vpn-connection>"


activ_con=$(nmcli con status | grep "${REQUIRED_CONNECTION_NAME}")
activ_vpn=$(nmcli con status | grep "${VPN_CONNECTION_NAME}")
if [ "${activ_con}" -a ! "${activ_vpn}" ];
then
    nmcli con up id "${VPN_CONNECTION_NAME}"
fi

[Я не проверял это - пожалуйста, не стесняйтесь тестировать и редактировать в соответствии с результатами]

См. Https://wiki.archlinux.org/index.php/NetworkManager#Use_dispatcher_to_connect_to_a_vpn_after_a_network-connection_is_established более подробную информацию.

В Ubuntu Trusty 14.04 VPN автоматическое подключение магазина на GUI на отдельных сохраненных настройках Wi-Fi. Настройки системы - Сеть - проверить интересующий Wi-Fi или Lan - Настройки (вкладка Общие) - выбрать "Автоматическое подключение к VPN... "

Мне удалось заставить это работать на Ubuntu 20.04, используя nm-connection-editor. По какой-то причине эта опция больше не отображается ни в пользовательских интерфейсах Wi-Fi/Ethernet, ни в пользовательских интерфейсах конфигурации VPN.

  1. Откройте терминал

  2. Тип nm-connection-editor

  3. Выберите сетевое подключение, к которому вы хотите подключиться автоматически.

  4. Щелкните значок шестеренки, чтобы открыть настройки для этого подключения.

  5. Перейдите на вкладку Общие

  6. Включите Automatically connect to VPN вариант и выберите VPN в раскрывающемся меню справа

  7. Нажмите Сохранить

Если вы предпочитаете терминалы, вы можете использовать nmcliЯ сделал это с помощью следующих команд:

Сначала найдите и откройте VPN-соединение, которое вы хотите обновить

➜  ~ nmcli c show --active |grep vpn
MyVPN           115ae594-aa91-4d13-8c92-421af245f935  vpn     wlp61s0         
➜  ~ nmcli c edit MyVPN

Это откроет приглашение nmcli, отсюда вы можете запросить значения и установить их следующим образом:

===| nmcli interactive connection editor |===
...
nmcli> print connection.autoconnect
connection.autoconnect: no
nmcli> set connection.autoconnect yes
nmcli> save persistent
Saving the connection with 'autoconnect=yes'. That might result in an immediate activation of the connection.
Do you still want to save? (yes/no) [yes] yes
Connection 'MyVPN' (115ae594-aa91-4d13-8c92-421af245f935) successfully updated.

И ты должен быть готов!

Если я правильно помню, это работало некоторое время и больше не работает.

  • Это может быть очевидно, но иногда я не думаю об этом. Вы пытались переустановить как:

    sudo apt-get purge network-manager-vpn sudo apt-get установить network-manager-vpnc Тогда:введите описание здесь

Теперь я хочу, чтобы это VPN-соединение автоматически активировалось, когда я нахожусь в определенной беспроводной сети.

  • Существует способ подавления сообщений типа "невозможно подключиться", когда ваши пользователи находятся в неправильной сети, но не могут вспомнить, как все прошло. Я не вижу другого способа автоматического подключения графическим способом. Может быть, вам придется написать скрипт для подключения, когда вы находитесь в указанной сети WLAN.

Надеюсь, что это помогло.

Я могу подтвердить это следующее решение, работающее на меня. Я использую Ubuntu 14.04 LTS.

Я пошел к значку выключения, а затем настройки системы.

Когда откроется экран настроек, я перешел в "Сеть" и сеть WiFi, с которой я был связан. На одной стороне названия сети есть маленькая стрелка.

Нажмите на этот значок, и вы должны увидеть опцию "настройки" или "опции" (или что-то подобное) здесь:

Когда откроется следующее окно, просто перейдите на вкладку "Общие", и вы увидите опцию, которая дает вам возможность автоматического подключения к VPN. Выберите VPN, которую вы хотите подключить при подключении к этому WiFi, и бум! Каждый раз, когда вы подключаетесь к этой сети, Ubuntu также подключает вас к этому VPN.:)

Для меня это работает. Я надеюсь, что это работает и для всех остальных. Не требует никакого текстового редактора, редактора кода или чего-либо еще

Хотя списки страниц руководства nmcli con status как действительная команда, приведенное выше решение предоставлено Hugo Heden возвращает ошибку "Error: Object 'status' is unknown, try 'nmcli help'"

Я использую nmcli 1.2.2 (nmcli -v) и я проверил и изменил следующее для /etc/NetworkManager/dispatcher.d/vpn-up и это сработало как шарм.

#! /bin/bash

REQUIRED_CONNECTION_NAME="<name-of-connection>"
VPN_CONNECTION_NAME="<name-of-vpn-connection>"


default_conn=$(nmcli con show --active | grep "${REQUIRED_CONNECTION_NAME}")
vpn_conn=$(nmcli con show id | grep "${VPN_CONNECTION_NAME}")
if [ "${default_conn}" -a ! "${vpn_conn}" ];
then
    nmcli con up id "${VPN_CONNECTION_NAME}"
fi

Примечание: вы можете использовать nmcli con show чтобы увидеть все имена подключений, поскольку они не всегда совпадают с указанными в графическом интерфейсе сетевых подключений

Вы можете добавить uuid профиля VPN, используя поле "Secondaries" в основном соединении.

Например, /etc/NetworkManager/system-connections/Wired

[connection]
id=Wired
uuid=95ad54f8-9d72-3e65-a4a7-b106aa310eed
type=ethernet
secondaries=66ecf287-8b26-413b-86f2-caca7608bc67;

Ссылка https://developer.gnome.org/NetworkManager/stable/nm-settings.html

Вам больше не нужны диспетчерские скрипты! В 14.04 (Trusty Tahr) вам просто нужно выполнить следующие шаги после настройки опции автоподключения в графическом интерфейсе NetworkManager.

Храните vpn-секреты прямо в файле конфигурации для VPN-подключения под /etc/NetworkManager/system-connections/YourVPNConnectionName,

Вы можете добиться этого, установив IPSec secret-flags=0 а также Xauth password-flags=0 в конфигурационном файле. Затем перейдите в графический интерфейс NetworkManager и снова сохраните настройки VPN-соединения. Теперь в файле конфигурации должен присутствовать раздел с именем [vpn-secrets]. Перепроверьте это, и автоподключение должно работать сейчас!

Обновление ответа Хьюго. Хорошо работает на Ubuntu 20.04

#! /bin/bash

REQUIRED_CONNECTION_NAME="<name-of-connection>"
VPN_CONNECTION_NAME="<name-of-vpn-connection>"


activ_con=$(nmcli c s --active | grep "${REQUIRED_CONNECTION_NAME}")
activ_vpn=$(nmcli c s --active | grep "${VPN_CONNECTION_NAME}")
if [ "${activ_con}" -a ! "${activ_vpn}" ];
then
    nmcli con up id "${VPN_CONNECTION_NAME}"
fi

Используйте следующий сценарий Python Gist # 1547663.

Первый параметр сценария - это имя VPN-подключения в NetworkManager, а второй - разделенные запятыми имена сетей, которые следует игнорировать (например, использование VPN-подключения в домашних условиях бесполезно).

Пример установки и запуска при загрузке:

git clone git://gist.github.com/1547663.git /home/user/autovpn/
echo "python /home/user/autovpn/autovpn.py 'myvpn' 'Auto homenetwork,Auto worknetwork' > /var/log/autovpn.log&" > /etc/rc.local
/etc/rc.local

Теперь, если вы подключаетесь к сети (Wi-Fi или Ethernet), он также попытается настроить VPN-подключение.

Все вышеупомянутые решения могут не работать должным образом с WireGuard VPN, по крайней мере, не настолько, насколькоDebian 12 BookwormсKDEтак как все еще есть открытые проблемы, потому что WireGuard - этоdeviceнеvpnнасколько я понял:

Поэтому я сделал сценарий bash, вдохновленный ответами здесь для Wireguard, который также позволяет одновременно определять несколько WLAN и «параноидальный режим». Я специально тестирую только один интерфейс WLAN (поскольку у меня есть еще один для виртуальной машины):

  1. Создать99-vpn-up.confв/etc/NetworkManager/dispatcher.d/
  2. Сделать его исполняемымchmod +x 99-vpn-up.conf

Баш-скрипт:

      #!/bin/bash

# Configuration (change these)
WLAN="wl...."           # Interface name of WLAN adapter (find it with 'ip a'...)
VPN_NAME="FOOBAR..."        # VPN Connection name (Name from Network Manager)
CON="HandyHotspot|PublicWLAN|...."      # Connection names, separated multiple connection names with a pipe '|'

# Get parameters from the dispatcher (see 'man NetworkManager-dispatcher' for all the different states)
interface=$1 status=$2


if [ "$interface" = "$WLAN" ]; then
    # If the interface is the WLAN adapter, check the status
    case $status in
    up)
        # In case the interface got started, check if it is one of our defined WLAN Connections
        if nmcli con show --active | grep -Eqs "$CON"; then
            # Start the VPN Connection if it is not already running
            if ! nmcli con show --active | grep -qs "$VPN_NAME"; then
                 nmcli connection up id "$VPN_NAME"
            fi
        fi
    ;;
    down)
        # In case the interface got stopped, disable the VPN connection if it is active
        # In the case from switching from a defined WLAN to an undefined, this script is run twice 
        #so it 'should' not start another VPN Connection
        if nmcli con show --active | grep -qs "$VPN_NAME"; then
            nmcli connection down id "$VPN_NAME"
        fi
    ;;
    esac
fi

# "Paranoid Mode" :-) 
# Uncomment the following lines if you want to restart the VPN in case it 
# gets deactivated while still connected to a WLAN defined above - basicall disables non-VPN WLANs
# Wireguard is a "device" so "down" has to be used, for other VPNs "vpn-down" has to be used (did not test)

#if [ "$interface" = "$VPN_NAME" ]; then
#   case $status in
#   down)
#       # Restart the VPN again in case on of the defined WLANs is still active
#       if nmcli con show --active | grep -Eqs "$CON"; then
#           nmcli connection up id "$VPN_NAME"
#       fi
#   ;;
#   esac
#fi

Другие вопросы по тегам