Задание:
20) На сервере SRV3-DT сконфигурируйте VPN сервер
- a) В качестве сервера VPN используете wireguard.
- b) В качестве VPN сети используйте адресное пространство 10.6.6.0/24
- c) Клиенты должны иметь полный доступ к офису DT
- 1. В качестве клиента выступает CLI
- e) Запуск соединения осуществляется скриптом wg_connect, остановка wg_disconnect.
- 1. Скрипты должны вызываться из любого каталога без указания полного пути
- 2. Скрипты должны запускаться от пользователя User с использованием sudo
Вариант реализации:
SRV3-DT:
- Включаем перессылку пакетов (forwarding):
sed -i "s/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g" /etc/net/sysctl.conf
- Перезагружаем службу network:
systemctl restart network
- Устанавливаем необходимые пакеты:
apt-get update && apt-get install -y wireguard-tools wireguard-tools-wg-quick
- Создаём директорию для конфигурационных файлов и ключей:
mkdir -p /etc/wireguard/keys
- 3. Переходим в директорию «/etc/wireguard/keys» для генерации пары ключей открытого и закрытого типа для сервера и клиента:
cd /etc/wireguard/keys
wg genkey | tee srv-sec.key | wg pubkey > srv-pub.key
wg genkey | tee cli-sec.key | wg pubkey > cli-pub.key
- Считываем информацию о закрытом — серверном и открытом — клиентским ключам в конфигурационный файл для туннельно интерфейса «/etc/wireguard/wg0.conf«:
cat srv-sec.key cli-pub.key >> /etc/wireguard/wg0.conf
- Редактируем конфигурационный файл туннельного интерфейса «wg0.conf«:
vim /etc/wireguard/wg0.conf
-
- приводим файл к следующему виду, где:
- [Interface] — блок настроек для Сервера:
- Address — адрес в сети VPN. Данная подсеть не должна пересекаться с используемыми диапазонами.
- ListenPort — порт, на котором будет работать наш сервер.
- PrivateKey — закрытый ключ сервера (содержимое файла «/etc/wireguard/keys/srv-sec.key).
- [Peer] — настройки клиента для соединения с сервером:
- PublicKey — открытый ключ клиента ( содержимое файла «/etc/wireguard/keys/cli-pub.key»).
- AllowedIPs — разрешенный маршрут.
- [Interface] — блок настроек для Сервера:
- приводим файл к следующему виду, где:
- Включаем и добавляем в автозагрузку туннельный интерфейс «wg0«:
systemctl enable --now wg-quick@wg0
- Проверяем:
wg show wg0
ip -c a | grep wg0
-
- результат:
CLI:
- Включаем службу sshd:
systemctl enable --now sshd
SRV3-DT:
- Передаём на клиента закрытый и открытый ключ:
scp /etc/wireguard/keys/cli-sec.key user@172.16.3.3:~/
scp /etc/wireguard/keys/srv-pub.key user@172.16.3.3:~/
CLI:
- Из под обычного пользователя считываем информацию о ключах в файл:
cat cli-sec.key srv-pub.key >> wg0.conf
- Редактируем конфигурационный файл туннельного интерфейса «wg0.conf«:
vim wg0.conf
-
- приводим файл к следующему виду:
- Из под суперпользователя root выполняем импорт соединения типа wireguard из конфигурационного файла:
nmcli connection import type wireguard file /home/user/wg0.conf
-
- результат:
R-DT:
- Реализуем проброс портов, т.к. нет SRV3-DT — неимеет «публичного» IP-адреса:
configure terminal
ip nat source static udp 192.168.33.68 12345 172.16.4.14 12345
ip nat destination static udp 172.16.4.14 12345 192.168.33.68 12345 hairpin
write
R-FW:
- Добавляем разрешающее правило в файрвол для установления туннельного соединения:
firewall forward add src 172.16.3.0/28 dst 192.168.33.64/28 pass
firewall forward add src 192.168.33.64/28 dst 172.16.3.0/28 pass
- Добавляем маршрут:
inet route add 10.6.6.0 next-hop 192.168.33.68 netmask 255.255.255.0
- Добавляем разрешающее правило в файрвол для доступа в сети DT:
firewall forward add src 10.6.6.0/24 dst 192.168.33.0/26 pass
firewall forward add src 10.6.6.0/24 dst 192.168.33.80/29 pass
CLI:
- Проверяем доступ в сети офиса DT:
- связность с SRV1-DT
- связность с CLI-DT
- связность с ADMIN-DT
- Реализуем возможность запуска соединения скриптом wg_connect и остановку wg_disconnect:
- добавляем пользователя в группу wheel для возможности запуска sudo:
usermod -aG wheel user
-
- добавляем информацию о пользователе в файл /etc/sudoers:
- также при не обходимости даём возможность запуска sudo без пароля
- добавляем информацию о пользователе в файл /etc/sudoers:
echo "user ALL=(ALL:ALL) NOPASSWD: ALL" >> /etc/sudoers
-
- из под суперпользователя root создаём файл скрипта wg_connect:
vim /usr/sbin/wg_connect
-
-
- добавляем следующее содержимое:
-
-
- задаём права на испольнение:
chmod +x /usr/sbin/wg_connect
-
- из под суперпользователя root создаём файл скрипта wg_disconnect:
vim /usr/sbin/wg_disconnect
-
-
- добавляем следующее содержимое:
-
-
- задаём права на испольнение:
chmod +x /usr/sbin/wg_disconnect
- Проверяем возможность запуска:
- из любого каталога без указания полного пути
- запускаться от пользователя User с использованием sudo
- Проверяем возможность запуска скрипта без использования sudo: