# Практическое задание №3.Wireguard

<details>
  <summary><b>Бонусное задание</b></summary>
  
  <a href="https://docs.resds.ru/books/zaochniki/page/bonusnoe-zadanie-2">Пользовательская установка wireguard</a>

</details>

### Автоматизация развёртывания облачного сервиса.
Для автоматического развёртывания облачного сервиса, необходимо при создании виртуальной машины дополнительно указать скрипт запуска и развёртывания необходимых сервисов. Для развёртывания этого сервиса необходимо создать скрипт, запускающий контейнер.
> Добавлять в контейнер установку Docker не нужно, так как вы будете запускать из виртуального инстанса с предустановленным и запущенным Docker
#### Создание преднастроенной виртуальной машины
Необходимо создать виртуальную машину:
- **Источник**: ubuntu-server-20:docker,
- **Тип инстанса**: small,
- **Сеть**: external-net,
- Дополнительно заполнить раздел **Конфигурация**
[![](https://docs.resds.ru/uploads/images/gallery/2022-06/scaled-1680-/zGSX14D1ZYaWjwyL-image-1655218465613.png)](https://docs.resds.ru/uploads/images/gallery/2022-06/zGSX14D1ZYaWjwyL-image-1655218465613.png)
В разделе конфигурация в текстовое поле ввести скрипт, автоматизирующий установку и развёртывание облачного сервиса.
Сам скрипт автоматизации должен включать в себя запуск wireguard контейнера, и запись необходимых параметров в системные файлы.
<details>
  <summary><b>Пример конфига</b></summary>  
<p style="font-family:'Lucida Console', monospace">
#!/bin/bash

cat << EOF | sudo tee -a /etc/sysctl.conf <br>
net.ipv4.ip_forward = 1 <br>
net.ipv6.conf.default.forwarding = 1<br>
net.ipv6.conf.all.forwarding = 1<br>
net.ipv4.conf.all.rp_filter = 1<br>
net.ipv4.conf.default.proxy_arp = 0<br>
net.ipv4.conf.default.send_redirects = 1<br>
net.ipv4.conf.all.send_redirects = 0<br>
EOF

sudo sysctl -p

ip=$(ip a | grep 172.17 | awk '{print $2}' | awk -F "/" '{print $1}') <br>
  
sudo docker run -ti -d -p 80:80 -p 51820:51820 --restart=always --network host --entrypoint "/wireguard-ui" -v /tmp/wireguard-ui:/data --privileged embarkstudios/wireguard-ui:latest --data-dir=/data --wg-listen-port=51820 --wg-endpoint="$ip:51820" --wg-allowed-ips=0.0.0.0/0 --wg-dns="172.17.1.10" --wg-device-name="wg0" --listen-address=":80" --nat --nat-device="eth0" --client-ip-range="10.0.8.1/24"

sudo reboot -h now
</p>
</details>
В конце данного скрипта должна быть инструкция на перезагрузку сервера

После запуска виртуальной машины с указанным скриптом необходимо дождаться запуска виртуальной машины и находящихся на ней сервисов.

#### Настройка VPN тоннелей
Как только контейнер запущен, необходимо подключиться к web интерфейсу VPN сервера для того, чтобы добавить клиентов для подключения. Для этого необходимо открыть в браузере адрес:

http://«ip адрес вашего виртуального сервера»

В открывшемся окне нажать + в правом нижнем углу 
[![](https://docs.resds.ru/uploads/images/gallery/2022-06/scaled-1680-/5AZ8dMoe5lFNMesz-image-1655218540071.png)](https://docs.resds.ru/uploads/images/gallery/2022-06/5AZ8dMoe5lFNMesz-image-1655218540071.png)

В появившемся окне ввести имя клиента и нажать create 

[![](https://docs.resds.ru/uploads/images/gallery/2022-06/scaled-1680-/RaJGnfaJjk9KDoA8-image-1655218561388.png)](https://docs.resds.ru/uploads/images/gallery/2022-06/RaJGnfaJjk9KDoA8-image-1655218561388.png)

Клиент для подключения создан, так же создан конфигурационный файл для клиента и QR код, по которому можно скачать содержимое этого конфигурационного файла 
[![](https://docs.resds.ru/uploads/images/gallery/2022-06/scaled-1680-/r5dDEjBzvNnEdTTA-image-1655218586460.png)](https://docs.resds.ru/uploads/images/gallery/2022-06/r5dDEjBzvNnEdTTA-image-1655218586460.png)
После создания клиента VPN сервер готов к подключениям внешних клиентов, и можно переходить к проверке.

### Проверка
Для начала необходимо установить клиент для подключения к VPN на мобильный телефон:
|[Android](https://play.google.com/store/apps/details?id=com.wireguard.android)| [IOS](https://apps.apple.com/ru/app/wireguard/id1441195209) |
|-|-|
|[![](https://docs.resds.ru/uploads/images/gallery/2022-06/scaled-1680-/PP2nSSSELN12es76-image-1655218856712.png)](https://docs.resds.ru/uploads/images/gallery/2022-06/PP2nSSSELN12es76-image-1655218856712.png)|[![](https://docs.resds.ru/uploads/images/gallery/2022-06/scaled-1680-/1MVrnDqOHjYHCi23-image-1655218708586.png)](https://docs.resds.ru/uploads/images/gallery/2022-06/1MVrnDqOHjYHCi23-image-1655218708586.png)|


Проверку необходимо выполнить со своего персонального устройства. Для начала убедиться, что вы работаете из сети СПбГУТ **(Необходимо быть подключенным к WiFi сети)**
Перед подключением к VPN серверу необходимо проверить свой текущий ip адрес, под которым вас идентифицируют внешние службы. Сделать это можно открыв сайт [ifconfig.resds.ru](https://ifconfig.resds.ru/). На этой странице будет показано, c каким ip адресом вы обращайтесь как к этой странице.

Для проверки работоспособности VPN сервера необходимо к нему подключиться, и проверить, изменился ли ваш адрес, под которым вы обращаетесь к внешним службам. Если задание практической части было сделано правильно, то вы должны обращаться к внешним службам от адреса вашего VPN сервера.  
Для подключения к VPN серверу необходимо:
1. Открыть скачанное приложение WireGuard
0. Нажать Add a tunnel для добавления VPN тоннеля
0. Выбрать Create from QR code
0. Отсканировать QR код с настройками вашего тоннеля
0. В появившемся меню ввести произвольное имя тоннеля и нажать Save
0. Подключиться к созданному тоннелю, нажав на переключатель в списке подключений
Теперь снова необходимо открыть сайт ifconfig.resds.ru. Если значения изменились, можно сделать вывод о том, что ваш трафик идёт через сервер WireGuard

В случае возникновения проблем у WireGuard нет подробных логов, где можно было бы посмотреть какая ошибка произошла, а причин проблем может быть очень много. Чаще всего — это несоответствующие ключи, закрытый порт или неверный адрес сервера. Для исправления этих ошибок необходимо заново проверить все выполненные настройки.