Сервисное приложение для работы с поключениями WireGuard имеющее простое http-api. (Golang + gin)
Конфигурация сервиса находится в config.yaml:
api: port: "8000"
- порт на котором будет работать http-api (либо через env переменную API_PORT)
vpn: port: "51820"
- порт через который устанавливается WireGuard соединение (либо через env переменную VPN_PORT)
Так же дополнительно для работы сервиса необходима enviroment переменные, перечечисленные в .env.example:
SERVICE_HOST
- адрес хоста на котором будет запущен сервис
SERVICE_USER
и SERVICE_PASSWORD
- имя пользователя и пароль для basic auth к http-api
Сборка докер-образа:
docker build -t wireguardvpn:local ./
Для запуска сервиса в докер-контейнере используйте следующую команду:
docker run -d \
--name wireguardvpn-service \
-e SERVICE_HOST=89.191.226.158 `#your host address` \
-e SERVICE_USER=user `#your user name for auth` \
-e SERVICE_PASSWORD=passwd `#your password for auth` \
-p 51820:51820/udp `#wireguard port` \
-p 8000:8000/tcp `#http-api port` \
-v ~/.WireguardVpn:/etc/wireguard \
--cap-add=NET_ADMIN \
--cap-add=SYS_MODULE \
--sysctl="net.ipv4.conf.all.src_valid_mark=1" \
--sysctl="net.ipv4.ip_forward=1" \
--restart unless-stopped \
wireguardvpn:local
Все конечные точки к api сервиса доступны только по Basic Authorization
GET http://{{host}}/
Authorization: Basic {{Username}} {{Password}}
Username и Password задаются в конфигурации сервиса: config.yaml
GET http://{{host}}/
Authorization: Basic {{Username}} {{Password}}
200 OK
GET http://{{host}}/connections/{{connectionId}}/config
Authorization: Basic {{Username}} {{Password}}
200 OK
[Interface]
PrivateKey = eH1jlKve73U2ZkbYJJZA1cBkvj4zqDZU75YskzwCXE8=
Address = 10.0.0.2/32
DNS = 1.1.1.1
[Peer]
PublicKey = s1WUppCKxNYYPra/gkPTz/LQrUDJbfqCpI37T92N5F0=
Endpoint = 89.191.226.158:51840
AllowedIPs = 0.0.0.0/0
POST http://{{host}}/connections?id={{connectionId}}
Authorization: Basic {{Username}} {{Password}}
201 Created
PUT http://{{host}}/connections/{{connectionId}}/enable
Authorization: Basic {{Username}} {{Password}}
204 No content
PUT http://{{host}}/connections/{{connectionId}}/disable
Authorization: Basic {{Username}} {{Password}}
204 No content
DELETE http://{{host}}/connections/{{connectionId}}
Authorization: Basic {{Username}} {{Password}}
204 No content