Сразу скажу: Не реклама VPN’а и не обход блокировок! Все делаете на свой страх и риск, и должны понимать о последствиях!

КЕЙС: Получение доступа к ресурсам и сервисам организации. Проброс трафика в разные подсети (не только организации). Открытие доступа из интернета к внутренним порталам организации. Получение доступа к сайтам департамента вне кмс сети г. Москвы.

РЕШЕНИЕ:

В данной статье рассмотрю решение данной задачи, используя сторонний 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 может не подняться после ребута виртуалки, хз с чем связано. Забил)))

Как то так! 

Согласен, с нуля очень много и сложно. Но если разобраться — банально просто. В рабочую схему добавляются легко новые виртуалки или физические устройства для проброса в разные подсети.

Будут вопросы — в комментарии, попробуем разобраться вместе!

 


Мы используем cookie

Сайт использует файлы cookie для работы необходимых функций, аналитики и маркетинга. Вы можете принять все cookie, отклонить необязательные или настроить согласие по категориям.

Аналитика: Яндекс.Метрика. Маркетинг: Ядекс.Реклама.