Как автоматически подключиться к 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.
Откройте терминал
Тип
nm-connection-editor
Выберите сетевое подключение, к которому вы хотите подключиться автоматически.
Щелкните значок шестеренки, чтобы открыть настройки для этого подключения.
Перейдите на вкладку Общие
Включите
Automatically connect to VPN
вариант и выберите VPN в раскрывающемся меню справаНажмите Сохранить
Если вы предпочитаете терминалы, вы можете использовать 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 (поскольку у меня есть еще один для виртуальной машины):
- Создать
99-vpn-up.conf
в/etc/NetworkManager/dispatcher.d/
- Сделать его исполняемым
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