КЕЙС: Получение доступа к ресурсам и сервисам организации. Проброс трафика в разные подсети (не только организации). Открытие доступа из интернета к внутренним порталам организации. Получение доступа к сайтам департамента вне кмс сети г. Москвы.
РЕШЕНИЕ:
В данной статье рассмотрю решение данной задачи, используя сторонний VDS сервер в интернете. Так же в данной статье рассмотрю получение доступа к порталам, доступным через защищенный канал связи VipNet.
Для реализации нам потребуется любой дешевый VDS сервер с KVM виртуализацией, например firstvds.ru, с тарифом «VDS-KVM-SSD-Прогрев-10.0». Если у вас скорость в ОО больше 100мбит/сек, можете рассмотреть вариант с большей пропускной способностью
На все виртуальные машины, используемые в статье, будет устанавливаться Ubuntu 20.04 (22.04 так же работает, отличий не замечено). В качестве текстового редактора: MC. В качестве файрволла — iptables.
Схема VPN сети будет состоять из:
- PC1 — N — персональные устройства пользователей;
- VDS — виртуальные сервер с WG и WG-Portal на борту;
- VM1, VM2, VM-n — виртуальные машины с клиентами wg для доступа к подсетям за этими клиентами;

На подготовке возможно потребуется написать в техподдержку МЭШ о том, что бы сделали доступ из кмс сети в сети организации, если виртуальная машина будет в 70vlan’е кмс сети. Проверить легко: Из кмс подсети в стандартном варианте не доступы сети 40 vlan’a других адресов комплекса. Если вы разместите виртуальную машину в 40vlan’е любого здания мэш — доступ к кмсу и всем сетям будет по умолчанию.
Так же в данной инструкции опущу глубокую защиту, используя файрволлы и т.д. — это на ваше усмотрение. Так же будет опущена настройка отправка почты с wg-сервера и подключение через AD.
И так… Первые этап — подготавливаем VDS сервер:
- Обновляем систему:
apt update && apt upgrade
- Устанавливаем iptables и netfilter
apt install iptables apt install netfilter-persistent sudo systemctl enable netfilter-persistent sudo systemctl start netfilter-persistent sudo apt-get install iptables-persistent
* Сохранить текущее значение ip в появившемся окне
- Устанавливаем WireGuard
apt install wireguard
- Настраиваем вг, генерируем ключи для сервера: (хотя после всего не понял зачем, но пусть будет!)
wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey
- Создаем конфигурационный файл wg
mcedit /etc/wireguard/wg0.conf
со следующим содержимым:
[Interface] Address = 15.15.0.1/22 PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE ListenPort = 51820 PrivateKey = dtqkr9IvXeU8thJ92bbIMp+tap/l1r1xy0jY9K9oqTU=
-
- Address — адрес сервера всегда .1, а вот маску можно оставить /22 для дальнейшей тонны клиентов;
- ens3 — ваш сетевой интерфейс vds сервера, глянуть можно через
ip a; - PrivateKey — ключ, который генерировали выше;
Сохраняемся на F2, далее выход F10 (Если юзаете mcedit)
- Запустим VPN-сервис и добавим его в автозагрузку:
wg-quick up wg0 systemctl enable wg-quick@wg0
- Устанавливаем докер и после проверим его состояние (выполнять построчно):
sudo apt update sudo apt install apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" sudo apt update sudo apt install docker-compose sudo apt install docker-ce sudo systemctl enable --now docker.socket sudo systemctl restart docker sudo systemctl status docker
Должен отобразится статус докера, если там:
Active: active (running)
TriggeredBy: ● docker.socket
значит продолжаем…
- Устанавливаем wg-portal (веб-морду)
создаем папку
sudo mkdir -p /app/wireguard-portal
переходим в нее
cd /app/wireguard-portal
запускаем контейнер:
sudo docker run -it --cap-add NET_ADMIN -d \ --name wireguard-portal \ -v /etc/wireguard:/etc/wireguard \ -v /app/wireguard-portal/data:/app/data \ -p 8123:8123 \ --network=host \ --env MYVAR2=foo \ --env WG_DEVICES=wg0 \ --env WG_DEFAULT_DEVICE=wg0 \ --env "WG_CONFIG_PATH=/etc/wireguard" \ --env EXTERNAL_URL=http://localhost \ --env "WEBSITE_TITLE=School 0000 WG Portal" \ --env "COMPANY_NAME=School 0000" \ --env ADMIN_USER=admin0000@local.net \ --env ADMIN_PASS=87654321 \ --env "MAIL_FROM=WireGuard VPN <admin0000@local.net>" \ --env "EMAIL_HOST=10.10.10.10" \ --env EMAIL_PORT=25 \ --env LDAP_ENABLED=true \ --env "LDAP_URL=ldap://srv-ad01.company.local:389" \ --env "LDAP_BASEDN=DC=COMPANY,DC=LOCAL" \ --env "LDAP_USER=ldap_wireguard@company.local" \ --env "LDAP_PASSWORD=supersecretldappassword" \ --env "LDAP_ADMIN_GROUP=CN=WireGuardAdmins,OU=Users,DC=COMPANY,DC=LOCAL" \ --restart unless-stopped \ wgportal/wg-portal:v1
Где:
WEBSITE_TITLE= название портала;
COMPANY_NAME= просто название конторы;
ADMIN_USER= логин админа, ОБЯЗАТЕЛЬНО ПОЧТУ!!! (Любую, хоть latex@pidor.da);
ADMIN_PASS= пароль аккаунта админа;
Не забываем открыть доступ в файрволе:
sudo iptables -P INPUT ACCEPT sudo iptables -P OUTPUT ACCEPT sudo iptables -P FORWARD ACCEPT sudo iptables -F
- После этого идем на http://ваш_ип_вдс_сервера:8123 и вводим admin0000@local.net и 87654321 (адрес портала, логин и пароль выше)
- После входа на портал перейти во вкладку из меню «Administration» и нажать на шестеренку в правом углу блока «Interface status for wg0 (server mode)»


-
- Display Name — название тунеля;
- Public Endpoint for Clients — ip адрес vds + порт из строки Listen port, например 78.24.217.66:51820;
- DNS Servers — школьный днс сервер, например 10.89.87.1;
- Default allowed IPs — подсети, в которые клиенты будут ходить. Первая подсеть — это тунель 15.15.0.0/22, далее через запятую ваши тунели.

В поля Post Up вставляем:
iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
В Post Down вставляем:
iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
Сохраняем на SAVE
Далее добавляем пользователя vpn, отвечающего за трафик внутрь школы:
- Первый пусть будет школьная виртуалка VM1, через которую будут доступны подсети школ. Жмем кнопку +Пользователь и указываем:

-
- Client Friendly Name — название клиента;
- Client Email Address — почту, любую, какую хотите;
- Allowed IPs — только ваш тунель — 15.15.0.0/22
- Extra Allowed IPs (Server sided) — Тунель 15.15.0.0/22 + ваши подсети, которые должны быть доступны через этого клиента.
Немного про подсети: В строке Extra Allowed IPs (Server sided) указываем все подсети вашей организации. И 172.*.*.*0/23 и 10.*.*.*/24. Все школы, сады… Все то, что вы видите со своего компьютера ну и соответственно то, что будет видно с виртуальной машины. Весь трафик в указанные подсети будет проходить через данную виртуальную машину. Так же что бы работали сайты департамента, такие как ЕЦХД, СВТ и прочая херабора — далее укажем после наших сетей еще и сети депа:
10.89.87.0/24, 10.15.29.0/24, 10.15.240.0/24, 10.15.255.0/24, 10.15.153.0/24, 10.53.100.0/24, 10.89.88.0/24, 10.206.152.0/24, 10.206.209.0/24, 10.200.82.0/24, 10.126.253.0/24, 10.89.70.0/24, 10.206.240.0/22, 10.87.233.0/24, 10.173.61.0/24, 10.127.134.0/24, 10.207.167.0/24, 10.206.149.0/24, 10.192.0.0/10, 94.79.51.0/24
При таком конфиге все сайты, работающие из школы будут доступны в любом месте где настроен наш vpn. Как видно, подсети прописывать через запятую с указанием маски. Ваши подсети можете получить в техподдержке
-
- Client DNS Servers — удаляем.

