Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Оплата
Новости
Доставка
Загрузки
Форум
Настройка
    info@proxmox.su
    +7 (495) 320-70-49
    Заказать звонок
    Аспро: ЛайтШоп
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Аспро: ЛайтШоп
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Аспро: ЛайтШоп
    Телефоны
    +7 (495) 320-70-49
    Заказать звонок
    0
    0
    0
    Аспро: ЛайтШоп
    • +7 (495) 320-70-49
      • Назад
      • Телефоны
      • +7 (495) 320-70-49
      • Заказать звонок
    • info@proxmox.su
    • Москва, Бакунинская улица, 69с1
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Proxmox Виртуальная Среда
    [РЕШЕНО]OpenVPN в непривилегированном контейнере

    Форумы: Proxmox Виртуальная Среда, Proxmox Backup Server, Proxmox Mail Gateway, Proxmox Datacenter Manager
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    [РЕШЕНО]OpenVPN в непривилегированном контейнере, Proxmox Виртуальная Среда
     
    marianh
    Guest
    #1
    0
    13.12.2017 19:20:00
    Привет, возможно ли запустить OpenVPN сервер в контейнере без привилегий? У меня не работает /dev/net/tun. Я пробовал искать подсказки в Google, но ничего не вышло… (в контейнере с привилегиями всё работает отлично).
     
     
     
    Bill McGonigle
    Guest
    #2
    0
    13.09.2018 17:40:00
    У меня это работает (OpenVPN, без привилегий) только с: Код: lxc.mount.entry = /dev/net dev/net none bind,create=dir. Внутри контейнера я вижу: Код: # ls -l /dev/net/
    total 0
    crw-rw-rw- 1 nobody nogroup 10, 200 Sep 13 02:14 tun. OpenVPN жалуется на это: Код: openvpn[176]: Note: Cannot set tx queue length on tun0: Operation not permitted (errno=1) но работает всё равно. Я читал где-то, что значение по умолчанию 100 и он пытается установить 100, так что беспокоиться не о чём. Для systemd нужно: Код: cp /lib/systemd/system/openvpn-client\@.service /etc/systemd/system/ и закомментировать строку из копии в /etc/: Код: LimitNPROC=10, а потом: Код: systemctl daemon-reload, потому что не привилегированные контейнеры этого не могут сделать. Можно было бы создать директорию для перезагрузок, но мне было проще так развернуть. Также есть другие жалобы systemd: Код: systemd[1]: openvpn.service: Failed to reset devices.list: Operation not permitted
    systemd[1]: openvpn.service: Failed to set invocation ID on control group /system.slice/openvpn.service, что, кажется, не мешает нормальной работе. Мне интересно, что они пытаются сделать для сокращения неэффективной работы, но в плане работы всё нормально. В данный момент я маршрутизирую через один контейнер на другой сайт, а в других контейнерах настроены маршруты, чтобы обеспечить им подключение, и всё работает отлично. В будущем нужно сделать openvpn без root, используя sudo только для самых необходимых операций. Есть некоторая документация на openvpn.net о том, как это сделать, хотя пакет Debian всё ещё по умолчанию запускается от root.
     
     
     
    johnha
    Guest
    #3
    0
    13.08.2019 06:22:00
    Прошу прощения, что поднимаю старую тему, но я пытаюсь запустить OpenVPN сервер в контейнере без привилегий. Раньше я прекрасно это делал в контейнере Debian 9. Но в последнее время это не работает. Я пробовал шаги Билли выше и добавил: Code: lxc.mount.entry = /dev/net dev/net none bind,create=dir в файл конфигурации LXC. Но когда я пытаюсь: Code: chmod 0666 /dev/net/tun, он жалуется: Code: chmod: changing permissions of '/dev/net/tun': Operation not permitted. Конечно, если я переключаюсь на привилегированный контейнер, то команда chmod работает нормально. Раньше я добавлял эти две строки в файл конфигурации контейнера, но сейчас они, кажется, не работают: Code: lxc.cgroup.devices.allow = c 10:200 rwm
    lxc.hook.autodev = sh -c "modprobe tun; cd ${LXC_ROOTFS_MOUNT}/dev; mkdir net; mknod net/tun c 10 200; chmod 0666 net/tun" Если я обновляю файл конфигурации, включив следующие строки, OpenVPN сервер работает... Но я не могу подключиться к контейнеру (Debian 10 шаблон): Code: unprivileged: 0
    lxc.apparmor.profile: unconfined
    lxc.mount.entry = /dev/net dev/net none bind,create=dir Просто интересно, есть ли кто-нибудь, кто успешно включил tun в контейнере без привилегий. Использование шаблона Debian 10 дает тот же результат. Я пробовал это на хостах PVE 5 и PVE 6. Спасибо вам большое.
     
     
     
    wbumiller
    Guest
    #4
    0
    13.08.2019 11:11:00
    Автоматический хук для разработчиков не очень удобен при использовании не привилегированных контейнеров. Ни `modprobe`, ни `mknod` работать не будут. Строка `lxc.mount.entry` верная, но права доступа придется обновить на стороне хоста (так как вы используете узлы устройств из хоста). Поэтому, либо `chown` их на `100000:100000`, либо добавьте ACL: Код: `# setfacl -m u:100000:rw -m g:100000:rw /dev/net/tun`. После этого OpenVPN должно работать в не привилегированном контейнере. Можно использовать правило udev, чтобы автоматизировать это при загрузке хоста, или: Более "чистое" решение, более отделенное от хоста, — создать отдельную директорию `container-dev`, предназначенную для передачи устройств в не привилегированные контейнеры, которую использовать вместо ` /dev ` в строке `lxc.mount.entry`, где можно установить правильное владение (`100000:100000`) без влияния на записи в хост `/dev`, и где теоретически можно просто хранить файлы там постоянно вместо использования tmpfs, так что вам не придется беспокоиться о создании их при загрузке (хотя заполнение tmpfs при загрузке намного проще, чем написание правил udev, так что... ;-) ). Кстати, `/dev/net/tun` мы, вероятно, добавим флаг функциональности (как мы это сделали для fuse) в будущем.
     
     
     
    johnha
    Guest
    #5
    0
    15.08.2019 15:29:00
    Привет, Вольфганг! Спасибо большое за такой вдумчивый ответ. Мне пришлось потратить некоторое время на изучение вещей, о которых ты упомянул. Похоже, у меня есть пара вариантов. Давай посмотрим, правильно ли я тебя понял. Я могу установить права доступа классическим способом с помощью `chown` или добавив соответствующие ACL для `/dev/net/tun`. Но оба типа прав будут сброшены при перезагрузке хоста (так как /dev создается заново при загрузке). Чтобы система автоматически устанавливала правильные права доступа при загрузке, я могу написать правило udev. (Или, предположим, я могу добавить `/bin/chown 100000:100000 /dev/net/tun` в crontab?) Но ты предлагаешь, что вместо установки прав доступа на /dev хоста и одновременного достижения большей изоляции между хостом и контейнером(ами), я могу создать устройство `tun` в новом месте, например, `/devcontainer` на хосте. Поскольку /devcontainer не будет пересоздан при загрузке хоста, права доступа будут постоянными, и мне не придется писать правило udev. Если я хочу использовать это решение, будет ли это просто вопросом этого?

    Код:
    mkdir -p /devcontainer/net
    mknod /devcontainer/net/tun c 10 200
    chown 100000:100000 /devcontainer/net/tun

    Еще раз спасибо!
     
     
     
    wbumiller
    Guest
    #6
    0
    16.08.2019 08:33:00
    Это должно быть достаточно (если только по какой-то причине ваша `/` смонтирована с опцией `nodev`). Вам также нужно будет адаптировать строки `lxc.mount.entry` для привязки этого нового файла. `lxc.mount.entry = /devcontainer/net/tun dev/net/tun none bind,create=dir`
     
     
     
    johnha
    Guest
    #7
    0
    22.11.2019 18:33:00
    Привет, Вольфганг! Просто хотел обновить информацию и сказать, что OpenVPN-сервер работает отлично в не привилегированном LXC-контейнере (шаблон Debian 10) после того, как применил твои советы. Огромное тебе спасибо за помощь!
     
     
     
    rexkani
    Guest
    #8
    0
    20.05.2020 10:34:00
    Привет, ребята! Я пошёл по пути "devcontainer" и разобрался с разрешениями, вижу мой TAP-интерфейс, созданный "softether", в контейнере. Но это не решило мою предыдущую проблему, как я писал в прошлом посте: https://forum.proxmox.com/threads/softether-vpn-container-not-passing-to-host.54346/#post-276242.  Проблема в том, что я не вижу TAP-интерфейс на моём Proxmox хосте, и TAP-интерфейс, кажется, не подключён к мостику с другими интерфейсами.  Пожалуйста, помогите!
     
     
     
    pharpe
    Guest
    #9
    0
    15.07.2020 06:07:00
    У меня та же проблема, не могу заставить OpenVPN работать в контейнерах Ubunbu и CentOS LXC. Я выполнил следующее на хосте: Код: mkdir -p /devcontainer/net
    mknod /devcontainer/net/tun c 10 200
    chown 100000:100000 /devcontainer/net/tun Затем обновил /etc/pve/lxc/102.conf с Кодом: lxc.mount.entry = /devcontainer/net/tun dev/net/tun none bind,create=dir Когда я пытаюсь перезапустить контейнер, он не запускается. Такое же поведение для контейнеров Ubunbu и CentOS. Если я удаляю Код: lxc.mount.entry = /devcontainer/net/tun dev/net/tun none bind,create=dir, контейнеры запускаются нормально.
     
     
     
    oguz
    Guest
    #10
    0
    15.07.2020 11:06:00
    Попробуй так: lxc.mount.entry: /dev/net dev/net none bind,create=dir
     
     
     
    pharpe
    Guest
    #11
    0
    15.07.2020 16:00:00
    Спасибо за быстрый ответ. Когда я использую эту команду, контейнер запускается, но не устраняется ошибка "Cannot open TUN/TAP dev /dev/net/tun: error". Вот что я получаю при попытке запуска OpenVPN в докер-контейнере. Это происходит в LXC на Ubuntu 18.04.4 и CentOS 7 LXC идентично. Код: Используется OpenVPN-провайдер: PIA
    Запуск OpenVPN с конфигурацией US West.ovpn
    Установка учетных данных OPENVPN...
    Добавление маршрута к локальной сети 192.168.1.0/24 через 172.17.0.1 dev eth0
    Wed Jul 15 13:33:27 2020 OpenVPN 2.4.7 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Sep 5 2019
    Wed Jul 15 13:33:27 2020 library versions: OpenSSL 1.1.1c  28 May 2019, LZO 2.10
    Wed Jul 15 13:33:27 2020 NOTE: the current --script-security setting may allow this configuration to call user-defined scripts
    Wed Jul 15 13:33:27 2020 TCP/UDP: Preserving recently used remote address: [AF_INET]xxx.xxx.xx.xxx:1198
    Wed Jul 15 13:33:27 2020 UDP link local: (not bound)
    Wed Jul 15 13:33:27 2020 UDP link remote: [AF_INET]xxx.xxx.xxx.xxx:1198
    Wed Jul 15 13:33:27 2020 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
    Wed Jul 15 13:33:28 2020 [11b9e54dc6eaeece62a2e146f9e1a74b] Peer Connection Initiated with [AF_INET]xxx,xxx,xx,xxx:1198
    Wed Jul 15 13:33:29 2020 ERROR: Cannot open TUN/TAP dev /dev/net/tun: No such file or directory (errno=2)
    Wed Jul 15 13:33:29 2020 Exiting due to fatal error
     
     
     
    oguz
    Guest
    #12
    0
    15.07.2020 16:05:00
    Ой, извини, я, видимо, ошибся. Раз ты запустил mknod на /devcontainer/net/tun, тебе нужно указывать это. То есть, должно быть так: lxc.mount.entry: /devcontainer/net dev/net none bind,create=dir
     
     
     
    pharpe
    Guest
    #13
    0
    15.07.2020 16:48:00
    Контейнер не запускается из-за этой строки в /etc/pve/lxc/102.conf. Вот весь файл:

    ```
    #lxc.mount.entry%3A /dev/net/tun dev/net/tun none bind,create=dir
    #lxc.mount.entry%3A /dev/net dev/net none bind,create=dir
    arch: amd64
    cores: 1
    hostname: openvpn
    memory: 1024
    net0: name=Plex,bridge=vmbr0,firewall=1,hwaddr=BA:32:05:27:7C:89,ip=dhcp,type=v$
    ostype: ubuntu
    rootfs: local-zfs:subvol-102-disk-0,size=16G
    swap: 512
    unprivileged: 1
    lxc.mount.entry: /storage/data storage none bind,create=dir, optional 0 0
    lxc.apparmor.raw: mount,
    lxc.mount.entry: /devcontainer/net dev/net none bind,create=dir
    ```

    Запуск в режиме отладки:

    ```
    Code: lxc-start -n 102 -F -l DEBUG -o /tmp/lxc-102.log
    ```

    Вижу это:

    ```
    Code: lxc-start 102 20200715143755.406 ERROR    conf - conf.c:mount_entry:1855 - No such file or directory - Failed to mount "/devcontainer/net" on "/usr/lib/x86_64-linux-gnu$
    lxc-start 102 20200715143755.406 ERROR    conf - conf.c:lxc_setup:3329 - Failed to setup mount entries
    lxc-start 102 20200715143755.406 ERROR    start - start.c:do_start:1231 - Failed to spawn container "102"
    lxc-start 102 20200715143755.406 ERROR    sync - sync.c:__sync_wait:41 - An error occurred in another process (expected sequence number 5)
    lxc-start 102 20200715143755.406 DEBUG    network - network.c:lxc_delete_network:3693 - Deleted network devices
    lxc-start 102 20200715143755.406 ERROR    start - start.c:__lxc_start:1957 - Failed to spawn container "102"
    ```

    Файл есть на хосте:

    ```
    Code: root@pharpe:/devcontainer/net# ls -al
    total 2
    drwxr-xr-x 2 root   root         3 Jul 14 22:02 .
    drwxr-xr-x 3 root   root         3 Jul 14 22:02 ..
    crw-r--r-- 1 100000 100000 10, 200 Jul 14 22:02 tun
    ```
     
     
     
    pharpe
    Guest
    #14
    0
    16.07.2020 00:04:00
    Похоже, я в итоге понял, в чём дело: проблема с Docker. Попробовал установить OpenVPN напрямую в LXC, а не в контейнере Docker, и заработало.
     
     
     
    oguz
    Guest
    #15
    0
    16.07.2020 13:37:00
    Отлично, я гадал, почему у тебя это не работало, ведь у меня есть пара контейнеров с такой же конфигурацией. Рад, что твоя проблема решилась!
     
     
     
    Страницы: 1
    Читают тему
    +7 (495) 320-70-49
    info@proxmox.su

    Конфиденциальность Оферта
    © 2026 Proxmox.su
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры