https://github.com/angristan/openvpn-install
First, get the script and make it executable:
curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
chmod +x openvpn-install.sh
Then run it:
./openvpn-install.sh
https://github.com/angristan/openvpn-install
First, get the script and make it executable:
curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
chmod +x openvpn-install.sh
Then run it:
./openvpn-install.sh
Docker – это платформа, позволяющая создавать, распространять и управлять специальными контейнерами, которые могут содержать в себе определенный набор ПО или даже целую ОС, но запускаются в изолированной среде, что позволяет безопасно запускать приложения без риска навредить основной ОС в случае ошибки или сбоя приложения. Эта система чем-то напоминает виртуализацию, но контейнеры не виртуализируют оборудование, поэтому куда менее требовательны к ресурсам.
Я познакомился с Docker, когда мне нужно было протестировать одно приложение с гитхаба, написанное на Python с использованием кучи библиотек. Мне не хотелось устанавливать столько всего себе в ОС и тут в описании я увидел упоминание Docker. Разобравшись в теме, я понял, что Docker дает возможность запустить это приложение из готового образа, внутри которого уже содержится нужная версия Python и всех зависимостей приложения, что гарантирует 100% работоспособность приложения и позволит в будущем легко удалить контейнер и образ, не оставляя следов в системе. Хочу добавить, что на гитхабе вы можете встретить как приложения, образы для которых официально распространяются через Docker Hub и могут быть установлены с помощью всего одной команды, так и приложения, чьи образы, которые нужно компилировать самому (об этом позже). Существуют готовые образы Docker для множества известных приложений, например, можно в пару кликов развернуть веб-сервер с mysql или vpn сервер. Docker значительно упрощает развертывание сложных приложений.
Чтобы использовать самые свежие версии Docker, я рекомендую устанавливать его из его собственного репозитория. Процесс подключения и установки будет описан для Ubuntu с указанием отдельных команд для разных версий, если они отличаются.
Обновляем кэш репозиториев:
sudo apt update
Устанавливаем пакеты, позволяющие apt
загружать пакеты по защищенному протоколу HTTPS:
sudo apt install apt-transport-https ca-certificates curl software-properties-common
Добавляем в свою ОС GPG ключ Docker:
На Ubuntu 18 и 20:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
На Ubuntu 22:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Добавляем в список источников репозиторий Docker:
На Ubuntu 18:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
На Ubuntu 20:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
На Ubuntu 22:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Обновляем базу репозиториев, чтобы получить информацию о пакетах Docker из нового источника:
sudo apt update
Устанавливаем Docker:
sudo apt install docker-ce
Проверить статус процесса Docker можно следующей командой:
sudo systemctl status docker
Если все хорошо, вы должны увидеть примерно следующее:
По умолчанию, для использования команды docker
требуются права sudo
. Вы можете избежать этого, если добавите своего пользователя в группу docker. Например, ваш пользователь “alex”, тогда добавить его в группу docker можно так:
sudo usermod -aG docker alex
После этого вам придется перелогиниться в системе.
Если вы введете команду docker
, вы получите подсказку о доступных командах. Для каждой команды можно ввести docker COMMAND --help
чтобы увидеть список доступных аргументов.
Работа с образами Docker:
Список установленных образов:
docker images
Это образы, которые вы уже загрузили и из которых можете создавать контейнеры.
Вы также можете искать образы в Docker Hub прямо в консоли, например поищем Apache:
docker search apache
В результатах поиска вы увидите все доступные образы, связанные с Apache и сможете загрузить их себе.
Загружать образы нужно командой docker pull
. Пример для официального образа Apache:
docker pull httpd
Запускать контейнеры из образов можно по как по IMAGE ID, так и по названию образа (REPOSITORY), которые указаны в списке образов по команде docker images
.
Небольшие open-source проекты могут не распространять готовый образ в Docker Hub, но могут иметь Dockerfile, который позволит вам создать образ. Для этого вам потребуется клонировать репозиторий к себе и перейти в папку репозитория, например:
git clone https://github.com/test/test && cd test
Затем останется только собрать образ с помощью команды:
docker build -t test .
Обычно инструкции по сборке образа присутствуют в описаниях репозиториев.
Удалить любой образ можно с помощью следующей команды с указанием ID образа:
docker rmi f75571d82318
Работа с контейнерами Docker:
Вы можете создать контейнер из образа и он будет сразу запущен:
docker run f75571d82318
Список работающих в данный момент контейнеров можно увидеть по команде:
docker ps
Также можно посмотреть список всех контейнеров, включая не активные:
docker ps -a
При желании, запуская контейнер из образа, вы можете дать ему имя, чтобы потом обращаться по нему:
docker run --name apache f75571d82318
Если у вас интерактивный контейнер, т.е. позволяющий выполнять команды внутри него, то вы можете запустить его с ключами -it
, включающими интерактивный режим:
docker run --name apache -it f75571d82318
После запуска, ваша командная строка изменится, сообщая что вы находитесь внутри контейнера с указанием его ID. Выглядит это примерно так:
root@e2f464551004:/#
Если у вас уже запущен контейнер, вы все равно можете попасть внутрь, для этого используйте команду:
docker exec -it apache /bin/bash
Здесь я использовал имя контейнера, но если вы не указывали его при запуске, используйте ID контейнера. Это касается и других команд с обращением к контейнерам далее по тексту.
Обратите внимание, что изменения, которые вы вносите в интерактивном режиме, распространяются только на контейнер, в котором вы это делаете. На его исходный образ это не влияет.
Если вы создали контейнер из образа с помощью docker run
и потом он был остановлен вами или завершил свою работу, то запускать его снова нужно будет уже другой командой:
docker start apache
Остановить контейнер можно с помощью команды:
docker stop apache
Контейнеры также можно перезапускать:
docker restart apache
Если вам больше не нужен контейнер, удалить его можно так:
docker rm apache
Обратите внимание, это удалит контейнер, но образ, из которого он был создан, все еще будет находиться в вашей системе.
Если ваш контейнер должен выполнить какую-то задачу, после чего больше не понадобится, вы можете запустить его из образа с ключем --rm
:
docker run --rm test
Тогда контейнер будет создан из образа, запущен и будет автоматически удален, когда завершит свою задачу.
Если в процессе работы, контейнер создает какие-либо файлы или отчеты, которые вам нужны, вы можете сделать так, чтобы эти отчеты сохранялись вне контейнера. Для этого вам нужно знать директорию, куда эти файлы сохраняются внутри контейнера. Эта информация, в зависимости от приложения, может быть указана в описании, например на гитхабе или вы можете поискать внутри контейнера сами с помощью интерактивного режима. Затем вам нужно создать директорию, которая будет примонтирована к нужной директории в контейнере.
Пример: вы находитесь в директории /home/alex/project1
(будем считать ее рабочей директорией) и создали в ней директорию reports
для получения отчетов из контейнера test
. Также вы узнали, что отчеты внутри контейнера складываются в директорию /app/reports
. Тогда вам остается лишь запустить контейнер, добавив специальный аргумент -v
с указанием сначала директории в вашей ОС, затем директории внутри контейнера (через двоеточие):
docker start -v "$PWD/reports:/app/reports" test
Таким образом, контейнер test
выполнит свою работу и отчет, который он обычно сохраняет внутри себя в /app/reports
, попадет в вашу основную ОС, в директорию /home/alex/project1/reports
Этот метод я постоянно использую в своих проектах и это работает как для существующих контейнеров, запускаемых с помощью docker start
, так и для контейнеров, создаваемых из образа через docker run
.
При запуске контейнеров вы также можете передавать аргументы самому приложению внутри контейнера, обычно это указывается в описании. Таким образом, ваша команда создания и запуска контейнера из образа может выглядеть следующим образом:
docker run --rm -v "$PWD/reports:/app/reports" test "google.com" --proxy "5.5.5.5.5:3128" --pdf
apt update
apt install pptpd
Теперь в файле /etc/pptpd.conf необходимо найти и отредактировать следующие строки, предварительно раскомментировав их:
localip 10.100.0.1
remoteip 10.100.0.100-200
Затем Вам необходимо настроить авторизацию для PPTP путем добавления пользователей и их паролей. Просто добавьте их в /etc/ppp/chap-secrets:
# client server secret IP addresses
user pptpd password123 *
В файле /etc/ppp/pptpd-options находим настройки DNS, меням IP на сервера Google:
ms-dns 8.8.8.8
ms-dns 8.8.4.4
Теперь Вы можете запустить PPTP-демон:
service pptpd restart
Очень важно включить форвардинг IP на PPTP-сервере. Это позволит пересылать пакеты между публичным IP и приватными IP, которые мы настроили при помощи PPTP. Отредактируем /etc/sysctl.conf:
net.ipv4.ip_forward = 1
Для применения изменений выполните команду:
sysctl -p
Перед тем, как изменить этот файл, мы должны найти публичный интерфейс сети. Для этого наберите команду:
ip route | grep default
Публичный интерфейс должен следовать за словом dev. Например, в нашем случае этот интерфейс называется eth0.
Далее перейдем к настройкам iptables.
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Где интерфейс eth0 нужно заменить на тот, который вы нашли в предыдущей команде.
Если Вы также хотите, чтобы Ваши PPTP-клиенты могли общаться между собой, добавьте следующие правила для iptables:
iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE
iptables -I INPUT -s 10.100.0.0/8 -i ppp0 -j ACCEPT
iptables --append FORWARD --in-interface eth0 -j ACCEPT
Далее нужно сохранить проделанные нами изменения. Воспользуемся утилитой iptables-persistent.
apt install iptables-persistent
Во время установки в открывшихся диалогах нужно выбрать два раза Yes.
Сохраним настройки iptables
netfilter-persistent save
netfilter-persistent reload
При необходимости на клиенте нужно настроить ip адреса и назначить dns-сервера. Компьютер должен иметь выход в интернет.
Заходим в Settings -> Network. В разделе VPN нажимаем на "+". В появившемся окне выбираем **Point-to-point Tunneling Protocol(PPTP).
В поле Name даем любое название VPN(к примеру "PPTP VPN").
В поле Gateway указываем ip адрес VPN сервера.
В поле Username и Password вводим логин и пароль для пользователя, который мы указывали на сервере в файле /etc/ppp/chap-secrets. (Для ввода пароля нужно нажать на знак вопроса в поле Password и выбрать "Store the password for all users". В противном случае система будет запрашивать пароль при каждом VPN соединении).
Далее выбираем пункт Advanced...
Ставим галочку на пункте Use Point-to-point encryption(MPPE). И в поле Security выбираем 128-bit most secure.
После чего нажимаем Okey и Add.
Теперь можно попробовать подключиться.
Кликаем на ползунок и при успешном подключении в верхней строке состояния должен появиться значок с замком.
Создадим новый файл /etc/ppp/peers/vpn и добавим туда следующие строчки, заменяя имя и пароль на те, который мы указывали на сервере в файле /etc/ppp/chap-secrets.
pty "pptp ip_address --nolaunchpppd"
name user_name
password user_password
remotename PPTP
noauth
require-mppe-128
ip_address - публичный IP-адрес нашего PPTP-сервера
user_name и user_password - это пара логин/пароль, которые мы задали в файле /etc/ppp/chap-secrets на нашем PPTP-сервере.
Далее в конце файла /etc/ppp/ip-up допишем:
route add default dev ppp0
Для подключения к VPN серверу воспользуемся командой
pon vpn
Для отключения:
poff vpn