MyTetra Share
Делитесь знаниями!
Как использовать NordVPN в контейнере LXD
Время создания: 11.02.2022 21:28
Автор: alensav
Текстовые метки: Как использовать NordVPN в контейнере LXD
Раздел: MyTetra - INTERNET
Запись: alensav/MyTetra2/main/base/16446041247jfm5g4ubk/text.html на raw.githubusercontent.com

 Использование пакета snap Radeone2

Как запускать графические (X11) приложения в контейнере Kali LXD  

СЕН022020

Как использовать NordVPN в контейнере LXD

  • Автор Simos Xenitellis  в целом  , Linux  , с быстрым исходным кодом  , Planet Ubuntu  , безопасность  , ubuntu  , Ubuntu-gr

NordVPN — один из многих VPN-сервисов. Меня попросили посмотреть, как заставить его работать в контейнере LXD, и в результате я пишу этот пост. Я не рекламирую этот сервис, не использую партнерские ссылки и т.д. д. До сих пор NordVPN отказывался исправлять свой официальный Linux-клиент для работы в контейнере.

Установка официального клиента

Давайте установим официальный клиент в контейнер LXD. Создайте контейнер и поместите в него оболочку  . Затем загрузите пакет Deb и установите его. Начальный пакет Deb очень мал. В нем просто есть инструкции по настройке репозитория NordVPN в вашей системе. После того, как вы установите этот пакет, вы apt updateобновите список пакетов, а затем сможете установить фактический nordvpnпакет.

$ lxc запустить ubuntu: 18.04 nordvpn

Создание нордвпн

Запуск нордвпн

$ lxc ubuntu nordvpn

ubuntu@nordvpn:~$ wget https://repo.nordvpn.com/deb/nordvpn/debian/pool/main/nordvpn-release_1.0.0_all.deb

ubuntu@nordvpn:~$ sudo apt install -f ./nordvpn-release_1.0.0_all.deb

...

ubuntu@nordvpn:~$ sudo подходящее обновление

...

ubuntu@nordvpn:~$ sudo apt install -y nordvpn

...

NordVPN для Linux успешно установлен!

Чтобы начать, введите «логин nordvpn» и введите данные своей учетной записи NordVPN. Затем введите «nordvpn connect», и все готово! Если вам нужна помощь в использовании приложения, используйте команду nordvpn --help.

...

ubuntu@nordvpn:~$ nordvpn

Добро пожаловать в клиентское приложение NordVPN для Linux!

Версия 3.7.3

Сайт: https://nordvpn.com

Использование: nordvpn [глобальные параметры] команда [параметры команды] [аргументы…]

...

ubuntu@nordvpn:~$

Запуск официального клиента NordVPN

Давайте попробуем запустить официальный клиент NordVPN. Логинимся, а потом подключаемся. Не работает! Что-то не так.

ubuntu@nordvpn:~$ nordvpn login --username myusername@example.com --password mypassword

Добро пожаловать в NordVPN! Теперь вы можете подключиться к VPN, используя nordvpn connect.

ubuntu@nordvpn:~$ nordvpn подключается

Подключение к Германии #500 (de500.nordvpn.com)

транспорт закрывается

ubuntu@nordvpn:~$ nordvpn подключиться

Упс! Не удается связаться с системным демоном.

ubuntu@nordvpn:~$

Мы смотрим в /var/log/syslog. Вот оскорбительные строки. Официальный клиент вылетает из-за какой-то ошибки границ массива.

16 июня 19:59:31 nordvpn nordvpnd[1423]: отладка: Вт 16 июня 19:59:31 2020 УПРАВЛЕНИЕ: подключен к серверу управления в /var/run/nordvpn-openvpn.sock

16 июня 19:59:31 nordvpn nordvpnd[1423]: 2020/06/16 19:59:31 [ИНФО] Вт 16 июня 19:59:31 2020 УПРАВЛЕНИЕ: подключен к серверу управления в /var/run/nordvpn-openvpn .носок

16 июня 19:59:31 nordvpn nordvpnd[1423]: паника: ошибка выполнения: индекс вне диапазона [1] с длиной 1

16 июня 19:59:31 nordvpn nordvpnd[1423]: горутина 117 [работает]:

16 июня 19:59:31 nordvpn nordvpnd[1423]: nordvpn/daemon.ruleParsing(…)

16 июня, 19:59:31 nordvpn nordvpnd[1423]: #011/builds/nordvpn/apps-source/linux-app/src/daemon/vpn_ipv6.go:117

16 июня 19:59:31 nordvpn nordvpnd[1423]: nordvpn/daemon.( Ipv6).Disable(0xc000390844, 0x0, 0x0) 16 июня 19:59:31 nordvpn nordvpnd[1423]: #011/builds/nordvpn/apps -source/linux-app/src/daemon/vpn_ipv6.go:43 +0x6c7 16 июня 19:59:31 nordvpn nordvpnd[1423]: nordvpn/daemon.( OpenVPN).Start(0xc0004466e0, 0x2b89520, 0xc00042dec0, 0x18, 0xc00 , 0x18, 0x0, 0x0, 0x0, 0x0, …)

16 июня, 19:59:31 nordvpn nordvpnd[1423]: #011/builds/nordvpn/apps-source/linux-app/src/daemon/vpn_openvpn.go:159 +0xd11

16 июня 19:59:31 nordvpn nordvpnd[1423]: создано nordvpn/daemon.Connect

16 июня, 19:59:31 nordvpn nordvpnd[1423]: #011/builds/nordvpn/apps-source/linux-app/src/daemon/rpc.go:288 +0x882

16 июня 19:59:31 nordvpn systemd[1]: nordvpnd.service: основной процесс завершен, код = завершен, статус = 2/INVALIDARGUMENT

16 июня, 19:59:31 nordvpn systemd[1]: nordvpnd.service: Ошибка с результатом «код выхода».

16 июня, 19:59:36 nordvpn systemd[1]: nordvpnd.service: Время задержки обслуживания истекло, запланирован перезапуск.

Одна и та же ошибка появляется независимо от того, запускаете ли вы клиент с sudo -H, запускаете ли вы его в привилегированном контейнере. Что-то не так в этом официальном клиенте NordVPN.

Итак, что нам теперь делать? Судя по всему, их клиент основан на OpenVPN, поэтому воспользуемся клиентом OpenVPN напрямую.

Использование OpenVPN-клиента

Выходим из контейнера, удаляем его и создаем новый. Один без официального клиента.

ubuntu@nordvpn:~$ logout
$
lxc остановить nordvpn
$
lxc удалить nordvpn
$
lxc запустить ubuntu:18.04 nordvpn
Создание nordvpn
Запуск nordvpn
$
lxc ubuntu nordvpn
ubuntu@nordvpn:~$

Затем мы обновляем список пакетов и устанавливаем openvpnпакет.

ubuntu@nordvpn:~$ sudo apt update

ubuntu@nordvpn:~$ sudo apt install -y openvpn

OpenVPN требует файлы конфигурации для VPN-серверов. У NordVPN есть этот список в Интернете по адресу https://downloads.nordcdn.com/configs/archives/servers/ovpn.zipДавайте загрузим его. Это файл размером 21 МБ.

ubuntu@nordvpn:~$ wget https://downloads.nordcdn.com/configs/archives/servers/ovpn.zip

We unzip into the /etc/openvpn/client directory. The ZIP has folders, so we instruct unzip to ignore folders and dump them all in the given folder.

ubuntu@nordvpn:~$ sudo unzip -d /etc/openvpn/client/ -j ovpn.zip

We are ready to connect to some VPN server. But which one? We can select any. This page, https://nordvpn.com/servers/tools/ , will auto-detect the closest VPN server. Let’s assume the result is de505.nordvpn.com. We do not connect yet. Do the following section to avoid DNS leakage, then we connect on the next section.

Avoiding DNS leakage

By default, OpenVPN does not set the DNS server and keeps the existing DNS configuration. The result of this, is DNS leakage; that is, name resolutions do not happen through the VPN but use the local network.

What needs to happen, is to add the appropriate script to OpenVPN to configure the DNS when the VPN is established, and when the VPN is teared down.

We use Ubuntu 18.04 LTS in the container, therefore, we configure systemd-resolved for this. Here are the commands. We install the helper, and edit the .ovpn file to use the helper.

ubuntu@nordvpn:~$ sudo apt install openvpn-systemd-resolved

Then, edit the OpenVPN configuration file, in our case, /etc/openvpn/client/de505.nordvpn.com.tcp.ovpn and add the following lines,

script-security 2

up /etc/openvpn/update-systemd-resolved

down /etc/openvpn/update-systemd-resolved

down-pre

We are ready now to connect. Note that if you change server, you need to edit the corresponding file manually as above.

Making the connection

We are ready to make the connection.

ubuntu@nordvpn:~$ sudo openvpn --config /etc/openvpn/client/de505.nordvpn.com.tcp.ovpn

Tue Jun 16 21:17:17 2020 OpenVPN 2.4.4 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on May 14 2019

Tue Jun 16 21:17:17 2020 library versions: OpenSSL 1.1.1 11 Sep 2018, LZO 2.08

Enter Auth Username: myusername@example.com

Enter Auth Password: ***********

...

<14>Jun 16 21:17:42 update-systemd-resolved: Adding DNS Routed Domain .

<14>Jun 16 21:17:42 update-systemd-resolved: Adding IPv4 DNS Server 103.86.96.100

<14>Jun 16 21:17:42 update-systemd-resolved: Adding IPv4 DNS Server 103.86.99.100

...

Tue Jun 16 21:17:42 2020 Initialization Sequence Completed

Looks good. The VPN circuit is active until you hit Ctrl+C here to interrupt OpenVPN. You need to open a new terminal to the LXD container to use the VPN. We can see that the proper new DNS entries have been added to systemd-resolved.

$ lxc ubuntu nordvpn

ubuntu@nordvpn:~$ systemd-resolve --status

...

Link 7 (tun0)

Current Scopes: DNS

LLMNR setting: yes

MulticastDNS setting: no

DNSSEC setting: no

DNSSEC supported: no

DNS Servers: 103.86.96.100

103.86.99.100

DNS Domain: ~.

ubuntu@nordvpn:~$

Automating the setup with systemd

DuckHook in a comment below describes how to setup OpenVPN so that the NordVPN VPN can start automatically. Have a look at the comments for more. Thanks DuckHook!

Conclusion

The official NordVPN client does not work in a LXD container, and it appears that it’s just a bug that they know about and do not intend to fix. The developers did not envision the client to run in a container, nor did they test it. We work around this issue by installing the OpenVPN client and using it to connect to one of their VPN servers.

Simos Xenitellis

Share this:

  • Twitter  
  • Facebook  
  • Reddit  
  • Email  
  • Print  

Like this:

Loading...

Related

How to easily run graphics-accelerated GUI apps in LXD containers on your Ubuntu desktop

June 25, 2018

In "general"

Running Steam in a LXD system container

April 4, 2019

In "Linux"

How to run TeamViewer in LXD

February 20, 2018

In "Planet Ubuntu"

  •  apt container dns leakage Linux lxc lxd nordvpn openvpn vpn

 11 comments

Skip to comment form 

  •  
  • DuckHook on March 15, 2021 at 01:48 
  • #  
  • Reply

Hi Simos,

Your awesome tutorials have opened up whole worlds for me. So very much appreciated, and keep up the good work!

In my case, I needed the –configure flag to make this work, hence, sudo openvpn –configure /etc/openvpn/client/de505.nordvpn.com.tcp.ovp

Otherwise, it worked perfectly.

Another tip: invoke the VPN session with screen or tmux, then detach to free up the console. Works a treat. If you could post a tutorial on starting this as a service module, that would be so useful. Of course, this sort of constrains one to only a single geographical server, but that’s all that many of us need.

Really appreciate the thought, work and generosity that you put into this.

Loading...

  •  
  • DuckHook on March 15, 2021 at 02:02 
  • #  
  • Reply

Oops. That last was incomplete. Missing the final ‘n’. It’s also hard to see the double hyphen before “configure”:

sudo openvpn –configure /etc/openvpn/client/de505.nordvpn.com.tcp.ovpn

Loading...

  •  
  • DuckHook on March 15, 2021 at 02:04 
  • #  
  • Reply

keep making mistakes and there’s no ‘edit’ function for comments:

sudo openvpn --config /etc/openvpn/client/de505.nordvpn.com.tcp.ovpn


Loading...

  •  
  • Simos Xenitellis  on March 15, 2021 at 08:18
    Author 
  • #  
  • Reply

Thanks for the kind words!

I fixed the omission of --config.

I do not have a NordVPN account; I wrote this post thanks to a temporary account I was given at https://discuss.linuxcontainers.org/t/nordvpn-in-lxc-unpriv-priv-container-doesnt-work/8128/13
If you can work out the 
systemd configuration, feel free to post below. I suppose it should be easy as the OpenVPN package is aware of systemd.

Loading...

  •  
  • DuckHook on March 18, 2021 at 06:32 
  • #  
  • Reply

Simos posed me the challenge of creating a systemd service to autostart NordVPN at boot. After a bit of experimentation, I think the instructions below should work.

Follow Simos’s instructions up to just before downloading the zip file.

Step 1

We wish to unzip the ovpn files into a local directory. I made mine a directory nested one level below my local bin, but yours can be elsewhere. Just remember where you put it.

mkdir -R ~/bin/nordvpn

cd ~/bin/nordvpn

wget https://downloads.nordcdn.com/configs/archives/servers/ovpn.zip

unzip ovpn.zip


This will create two subfolders in ~/bin/nordvpn owned by the normal user. One is for TCP connections, the other is UDP. The reason I don’t like to unpack directly into /etc/openvpn/client is because I like to keep my system directories as clean as possible. And since NordVPN’s servers number almost six thousand at last count, I do not want all of those files spamming my etc directory. Moreover, there is another advantage to keeping the etc directory clean, which is discussed in Step 9 below. So instead, we will copy only the single server config that we wish, as per the instructions in Step 4 below.

Шаг 2

Чтобы автоматически подключить нашу VPN при запуске, мы должны указать имя пользователя и пароль из файла. Проблема в том, что Ubuntu хранит эти учетные данные в открытом виде. Поскольку имя пользователя и пароль для вашей основной учетной записи NordVPN являются конфиденциальными и никому не должны раскрываться, не рекомендуется хранить их в виде простого текста. К счастью, NordVPN предоставляет отдельный набор учетных данных службы для таких случаев использования, как наш. Это доступно на панели управления NordVPN. Если этот альтернативный набор имени пользователя/пароля когда-либо будет скомпрометирован (например, у вас украдут ноутбук), их можно заменить на NordVPN без необходимости менять имя пользователя или пароль вашей основной учетной записи. Инструкции находятся здесь: https://support.nordvpn.com/Connectivity/Linux/1047409422/How-can-I-connect-to-NordVPN-using-Linux-Terminal.htm

Допустим, наши специальные учетные данные:

Username: xxxxxxxxxxxxxxxxxxxxxx

Password: 0000000000000000000000


Используя эти учетные данные, мы создаем файл:

sudo nano /etc/openvpn/credentials


В нем должно быть всего две строки: имя пользователя Special Credentials в строке 1 и пароль в строке 2:

xxxxxxxxxxxxxxxxxxxxxx

0000000000000000000000


Сохранить и выйти.

Шаг 3

Найдите свой оптимальный сервер NordVPN, перейдя по ссылке Симоса выше. Продолжим использовать пример Симоса. Добавьте блок сценариев безопасности в /your/path/to/de505.nordvpn.com.tcp.ovpn, чтобы предотвратить утечку DNS. Напомним, что наши файлы находятся в нашей собственности в нашем домашнем каталоге, поэтому не вызывайте редактирование с помощью sudo.

