Сборка OpenVPN с патчем XOR в Docker

openvpndockerxor

824 Words

27-03-2025 18:31 +0300


Список статей
  1. Сборка OpenVPN с патчем XOR в Docker для Debian
  2. Сборка OpenVPN с патчем XOR в Docker для Windows
  3. Сборка OpenVPN с патчем XOR в Docker для Android
  4. Настройка сервера OpenVPN

Этим постом я открою цикл статей по сборке OpenVPN с патчем XOR, установке и настройке сервера OpenVPN.

Соберем deb пакет для Debian 12 и скопируем его на хостовую машину, чтобы использовать для установки на других системах. Первым делом, создаем директорию, в которой будут все наши конфиги:

mkdir openvpn

Теперь переходим в нее и создаем файлы, указанные ниже.

Dockerfile

 1FROM debian:12
 2
 3# Создаем volume
 4VOLUME /release
 5
 6# Устанавливаем необходимые пакеты
 7RUN apt-get update && \
 8    apt-get install -y git \
 9    gcc \
10    libssl-dev \
11    liblzo2-dev \
12    liblz4-dev \
13    libpam0g-dev \
14    make \
15    unzip \
16    sbuild \
17    build-essential \
18    debhelper \
19    fakeroot \
20    devscripts \
21    pkg-config \
22    dpkg-dev \
23    libpkcs11-helper-dev \
24    libselinux1-dev \
25    libcap-ng-dev \
26    libnl-3-dev \
27    libnl-genl-3-dev
28
29# Создаем рабочую директорию
30WORKDIR /openvpn-build
31
32# Скачиваем исходный код OpenVPN
33RUN wget https://github.com/OpenVPN/openvpn/releases/download/v2.6.13/openvpn-2.6.13.tar.gz && \
34    tar -xzf openvpn-2.6.13.tar.gz 
35
36# Копируем настройки и скрипт сборки
37WORKDIR /openvpn-build/openvpn-2.6.13
38COPY ./debian debian
39COPY ./entrypoint.sh /entrypoint.sh
40
41# Делаем исполняемым
42RUN chmod +x /entrypoint.sh
43
44ENTRYPOINT ["bash", "-ex", "/entrypoint.sh"]

entrypoint.sh

 1#!/bin/bash
 2
 3set -euo pipefail
 4
 5OVPN_VERSION="2.6.13"
 6
 7cd /openvpn-build/openvpn-$OVPN_VERSION
 8
 9# Скачиваем и применяем XOR patch
10mkdir -p patches && \
11    cd patches && \
12    wget -q https://raw.githubusercontent.com/Tunnelblick/Tunnelblick/master/third_party/sources/openvpn/openvpn-$OVPN_VERSION/patches/02-tunnelblick-openvpn_xorpatch-a.diff -O 02-tunnelblick-openvpn_xorpatch-a.diff && \
13    wget -q https://raw.githubusercontent.com/Tunnelblick/Tunnelblick/master/third_party/sources/openvpn/openvpn-$OVPN_VERSION/patches/03-tunnelblick-openvpn_xorpatch-b.diff -O 03-tunnelblick-openvpn_xorpatch-b.diff && \
14    wget -q https://raw.githubusercontent.com/Tunnelblick/Tunnelblick/master/third_party/sources/openvpn/openvpn-$OVPN_VERSION/patches/04-tunnelblick-openvpn_xorpatch-c.diff -O 04-tunnelblick-openvpn_xorpatch-c.diff && \
15    wget -q https://raw.githubusercontent.com/Tunnelblick/Tunnelblick/master/third_party/sources/openvpn/openvpn-$OVPN_VERSION/patches/05-tunnelblick-openvpn_xorpatch-d.diff -O 05-tunnelblick-openvpn_xorpatch-d.diff && \
16    wget -q https://raw.githubusercontent.com/Tunnelblick/Tunnelblick/master/third_party/sources/openvpn/openvpn-$OVPN_VERSION/patches/06-tunnelblick-openvpn_xorpatch-e.diff -O 06-tunnelblick-openvpn_xorpatch-e.diff
17
18# Применяем патчи
19cd /openvpn-build/openvpn-$OVPN_VERSION
20
21for patch in patches/*.diff; do 
22	patch -p1 < "$patch"
23done
24
25# Правим аттрибуты
26chmod -R 644 debian/*
27chmod 755 debian/rules
28
29# Запуск сборки
30dpkg-buildpackage -us -uc
31
32# Копируем собранный deb пакет на хост
33cp /openvpn-build/openvpn_*.deb /release
34
35# Очищаем ненужные файлы
36apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

Создаем папки release и debian

mkdir {release,debian}

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

Кратко опишу для чего каждый файл:

Имя файла Описание
Changelog Описывает всю историю изменений
Compat Указывает уровень совместимости с debhelper
Control Содержит всю основную информацию о собираемом пакете
Rules Описывает правила по которым будет происходить компиляции пакета
Copyright Содержит информацию об авторских правах и лицензии исходников

Подробнее с форматом можно ознакомиться по ссылке: https://www.debian.org/doc/manuals/maint-guide/dreq.ru.html

debian/changelog

openvpn (2.6.13) unstable; urgency=medium

  * Custom build with XOR patch for Tunnelblick

  -- Your Name <your@mail>  Thu, 01 Jan 1970 00:00:00 +0000

debian/compat

12

debian/control

Source: openvpn
Section: net
Priority: optional
Maintainer: ShDm <[email protected]>
Build-Depends: debhelper (>= 12), libssl-dev, liblz4-dev, libpkcs11-helper-dev, libpam0g-dev, libselinux1-dev, libcap-ng-dev
Standards-Version: 2.6.13

Package: openvpn
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Recommends: easy-rsa
Suggests: openssl, resolvconf, openvpn-dco-dkms, openvpn-systemd-resolved
Homepage: https://openvpn.net/
Description: OpenVPN with XOR
 Custom OpenVPN build with XOR patch from Tunnelblick

debian/copyright

Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: OpenVPN
Source: https://github.com/OpenVPN/openvpn

Files: *
Copyright: 2001-2023 OpenVPN Inc.
License: GPL-2+

License: GPL-2+
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License along
 with this program; if not, write to the Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

debian/rules

#!/usr/bin/make -f

%:
	dh $@

Теперь запускаем и ждем выполнения, процесс может быть долгим, все зависит от характеристик оборудования, на котором запускается сборка. Сперва соберем наш образ:

docker build -t openvpn-build .

После успешной сборки запускаем контейнер, внутри которого уже соберется deb пакет:

docker run --rm -v $(pwd)/release:/release -t openvpn openvpn-build

Если ошибок в конце нет, значит все прошло успешно и собранный deb пакет должен находиться в папке release, а контейнер будет удален, так как мы запустили сборку с флагом --rm.

Информацию о собранном пакете можем проверить командой:

apt info ./release/openvpn_2.6.13_amd64.deb

Вывод будет примерно таким:

Package: openvpn
Version: 2.6.13
Priority: optional
Section: net
Maintainer: Your Name <your@mail>
Installed-Size: 1,177 kB
Depends: libc6 (>= 2.34), libcap-ng0 (>= 0.7.9), liblz4-1 (>= 0.0~r130), liblzo2-2 (>= 2.02), libnl-3-200 (>= 3.2.7), libnl-genl-3-200 (>= 3.2.7), libpam0g (>= 0.99.7.1), libssl3 (>= 3.0.0)
Recommends: easy-rsa
Suggests: openssl, resolvconf, openvpn-dco-dkms, openvpn-systemd-resolved
Homepage: https://openvpn.net/
Download-Size: 522 kB
APT-Sources: /opt/openvpn/release/openvpn_2.6.13_amd64.deb
Description: OpenVPN with XOR
 Custom OpenVPN build with XOR patch from Tunnelblick

Теперь собранный пакет можно использовать для установки. Нужно учесть, что для обновления версии потребуется заново производить сборку и важно, чтобы под желаемую версию OpenVPN уже существовали актуальные патчи от Tunnelblick.

Исходники OpenVPN:
https://github.com/OpenVPN/openvpn
Исходники патчей Tunnelblick:
https://github.com/Tunnelblick/Tunnelblick/tree/master/third_party/sources/openvpn

comments powered by Disqus