[English](README.md) | [简体中文](README-zh.md) | [繁體中文](README-zh-Hant.md) | [Русский](README-ru.md)
# IPsec VPN сервер на Docker
[](https://github.com/hwdsl2/docker-ipsec-vpn-server/actions/workflows/main-alpine.yml) [](https://github.com/hwdsl2/docker-ipsec-vpn-server/stargazers) [](https://hub.docker.com/r/hwdsl2/ipsec-vpn-server/) [](https://hub.docker.com/r/hwdsl2/ipsec-vpn-server/)
Docker-образ для запуска сервера IPsec VPN с поддержкой IPsec/L2TP, Cisco IPsec и IKEv2.
Основан на Alpine 3.23 или Debian 12 с использованием [Libreswan](https://libreswan.org) (программное обеспечение IPsec VPN) и [xl2tpd](https://github.com/xelerance/xl2tpd) (демон L2TP).
IPsec VPN шифрует сетевой трафик, поэтому никто между вами и VPN-сервером не сможет перехватывать ваши данные во время их передачи через Интернет. Это особенно полезно при использовании незащищённых сетей, например в кофейнях, аэропортах или гостиничных номерах.
**Возможности:**
- Автоматическая генерация учётных данных VPN и конфигурации IKEv2 при первом запуске
- Поддержка IKEv2 с мощными и быстрыми шифрами (например, AES-GCM)
- Генерация VPN-профилей для автоматической настройки устройств iOS, macOS и Android
- Поддержка Windows, macOS, iOS, Android, Chrome OS и Linux в качестве VPN-клиентов
- Включает вспомогательный скрипт для управления пользователями и сертификатами IKEv2
- Автоматически собирается и публикуется через [GitHub Actions](https://github.com/hwdsl2/docker-ipsec-vpn-server/actions/workflows/main-alpine.yml)
- Постоянное хранение данных через Docker volume
- Поддержка нескольких архитектур: `linux/amd64`, `linux/arm64`, `linux/arm/v7`
**Также доступно:**
- VPN: [IPsec без Docker](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/README-ru.md), [WireGuard](https://github.com/hwdsl2/docker-wireguard/blob/main/README-ru.md), [OpenVPN](https://github.com/hwdsl2/docker-openvpn/blob/main/README-ru.md), [Headscale](https://github.com/hwdsl2/docker-headscale/blob/main/README-ru.md)
- AI: [Стек ИИ на своём сервере](https://github.com/hwdsl2/self-hosted-ai-stack/blob/main/README-ru.md) для локальных LLM, чата, RAG, голосовых функций и инструментов ИИ
- Книги: [Privacy Tools in the Age of AI](docs/vpn-book.md#new-privacy-tools-in-the-age-of-ai), [Build Your Own VPN Server](docs/vpn-book.md#build-your-own-vpn-server-a-step-by-step-guide)
## Быстрый старт
Используйте эту команду для настройки сервера IPsec VPN в Docker:
```bash
docker run \
--name ipsec-vpn-server \
--restart=always \
-v ikev2-vpn-data:/etc/ipsec.d \
-v /lib/modules:/lib/modules:ro \
-p 500:500/udp \
-p 4500:4500/udp \
-d --privileged \
hwdsl2/ipsec-vpn-server
```
Данные для входа в VPN будут сгенерированы случайным образом. См. раздел [Получение данных для входа в VPN](#получение-данных-для-входа-в-vpn).
В качестве альтернативы вы можете [настроить IPsec VPN без Docker](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/README-ru.md). Чтобы узнать больше о том, как использовать этот образ, прочитайте разделы ниже.
## Сообщество
- 📬 [Подписаться на обновления проектов](https://selfhostedstack.beehiiv.com/subscribe?utm_campaign=vpn-ru) (1–2 письма в месяц) — получить бесплатные руководства по развёртыванию VPN и AI (PDF, на английском)
- 💬 Присоединяйтесь к сообществу [r/selfhostedstack](https://www.reddit.com/r/selfhostedstack/) для обсуждений и демонстрации проектов
- ⭐ Поставьте звезду репозиторию, если он оказался вам полезен — это поможет другим пользователям его найти.
## Требования
- Linux-сервер с публичным IP-адресом или DNS-именем
- Установленный Docker
- Открытые VPN-порты в брандмауэре (UDP 500 и 4500)
- Вы также можете использовать [Podman](https://docs.podman.io) для запуска этого образа после создания псевдонима для `docker`
**Примечание:** Продвинутые пользователи могут использовать этот образ на macOS с помощью [Docker for Mac](https://docs.docker.com/desktop/setup/install/mac-install/). Перед использованием режима IPsec/L2TP может потребоваться один раз перезапустить контейнер с помощью `docker restart ipsec-vpn-server`. Этот образ не поддерживает Docker for Windows.
## Загрузка
Получите доверенную сборку из [реестра Docker Hub](https://hub.docker.com/r/hwdsl2/ipsec-vpn-server/):
```bash
docker pull hwdsl2/ipsec-vpn-server
```
В качестве альтернативы можно скачать из [Quay.io](https://quay.io/repository/hwdsl2/ipsec-vpn-server):
```bash
docker pull quay.io/hwdsl2/ipsec-vpn-server
docker image tag quay.io/hwdsl2/ipsec-vpn-server hwdsl2/ipsec-vpn-server
```
Поддерживаемые платформы: `linux/amd64`, `linux/arm64` и `linux/arm/v7`.
Продвинутые пользователи могут [собрать образ из исходного кода](docs/advanced-usage.md#build-from-source-code) на GitHub.
### Сравнение образов
Доступны два предварительно собранных образа. Образ на базе Alpine используется по умолчанию и имеет размер всего около ~19 MB.
| | На базе Alpine | На базе Debian |
| ----------------- | ------------------------- | ------------------------------ |
| Имя образа | hwdsl2/ipsec-vpn-server | hwdsl2/ipsec-vpn-server:debian |
| Сжатый размер | ~ 19 MB | ~ 62 MB |
| Базовый образ | Alpine Linux 3.23 | Debian Linux 12 |
| Платформы | amd64, arm64, arm/v7 | amd64, arm64, arm/v7 |
| Версия Libreswan | 5.3.2 | 5.3.2 |
| IPsec/L2TP | ✅ | ✅ |
| Cisco IPsec | ✅ | ✅ |
| IKEv2 | ✅ | ✅ |
**Примечание:** Чтобы использовать образ на базе Debian, замените каждое `hwdsl2/ipsec-vpn-server` на `hwdsl2/ipsec-vpn-server:debian` в этом README. В настоящее время эти образы несовместимы с системами Synology NAS.
Я хочу использовать более старую версию Libreswan 4.
Обычно рекомендуется использовать последнюю версию [Libreswan](https://libreswan.org/) 5, которая является версией по умолчанию в этом проекте. Однако если вы хотите использовать более старую версию Libreswan 4, вы можете собрать Docker-образ из исходного кода:
```bash
git clone https://github.com/hwdsl2/docker-ipsec-vpn-server
cd docker-ipsec-vpn-server
# Указать версию Libreswan 4
sed -i 's/SWAN_VER=5\..*/SWAN_VER=4.15/' Dockerfile Dockerfile.debian
# Сборка образа на базе Alpine
docker build -t hwdsl2/ipsec-vpn-server .
# Сборка образа на базе Debian
docker build -f Dockerfile.debian -t hwdsl2/ipsec-vpn-server:debian .
```
## Как использовать этот образ
### Переменные окружения
**Примечание:** Все переменные для этого образа являются необязательными, что означает, что вам не нужно указывать ни одну переменную — и вы сможете получить работающий сервер IPsec VPN «из коробки»! Для этого создайте пустой файл `env` с помощью `touch vpn.env`, а затем перейдите к следующему разделу.
Этот Docker-образ использует следующие переменные, которые можно объявить в файле `env` (см. [пример](vpn.env.example)):
```
VPN_IPSEC_PSK=your_ipsec_pre_shared_key
VPN_USER=your_vpn_username
VPN_PASSWORD=your_vpn_password
```
Это создаст учетную запись пользователя для входа в VPN, которую можно использовать на нескольких ваших устройствах[\*](#важные-замечания). IPsec PSK (предварительно общий ключ) задаётся переменной окружения `VPN_IPSEC_PSK`. Имя пользователя VPN задаётся в `VPN_USER`, а пароль VPN указывается в `VPN_PASSWORD`.
Поддерживаются дополнительные пользователи VPN, и их можно при желании объявить в вашем файле `env` следующим образом. Имена пользователей и пароли должны быть разделены пробелами, а имена пользователей не могут повторяться. Все пользователи VPN будут использовать один и тот же IPsec PSK.
```
VPN_ADDL_USERS=additional_username_1 additional_username_2
VPN_ADDL_PASSWORDS=additional_password_1 additional_password_2
```
Переменные выше используются только для режимов IPsec/L2TP и IPsec/XAuth («Cisco IPsec»). Для IKEv2 см. [Настройка и использование IKEv2 VPN](#настройка-и-использование-ikev2-vpn).
**Примечание:** В файле `env` НЕ помещайте `""` или `''` вокруг значений и не добавляйте пробелы вокруг `=`. НЕ используйте внутри значений следующие специальные символы: `\ " '`. Надёжный IPsec PSK должен состоять как минимум из 20 случайных символов.
**Примечание:** Если вы измените файл `env` после того, как Docker-контейнер уже создан, необходимо удалить и создать контейнер заново, чтобы изменения вступили в силу. См. раздел [Обновление Docker-образа](#обновление-docker-образа).
### Дополнительные переменные окружения
Продвинутые пользователи могут при желании указать DNS-имя, имя клиента и/или собственные DNS-серверы.
Узнайте, как указать DNS-имя, имя клиента и/или собственные DNS-серверы.
Продвинутые пользователи могут при желании указать DNS-имя для адреса сервера IKEv2. DNS-имя должно быть полным доменным именем (FQDN). Пример:
```
VPN_DNS_NAME=vpn.example.com
```
Вы можете указать имя для первого клиента IKEv2. Используйте только одно слово, без специальных символов, кроме `-` и `_`. По умолчанию используется `vpnclient`, если имя не указано.
```
VPN_CLIENT_NAME=your_client_name
```
По умолчанию клиенты используют [Google Public DNS](https://developers.google.com/speed/public-dns/) при активном VPN. Вы можете указать собственные DNS-серверы для всех режимов VPN. Пример:
```
VPN_DNS_SRV1=1.1.1.1
VPN_DNS_SRV2=1.0.0.1
```
Для получения дополнительных сведений и списка популярных публичных DNS-провайдеров см. [Использование альтернативных DNS-серверов](docs/advanced-usage.md).
По умолчанию пароль не требуется при импорте конфигурации клиента IKEv2. Вы можете защитить файлы конфигурации клиента случайным паролем.
```
VPN_PROTECT_CONFIG=yes
```
**Примечание:** Переменные выше не влияют на режим IKEv2, если IKEv2 уже настроен в Docker-контейнере. В этом случае вы можете удалить IKEv2 и настроить его снова с пользовательскими параметрами. См. [Настройка и использование IKEv2 VPN](#настройка-и-использование-ikev2-vpn).
### Запуск сервера IPsec VPN
Создайте новый Docker-контейнер из этого образа (замените `./vpn.env` на ваш собственный файл `env`):
```bash
docker run \
--name ipsec-vpn-server \
--env-file ./vpn.env \
--restart=always \
-v ikev2-vpn-data:/etc/ipsec.d \
-v /lib/modules:/lib/modules:ro \
-p 500:500/udp \
-p 4500:4500/udp \
-d --privileged \
hwdsl2/ipsec-vpn-server
```
В этой команде используется параметр `-v` команды `docker run`, чтобы создать новый [Docker volume](https://docs.docker.com/storage/volumes/) с именем `ikev2-vpn-data` и смонтировать его в `/etc/ipsec.d` внутри контейнера. Данные, связанные с IKEv2 (такие как сертификаты и ключи), будут сохраняться в этом томе. Позже, если вам потребуется заново создать Docker-контейнер, просто укажите тот же том снова.
Рекомендуется включить IKEv2 при использовании этого образа. Однако если вы предпочитаете не использовать IKEv2 и подключаться к VPN только через режимы IPsec/L2TP и IPsec/XAuth («Cisco IPsec»), удалите первый параметр `-v` из команды `docker run`, приведённой выше.
**Примечание:** Продвинутые пользователи также могут [запускать контейнер без привилегированного режима](docs/advanced-usage.md#run-without-privileged-mode).
### Получение данных для входа в VPN
Если вы не указали файл `env` в команде `docker run` выше, значение `VPN_USER` по умолчанию будет `vpnuser`, а `VPN_IPSEC_PSK` и `VPN_PASSWORD` будут сгенерированы случайным образом. Чтобы получить их, просмотрите журналы контейнера:
```bash
docker logs ipsec-vpn-server
```
Найдите в выводе следующие строки:
```
Connect to your new VPN with these details:
Server IP: your_vpn_server_ip
IPsec PSK: your_ipsec_pre_shared_key
Username: your_vpn_username
Password: your_vpn_password
```
Вывод также будет содержать сведения для режима IKEv2, если он включён.
(Необязательно) Сохраните сгенерированные данные для входа в VPN (если они есть) в текущий каталог:
```bash
docker cp ipsec-vpn-server:/etc/ipsec.d/vpn-gen.env ./
```
## Использование docker-compose
```bash
cp vpn.env.example vpn.env
# При необходимости отредактируйте vpn.env, затем:
docker compose up -d
docker logs ipsec-vpn-server
```
Пример `docker-compose.yml` (уже включён):
```yaml
volumes:
ikev2-vpn-data:
services:
vpn:
image: hwdsl2/ipsec-vpn-server
restart: always
env_file:
- ./vpn.env
ports:
- "500:500/udp"
- "4500:4500/udp"
privileged: true
hostname: ipsec-vpn-server
container_name: ipsec-vpn-server
volumes:
- ikev2-vpn-data:/etc/ipsec.d
- /lib/modules:/lib/modules:ro
```
## Следующие шаги
*Прочитать на других языках: [English](README.md#next-steps), [简体中文](README-zh.md#下一步), [繁體中文](README-zh-Hant.md#下一步), [Русский](README-ru.md#следующие-шаги).*
Настройте ваш компьютер или устройство для использования VPN. Пожалуйста, обратитесь к следующим инструкциям (на английском языке):
**[Настройка и использование IKEv2 VPN (рекомендуется)](#настройка-и-использование-ikev2-vpn)**
**[Настройка клиентов IPsec/L2TP VPN](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/clients.md)**
**[Настройка клиентов IPsec/XAuth («Cisco IPsec»)](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/clients-xauth.md)**
**Прочитайте [:book: книгу о VPN](docs/vpn-book.md), чтобы получить доступ к [дополнительному контенту](https://ko-fi.com/post/Support-this-project-and-get-access-to-supporter-o-O5O7FVF8J).**
Наслаждайтесь собственным VPN! :sparkles::tada::rocket::sparkles:
## Важные замечания
**Пользователи Windows**: для режима IPsec/L2TP требуется [одноразовое изменение реестра](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/clients.md#windows-error-809), если VPN-сервер или клиент находится за NAT (например, домашним роутером).
Одна и та же учетная запись VPN может использоваться на нескольких ваших устройствах. Однако из-за ограничения IPsec/L2TP, если вы хотите подключить несколько устройств из-за одного NAT (например, домашнего роутера), необходимо использовать режим [IKEv2](#настройка-и-использование-ikev2-vpn) или [IPsec/XAuth](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/clients-xauth.md).
Если вы хотите добавить, изменить или удалить учетные записи пользователей VPN, сначала обновите файл `env`, затем удалите и заново создайте Docker-контейнер, следуя инструкциям из [следующего раздела](#обновление-docker-образа). Продвинутые пользователи могут использовать [bind mount](docs/advanced-usage.md#bind-mount-the-env-file) для файла `env`.
Для серверов с внешним файрволом (например, [EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-security-groups.html)/[GCE](https://cloud.google.com/vpc/docs/firewalls)) откройте UDP-порты 500 и 4500 для VPN. Пользователям Aliyun см. [#433](https://github.com/hwdsl2/setup-ipsec-vpn/issues/433).
Клиенты настроены использовать [Google Public DNS](https://developers.google.com/speed/public-dns/) при активном VPN. Если вы предпочитаете другого DNS-провайдера, прочитайте [этот раздел](docs/advanced-usage.md#use-alternative-dns-servers).
## Обновление Docker-образа
Чтобы обновить Docker-образ и контейнер, сначала [загрузите](#загрузка) последнюю версию:
```bash
docker pull hwdsl2/ipsec-vpn-server
```
Если Docker-образ уже обновлён, вы увидите:
```
Status: Image is up to date for hwdsl2/ipsec-vpn-server:latest
```
В противном случае будет загружена последняя версия. Чтобы обновить Docker-контейнер, сначала запишите все ваши [данные для входа в VPN](#получение-данных-для-входа-в-vpn). Затем удалите контейнер Docker с помощью `docker rm -f ipsec-vpn-server`. После этого создайте его заново, следуя инструкциям из раздела [Как использовать этот образ](#как-использовать-этот-образ).
## Настройка и использование IKEv2 VPN
Режим IKEv2 имеет преимущества по сравнению с IPsec/L2TP и IPsec/XAuth («Cisco IPsec») и не требует IPsec PSK, имени пользователя или пароля. Подробнее можно прочитать [здесь](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/ikev2-howto.md).
Сначала проверьте журналы контейнера, чтобы увидеть сведения о IKEv2:
```bash
docker logs ipsec-vpn-server
```
**Примечание:** Если вы не можете найти сведения о IKEv2, возможно, IKEv2 не включён в контейнере. Попробуйте обновить Docker-образ и контейнер, следуя инструкциям из раздела [Обновление Docker-образа](#обновление-docker-образа).
Во время настройки IKEv2 создаётся клиент IKEv2 (с именем по умолчанию `vpnclient`), а его конфигурация экспортируется в `/etc/ipsec.d` **внутри контейнера**. Чтобы скопировать файл(ы) конфигурации на Docker-хост:
```bash
# Проверить содержимое /etc/ipsec.d в контейнере
docker exec -it ipsec-vpn-server ls -l /etc/ipsec.d
# Пример: копирование файла конфигурации клиента из контейнера
# в текущий каталог на Docker-хосте
docker cp ipsec-vpn-server:/etc/ipsec.d/vpnclient.p12 ./
```
**Следующие шаги:** [Настройте ваши устройства](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/ikev2-howto.md) для использования IKEv2 VPN.
Узнайте, как управлять клиентами IKEv2.
Вы можете управлять клиентами IKEv2 с помощью вспомогательного скрипта. Ниже приведены примеры. Чтобы настроить параметры клиента, запустите скрипт без аргументов.
```bash
# Добавить нового клиента (с параметрами по умолчанию)
docker exec -it ipsec-vpn-server ikev2.sh --addclient [имя клиента]
# Экспортировать конфигурацию для существующего клиента
docker exec -it ipsec-vpn-server ikev2.sh --exportclient [имя клиента]
# Показать список существующих клиентов
docker exec -it ipsec-vpn-server ikev2.sh --listclients
# Показать справку
docker exec -it ipsec-vpn-server ikev2.sh -h
```
**Примечание:** Если возникает ошибка «executable file not found», замените `ikev2.sh` выше на `/opt/src/ikev2.sh`.
Узнайте, как изменить адрес сервера IKEv2.
В некоторых случаях может потребоваться изменить адрес сервера IKEv2. Например, чтобы перейти на использование DNS-имени или после изменения IP-адреса сервера. Чтобы изменить адрес сервера IKEv2, сначала [откройте bash-оболочку внутри контейнера](docs/advanced-usage.md#bash-shell-inside-container), затем [следуйте этим инструкциям](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/ikev2-howto.md#change-ikev2-server-address). Обратите внимание, что журналы контейнера не будут показывать новый адрес сервера IKEv2, пока вы не перезапустите Docker-контейнер.
Удаление IKEv2 и повторная настройка с пользовательскими параметрами.
В некоторых случаях может потребоваться удалить IKEv2 и настроить его заново с пользовательскими параметрами.
**Предупреждение:** Вся конфигурация IKEv2, включая сертификаты и ключи, будет **безвозвратно удалена**. Это **нельзя отменить**!
**Вариант 1:** Удалить IKEv2 и настроить его снова с помощью вспомогательного скрипта.
Обратите внимание, что это переопределит переменные, указанные в файле `env`, такие как `VPN_DNS_NAME` и `VPN_CLIENT_NAME`, а журналы контейнера больше не будут показывать актуальную информацию для IKEv2.
```bash
# Удалить IKEv2 и удалить всю конфигурацию IKEv2
docker exec -it ipsec-vpn-server ikev2.sh --removeikev2
# Настроить IKEv2 снова с пользовательскими параметрами
docker exec -it ipsec-vpn-server ikev2.sh
```
**Вариант 2:** Удалить `ikev2-vpn-data` и создать контейнер заново.
1. Запишите все ваши [данные для входа в VPN](#получение-данных-для-входа-в-vpn).
1. Удалите Docker-контейнер: `docker rm -f ipsec-vpn-server`.
1. Удалите том `ikev2-vpn-data`: `docker volume rm ikev2-vpn-data`.
1. Обновите файл `env` и добавьте пользовательские параметры IKEv2, такие как `VPN_DNS_NAME` и `VPN_CLIENT_NAME`, затем создайте контейнер заново. См. раздел [Как использовать этот образ](#как-использовать-этот-образ).
## Расширенное использование
См. [Расширенное использование (на английском)](docs/advanced-usage.md).
- [Использование альтернативных DNS-серверов](docs/advanced-usage.md#use-alternative-dns-servers)
- [Запуск без привилегированного режима](docs/advanced-usage.md#run-without-privileged-mode)
- [Выбор режимов VPN](docs/advanced-usage.md#select-vpn-modes)
- [Включить совершенную прямую секретность IKEv2](docs/advanced-usage.md#enable-ikev2-perfect-forward-secrecy)
- [Доступ к другим контейнерам на Docker-хосте](docs/advanced-usage.md#access-other-containers-on-the-docker-host)
- [Указание публичного IP-адреса VPN-сервера](docs/advanced-usage.md#specify-vpn-servers-public-ip)
- [Назначение статических IP-адресов клиентам VPN](docs/advanced-usage.md#assign-static-ips-to-vpn-clients)
- [Настройка подсетей VPN](docs/advanced-usage.md#customize-vpn-subnets)
- [Поддержка IPv6](docs/advanced-usage.md#ipv6-support)
- [Раздельная маршрутизация (Split tunneling)](docs/advanced-usage.md#split-tunneling)
- [О режиме сетевого хоста](docs/advanced-usage.md#about-host-network-mode)
- [Включение журналов Libreswan](docs/advanced-usage.md#enable-libreswan-logs)
- [Проверка состояния сервера](docs/advanced-usage.md#check-server-status)
- [Сборка из исходного кода](docs/advanced-usage.md#build-from-source-code)
- [Bash-оболочка внутри контейнера](docs/advanced-usage.md#bash-shell-inside-container)
- [Bind mount файла env](docs/advanced-usage.md#bind-mount-the-env-file)
- [Развёртывание алгоритма управления перегрузкой Google BBR](docs/advanced-usage.md#deploy-google-bbr-congestion-control)
## Технические детали
Запущены два сервиса: `Libreswan (pluto)` для IPsec VPN и `xl2tpd` для поддержки L2TP.
Конфигурация IPsec по умолчанию поддерживает:
* IPsec/L2TP с PSK
* IKEv1 с PSK и XAuth («Cisco IPsec»)
* IKEv2
Необходимые порты: `500/udp` и `4500/udp` (IPsec)
## Лицензия
**Примечание:** Компоненты программного обеспечения внутри предварительно собранного образа (например, Libreswan и xl2tpd) распространяются по лицензиям, выбранным их правообладателями. Как и в случае использования любого готового образа, пользователь образа несёт ответственность за то, чтобы использование этого образа соответствовало всем применимым лицензиям для программного обеспечения, содержащегося внутри.
Copyright (C) 2016-2026 [Lin Song](https://github.com/hwdsl2) [](https://www.linkedin.com/in/linsongui)
Основано на [работе Thomas Sarlandie](https://github.com/sarfata/voodooprivacy) (Copyright 2012)
[](http://creativecommons.org/licenses/by-sa/3.0/)
Эта работа распространяется по лицензии [Creative Commons Attribution-ShareAlike 3.0 Unported License](http://creativecommons.org/licenses/by-sa/3.0/)
Требуется указание авторства: пожалуйста, указывайте моё имя в любых производных работах и сообщайте мне, как вы её улучшили!