Теперь найдите строку, содержащую:

auth-users-pass


Измените его на:

auth-user-pass /etc/openvpn/credentials


Сохранить и выйти

Шаг 4

Как root, скопируйте файл с общим именем, например client.conf, в соответствующий каталог etc:

sudo cp /your/path/to/de505.nordvpn.com.tcp.ovpn /etc/openvpn/client/client.conf


Шаг 5

И client.conf, и более ранний файл учетных данных хранятся в открытом виде. Для дополнительной безопасности сделайте их доступными только для root:

sudo chmod 600 /etc/openvpn/credentials /etc/openvpn/client/client.conf


Шаг 6

Хотя openvpn поддерживает systemd, я не смог создать рабочий синтаксис, учитывая мои элементарные навыки работы с systemd. Вместо этого я создал сервисный модуль systemd, который я назвал nordvpn.service, содержащий следующее содержимое:

[Unit]

Description=Connect to NordVPN

Requires=network.target

After=network-online.target


[Service]

Type=simple

ExecStart=/usr/sbin/openvpn --config /etc/openvpn/client/client.conf


[Install]

WantedBy=multi-user.target


Шаг 7

Включите сервисный модуль, чтобы он автоматически запускался при загрузке:

sudo systemctl enable nordvpn.service


Запустите службу OpenVPN:

sudo systemctl start nordvpn.service


Проверить состояние:

sudo systemctl status nordvpn.service


Шаг 8

Чтобы проверить, появляется ли он при загрузке, перезагрузите контейнер, затем снова проверьте статус:

sudo systemctl status openvpn


Проверьте VPN-соединение:

curl ipinfo.io


Шаг 9

Обратите внимание, что, предоставив один файл client.conf по умолчанию в каталоге etc, можно легко изменить VPN-сервер, повторив шаг 4, но используя другой файл .ovpn. Просто убедитесь, что он содержит блок сценария безопасности и указатель на файл учетных данных. Доступ к новому серверу можно получить, задействовав nordvpn.service с помощью команды перезапуска systemd.

Резюме

That’s it: so versatile, so many possibilities. Clone the container, change the VPN server, and one could have any number of different containers tunnelled to different VPN servers at once, limited only by bandwidth or your VPN provider’s device limits. Go nuts!

Loading...

  •  
  • Simos Xenitellis  on March 18, 2021 at 17:43
    Author 
  • #  
  • Reply

Thank you for taking the time and composing the instructions on how to automate the VPN with systemd!

I edited the instructions to add markdown markup.

I am adding a note in the post about your instructions.

Загрузка...

  •  
  • DuckHook on March 24, 2021 at 04:07 
  • #  
  • Reply

Hi Simos,

One further correction/adjustment:

The script block for preventing DNS leakage is missing an element. I had to add:

dhcp-option DOMAIN-ROUTE .

Особенно обратите внимание на конечную точку, которую легко пропустить.

Полный блок выглядит так:

script-security 2
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
dhcp-option DOMAIN-ROUTE .
вниз-предварительно

После добавления dhcp-опции утечки больше нет.

  •  
  • Альфо 30 апреля 2021 г., 16:20 
  • #  
  • Отвечать

Привет, у меня есть вопрос ( https://discuss.linuxcontainers.org/t/systemctl-disable-service-operation-not-permitted/10946  )

Я использую NordVPN в контейнере с LXC 3.0.3 и Ubuntu 18.04.
Я хотел бы отключить демон NordVPN с помощью «systemctl disable nordvpnd» от root.
Поискав в журналах, я нашел в «/var/log/syslog»:

systemd[1]: nordvpnd.socket: не удалось сбросить устройства.list: операция не разрешена
systemd[1]: nordvpnd.service: не удалось сбросить устройства.list: операция не разрешена

Можно ли исправить/заставить?

  •  
  • Симос Ксенителлис  2 мая 2021 г., 08:17
    Автор 
  • #  
  • Отвечать

Мое лучшее понимание ошибки Failed to reset devices.list: операция не разрешена , это предупреждение или ошибка, это безобидно (это действительно раздражает, но это все еще работает). Системные контейнеры используют ту же среду выполнения, что и ваша стандартная Ubuntu, и со стандартной Ubuntu на виртуальной машине или компьютере без операционной системы вы не получите это сообщение.

Либо это слишком большое изменение, чтобы сделать его во время выполнения, либо изменение должно произойти выше по течению вsystemd проекте, и по какой-то причине это либо невозможно сделать, либо потребуется время, чтобы такое изменение достигло образов Ubuntu.

Я считаю, что это должно было обсуждаться раньше, и в Интернете должна быть некоторая справочная информация по этому поводу.

Если у вас что-то не работает и вы думаете, что это связано с этим, то это следует исследовать. Можете ли вы убедиться, что вы не можете отключить VPN с помощью systemctl disable nordvpnd?

  •  
  • Альфо 30 апреля 2021 г., 16:57 
  • #  
  • Отвечать

s/auth-users-pass/auth-user-pass/ на шаге 3

  •  
  • Симос Ксенителлис  2 мая 2021 г., 08:08
    Автор 
  • #  
  • Отвечать

Спасибо, я исправил опечатку в комментарии на шаге 3.

оставьте ответ

Этот сайт использует Akismet для уменьшения количества спама. Узнайте, как обрабатываются данные ваших комментариев  .

ПОЖЕРТВОВАТЬ

Пожертвования не нужны, но приветствуются!

 

ПОДПИШИТЕСЬ НА БЛОГ ПО ЭЛЕКТРОННОЙ ПОЧТЕ

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

Адрес электронной почты

Подписаться

ПОСЛЕДНИЕ СООБЩЕНИЯ

  • Знакомство с терминалом Wio 19 ДЕКАБРЯ 2021 Г.
  • Нежное введение в фаззинг безопасности и Advanced Fuzzing League++ (afl++) 10 МАЯ 2021 Г.
  • Timg , программа для просмотра изображений в текстовом режиме и видеоплеер. 28 АПРЕЛЯ 2021 Г.
  • Как настроить несколько сайтов WordPress в контейнерах LXD 21 АПРЕЛЯ 2021 Г.
  • Как скомпилировать lxd-p2c для переноса физических серверов в контейнеры LXD 5 МАРТА 2021 Г.

НЕДАВНИЕ КОММЕНТАРИИ

  • Джарод к записи Как заставить контейнеры LXD получать IP из локальной сети с маршрутизируемой сетью
  • Майк к записи Использование образа контейнера LXD Kali
  • Ник Б. о запуске программного обеспечения X11 в контейнерах LXD
  • jairunet к записи Запуск программного обеспечения X11 в контейнерах LXD
  • Саймон о том, как настроить планшет для рисования HUION 430P на Ubuntu 20.04

СТРАНИЦА В ИНТЕРНЕТЕ

  • Προσωπική Σελίδα

ЛУЧШИЕ СООБЩЕНИЯ И СТРАНИЦЫ

  • Как запустить виртуальную машину Windows на LXD в Linux
  • Как выбрать контейнеры LXD получают IP-адреса из вашей сети с помощью macvlan
  • Как настроить планшет для рисования HUION 430P на Ubuntu 20.04
  • Как выбрать контейнеры LXD получают IP-адреса из интересующей сети с помощью моста
  • Как заставить контейнеры LXD получать IP из локальной сети с маршрутизируемой сетью
  • Запуск программного обеспечения X11 в контейнерах LXD
  • Как добавить в LXD как частную, так и общедоступную сеть с помощью cloud-init
  • Как легко запускать графические приложения с графическим ускорением в контейнерах LXD на рабочем столе Ubuntu
  • Как запустить Wine (с графическим ускорением) в контейнере LXD на Ubuntu
  • Как просмотреть файлы вашего контейнера LXD с хоста

Так же в этом разделе:
 
MyTetra Share v.0.64
Яндекс индекс цитирования