Как сделать так, чтобы WireGuard из Docker-контейнера пробрасывал любые подключения в хост?

Для того чтобы WireGuard из Docker-контейнера мог пробросить любые подключения в хост, вам потребуется выполнить следующие шаги:

Шаг 1: Установите WireGuard на хосте.
Перед использованием WireGuard из Docker-контейнера, убедитесь, что он правильно установлен на вашем хосте. Установка WireGuard может отличаться в зависимости от вашей операционной системы. Ниже приведены несколько ссылок, в которых подробно описана установка WireGuard для различных ОС:

- Ubuntu: https://www.wireguard.com/install/
- CentOS: https://www.wireguard.com/install/
- Debian: https://www.wireguard.com/install/
- macOS: https://docs.wireguard.com/installation/macos.html
- Windows: https://docs.wireguard.com/installation/windows.html

Шаг 2: Создайте Docker-контейнер с WireGuard.
После успешной установки WireGuard на хосте, создайте Docker-контейнер, в котором будет запущен WireGuard. Можно воспользоваться официальным образом WireGuard, который доступен на Docker Hub (https://hub.docker.com/r/linuxserver/wireguard).

Выполните следующую команду, чтобы создать и запустить контейнер из образа linuxserver/wireguard:

docker run -d --name wireguard 
    --cap-add=NET_ADMIN 
    --cap-add=SYS_MODULE 
    -e PUID=<UID> 
    -e PGID=<GID> 
    -e TZ=<Timezone> 
    -p <Host_Port>:<Container_Port>/udp 
    -v /path/to/config:/config 
    linuxserver/wireguard

Здесь вы должны заменить <UID> на идентификатор пользователя, <GID> на идентификатор группы пользователя, <Timezone> на ваш часовой пояс, <Host_Port> на порт хоста, который будет проброшен в контейнер, <Container_Port>на порт контейнера, на котором будет работать WireGuard, и /path/to/configна путь к каталогу, где будут храниться конфигурационные файлы WireGuard.

Шаг 3: Сгенерируйте ключи для WireGuard.
Сгенерируйте ключи для WireGuard на хосте с помощью следующих команд:

docker exec -it wireguard umask 077
docker exec -it wireguard wg genkey > privatekey
docker exec -it wireguard wg pubkey < privatekey > publickey

В результате будет сгенерирован файл privatekey, содержащий приватный ключ WireGuard, и файл publickey, содержащий соответствующий публичный ключ.

Шаг 4: Настройте WireGuard.
Настройте WireGuard на хосте путем редактирования конфигурационного файла wg0.conf в каталоге /path/to/config (указанном в команде создания контейнера). Редактируйте конфигурационный файл, чтобы указать приватный ключ (PrivateKey) и публичный ключ (PublicKey), полученные на предыдущем шаге.

Пример конфигурационного файла wg0.conf:

[Interface]
PrivateKey = <Private_Key>
Address = 10.0.0.1/24
ListenPort = <Container_Port>

[Peer]
PublicKey = <Public_Key>
AllowedIPs = 10.0.0.2/32

Здесь вы должны заменить <Private_Key> и <Public_Key> соответствующими значениями ключей, полученных на предыдущем шаге, и <Container_Port> на порт контейнера, указанный при создании контейнера.

Шаг 5: Запустите WireGuard в контейнере.
Перезапустите контейнер WireGuard, чтобы применить новую конфигурацию:

docker restart wireguard

WireGuard теперь будет работать внутри контейнера и пробрасывать любые подключения в хост по указанным портам.

На этом всё! Теперь вы настроили WireGuard в Docker-контейнере так, что он пробрасывает любые подключения в хост. Вы можете использовать этот контейнер для настройки VPN-сервера или других сетевых приложений, которые требуют WireGuard.