Как то обратился ко мне товарищ с вопросом, а не создавал ли я vpn подключение внутри докер контейнера, на что я естественно сказал, что у меня и задачи то такой никогда не было. Тогда быстро нагуглил вариант со следующими параметрами "--net=host --privileged" и у него все заработало и я благополучно забыл про этот случай, но тут недавно вспомнил и решил разобраться, как обойтись без «privileged».
В общем я конечно снова полез в гугл и нашел вот эту
ссылку.
Там рассказывается про параметр
--cap-add
(Add Linux capabilities) и значение которое ему нужно передать
NET_ADMIN, ну и если у нас pptp соединение то неплохо бы еще прокинуть
/dev/ppp устройство и загрузить модуль ядра
ppp_generic
иначе выдаст такую ошибку:
/usr/sbin/pppd: Please load the ppp_generic kernel module.
В итоге мы получаем следующую команду запуска контейнера
docker run -it --rm --cap-add=NET_ADMIN --device=/dev/ppp --net=host ubuntu bash
Устанавливаем
pptp-linux и
net-tools в докере
apt update && apt install pptp-linux net-tools -y
Создаем конфиг pptp подключения
cat > VPN <<EOL
pty "pptp <SERVER> --nolaunchpppd"
name <USERNAME>
password <PASSWORD>
remotename PPTP
require-mppe-128
lock
noauth
nobsdcomp
nodeflate
refuse-pap
refuse-eap
refuse-chap
refuse-mschap
ipparam vpn
EOL
Подключаемся
pon VPN
Вот и все, если у вас openvpn там маленько другой путь, но я думаю вы разберетесь!
Закидываешь конфиг openvpn и запускаешь