- Нажимаем SAVE и еще раз заходим в параметры этого пира, т.к. там опять в поле Allowed IPs появляются все подсети. Нам это немного будет мешать, так что оставляем только 15.15.0.0/22

- На главное странице портала в блоке Interface status for wg0 (server mode) нажать «Сохранить» (значек дискетки). Пока что все!

На этом работа с сервером пока окончена. Сохраним себе конфигурационный файл для виртуальной машины «sch wg» для установки его на VM1 в школе.

Далее… Второй этап — подготавливаем виртуальную машину (клиент VM1) в школе:
- Обновляем систему:
apt update && apt upgrade
- Устанавливаем iptables и netfilter
apt install iptables apt install netfilter-persistent sudo systemctl enable netfilter-persistent sudo systemctl start netfilter-persistent sudo apt-get install iptables-persistent
* Сохранить текущее значение ip в появившемся окне
- Устанавливаем WireGuard
apt install wireguard
- Создаем конфигурационный файл Wireguard:
mcedit /etc/wireguard/wg0.conf
и копируем в него подготовленный ранее конфиг для этой виртуальной машины!
- Запускаем соединение и добавляем в автозагрузку:
wg-quick up wg0 systemctl enable wg-quick@wg0
- Настроим проброс трафика:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE sudo iptables -A FORWARD -i wg0 -o eth0 -j ACCEPT sudo netfilter-persistent save
где:
-
- eth0 — сетевой интерфейс виртуальной машины;
- wg0 — интерфейс wireguard
Далее перезагрузить оба сервера: И ВДС и сервер в Школе!
Проверка: Проверить с vds сервера ping 10.89.87.1 и если пинги пошли, то все работает. Так же проверить пинги до своих подсетей с сервера vds
После… Третий этап — создание пользователей:
- Нажимаем «Добавить клиента»

- Заполняем поля

-
- Client Friendly Name — название пользователя;
- Client Email Address — почту, любую, какую хотите;
- Allowed IPs — подсети, в которые может ходить пользователь. Если у вас будет много разных подсетей (Например ваша школы, випнет, камеры егэ и т.д.) то можно разделять.
- Extra Allowed IPs (Server sided) — не заполняем.
Проверяем наличие DNS адреса и нажимаем сохранить.
- Далее сохраняем файл конфигурации, как делали это ранее, или если подключить нужно телефон — сканируем QR-код.
- Проверяем на клиенте доступ к вашим сетям и работе сайтов, например ЕЦХД (Должна отобразится информация, что доступ из кмс сети)
На этом все! Основной этап выполнен. Вы получили доступ к школьным сетям и сайтам департамента.
Таким образом вы можете завернуть в тоннель любую подсеть или свой сервис.
Например:
- Вы можете развернуть NGYNX — PROXY сервер и пробрасывать порты к любым сервисам школы;
- Вы можете добавить виртуальные машины или физические устройства для доступа на защищенный канал связи;
- Если нет связанности между зданиями или нет навыков/оборудования для объединения сетей — вы можете воспользоваться так же и этим решением и объединить сети;
Много чего можно.
БОНУС! Например, опишу как пробросить трафик в ЗКС используя VipNet (Пусть это будет по схеме VM2):
- Идем на наш портал и создаем клиента Vipnet-SCH (например), как мы делали это ранее для VM1;
- В нем указываем
- Allowed IPs = 15.15.0.0/22 (только наш тунель)
- Extra Allowed IPs (Server sided) =
10.15.153.0/24, 10.89.78.7/32, 10.89.88.193/32, 10.89.116.252/32, 10.126.77.0/24, 10.129.116.0/24, 10.129.117.0/24, 10.129.118.0/24, 10.129.119.0/24, 10.206.149.1/32, 10.206.152.120/32, 10.254.240.2/32, 192.168.199.12/32, 10.15.97.151/32, 10.15.146.0/24, 10.15.149.0/24, 10.15.155.0/24, 10.207.164.0/24, 10.3.48.15/32, 10.3.46.15/32, 10.3.47.15/32, 10.3.48.20/32, 10.3.48.30/32, 10.3.49.15/32, 10.3.54.15/32, 10.3.54.17/32, 10.40.86.3/32, 10.60.43.2/32, 80.250.169.100/32
Это все подсети защищенки, там и лк ппэ и трудозатраты и чет еще.
-
- DNS сервер не указываем
- Не забываем поставить галку «Ignore global settings (g)», сохранить и еще раз зайти в настройки, что б почистить Allowed IPs.
- Сохраняем себе файл конфигурации и приступаем к настройке виртуальной машины с VipNet
Устанавливаем Astra Linux на виртуалку VM2. без разницы где, ей нужен простой доступ в интернет. Параметры виртуалки: У меня это 1 процессор, 4Гб озу и 30Гб хдд.
Если вы будите делать как я на Hyper-V, то:
- Виртуальная машина обязательно «Поколение 2»
- В параметрах виртуальной машины вкладка «Безопасность» -> Убрать галку «Включить безопасную загрузку»
- Подключаем в CD образ «Astra Linux для ППЗ и Верификации в ППЭ (clear).iso»
Установка Астры стандартна, «Продолжить», «Продолжить»… Делаем все что спрашивает установщик! Я использовал имя пользователя user с паролем 87654321 и разбивал весь диск в авто-режиме.
Ядро 6.1, доп параметр при установке был только «Средства удаленного подключения по SSH»
После установки включите репозитории:
- Панель управления -> Системные -> Менеджер пакетов. Вкладка «Настройки» -> «Репозитории» и выберите все галки )
- На предложение «Обновить пакеты» киваем Да и после обновления в этом же менеджере пакетов ищем wireguard и wireguard-tools
- Выделяем их для установки и нажимаем «Применить».
Качаем vipnetclient-gui_gost_ru_amd64_4.13.1-17762.deb и двойным кликом устанавливаем пакет
После установки в меню пуск ищем vipnet, запускаем, добавляем ключи и стартуем випнет. Там ничего сложного.
Внимание: Одинаковые ключи не могут работать одновременно! Какой то из випнетов просто уберите и забудьте про него, а его ключ используйте на виртуалке!
Далее потребуется пердолинг в консоль:
sudo -i
Создаем файл WG —
mcedit /etc/wireguard/wg0.conf
и вставляем полученный ранее конфиг WG для данной машины
Поднимаем соединение и добавляем его в автозагрузку
wg-quick up wg0 systemctl enable wg-quick@wg0
Проверяем сетевые интерфейсы командой ip a, у нас должны быть 2 интерфейса рабочих: wg0 и tun0
Если да, то делаем проброс:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE iptables -A FORWARD -i wg0 -o tun0 -j ACCEPT iptables -A FORWARD -i tun0 -o wg0 -j ACCEPT
и сохраняем
sudo touch /etc/iptables.rules sudo chmod 640 /etc/iptables.rules sudo iptables-save | sudo tee /etc/iptables.rules > /dev/null
К сожалению, потребуется ребутнуть вдс и подождать пока все клиенты назад цепанутся к туннелю.
Далее прописать клиентам (пользователям) новые подсети в их конфигах — так же через запятую к уже имеющимся подсетям у клиентов добавить:
10.15.153.0/24, 10.89.78.7/32, 10.89.88.193/32, 10.89.116.252/32, 10.126.77.0/24, 10.129.116.0/24, 10.129.117.0/24, 10.129.118.0/24, 10.129.119.0/24, 10.206.149.1/32, 10.206.152.120/32, 10.254.240.2/32, 192.168.199.12/32, 10.15.97.151/32, 10.15.146.0/24, 10.15.149.0/24, 10.15.155.0/24, 10.207.164.0/24, 10.3.48.15/32, 10.3.46.15/32, 10.3.47.15/32, 10.3.48.20/32, 10.3.48.30/32, 10.3.49.15/32, 10.3.54.15/32, 10.3.54.17/32, 10.40.86.3/32, 10.60.43.2/32, 80.250.169.100/32
и вуаля — все сайты випнета доступны без випнета ))))
ТРАБЛА: Иногда VipNet может не подняться после ребута виртуалки, хз с чем связано. Забил)))
Как то так!
Согласен, с нуля очень много и сложно. Но если разобраться — банально просто. В рабочую схему добавляются легко новые виртуалки или физические устройства для проброса в разные подсети.
Будут вопросы — в комментарии, попробуем разобраться вместе!
