Вводные
- Сервер 1С с опубликованным по HTTP тонким клиентом или RDP.
- Проброс портов сделать невозможно
- Нужно организовать безопасное прямое подключение к серверу (заменить anydesk и подобные подключения для пользователей)
Схема сети
Пользовательские ПК и Сервер 1С подключаются к маршрутизатору используя UDP OpenVPN. Между подсетями VPN настраивается маршрут посредством которого пользователи на сетевом уровне имеют доступ к серверу.
Реализация
Организация виртуальной машины
Приобретаю виртуальную машину на которую можно установить с образа iso pfSense, именно это приложение потому что
- умею его настраивать под свои задачи
- наличие удобного web интерфейса администрирования, то что внутри FreeBSD на мою работу не влияет
- удобного интерфейса формирования файла настроек OpenVPN
В качестве хостера использую firstvds.ru (документация на админ панель), по соотношению цена/качество меня устраивает.
Виртуальную машину беру VDS-KVM-Старт-7.0 (Виртуализация: KVM , Процессор: 1 ядро, Память: 1 Гб, Диск: 30 Гб HDD+SSD), стоимость в пределах 200 руб./мес.
По минимальным требованиям проходит (ссылка на требования), важна виртуализация KVM, на OVZ невозможно установить свою ОС.
Скачиваю архив с официального сайта (ссылка)
Распаковываю архив и загружаю в админ панель хостера iso файл, прикрепляя образ к виртуальной машине.
Установка
После подключения iso и установки в приоритет загрузки перезагружаю VM (виртуальную машину), подключаюсь через VNC (при ошибке подключения напишите в тех поддержку включат). Устанавливаю, порядок установки скрыл под спойлер, т.к. он сводится к нажатию клавиши Enter на наборе экранов. (документация)
- Соглашаюсь с лицензией
- Выбираю установку pfSense
- Выбираю раскладку по умолчанию
- Выбираю разметку
- После выбора автоматически начинается установка.
- При окончании установки предлагается установить настройки вручную, отказываемся.
- Перезагружаю VM
При перезагрузке будет произведена загрузка с iso, поэтому
- останавливаю VM
- отключаю iso диск
- запускаю VM
Начальная настройка
1. Отказываюсь от использования vLAN
2. Указываю интерфейс для WAN
3. Нажимаю Enter подтверждая что LAN интерфейса нет
4. Подтверждаю настройки
Система пытается получить IP адрес по DHCP, но безуспешно, жду пока тайминги ожидания пройдут.
В результате настройки получаем окно приветствия.
5. Настраиваю IP адрес интерфейса
6. Редактирую конфигурационный файл для установки корректной подсети и основного шлюза
- выхожу из оболочки "ctrl + Z"
- открываю на изменение файл "vi /conf/config.xml" (ссылка на инструкцию по работе)
- изменяю данные в разделе интерфейса wan
7. перезагружаю VM командой reboot
8. Создаю маршрут по умолчанию
- выхожу из оболочки "ctrl + Z"
- route add -net 10.0.0.1/32 -iface vtnet0
- route add default 10.0.0.1
- проверяю ping 77.88.8.8
В результате админ панель доступна по внешнему IP.
Логин/пароль по умолчанию admin/pfsense, изменяю его через меню "System / User Manager / Users".
"Мастер настройки" проходить не обязательно, общие параметры отдельно указать в "System / General Setup" (Hostname, Domain, DNS Servers)
Если перезагрузить VM то маршрут слетит, для решения вопроса нужно
- установить пакет "Shellcmd" через "System / Package Manager / Available Packages" (документация по установке)
- после установки настройках пакета "Services / Shellcmd" прописать команды из п.8, результат:
Настройка VPN
Сервер и пользовательские ПК подключаются к Remote acces VPN как клиенты.
Для работы VPN используются SSL сертификаты, вся цепочка хранится в рамках сервера.
1. Добавляем корневой сертификат в разделе "System / Certificate Manager / CAs"
- Descriptive name: internal-ca
- Method: Create an internal Certificate Authority
- Common Name: internal-ca
2. Добавляем сертификаты серверов VPN (to-server, to-client) в разделе "System / Certificate Manager / Certificates"
- Method: Create an internal Certificate
- Descriptive name: ovpn-ra-to-server (ovpn-ra-to-client)
- Certificate authority: internal-ca
- Common Name: ovpn-ra-to-server (ovpn-ra-to-client)
- Certificate Type: Server Certificate
сертификат "webConfigurator default" нужен для включения HTTPS админ панели.
3. Добавляем сервера VPN через "VPN / OpenVPN / Servers"
- Server mode: Remote Access ( SSL/TLS )
- Local port: 1194 (1195 для to-client)
- Description: ovpn-ra-to-server (ovpn-ra-to-client)
- Server certificate: ovpn-ra-to-server (ovpn-ra-to-client)
- IPv4 Tunnel Network: 10.0.8.0/24 (10.0.9.0/24 для to-client)
- Custom options:
push "route 10.0.9.0 255.255.255.0"
push "route 10.0.8.0 255.255.255.0"
это маршруты между сетями которые передаются на клиенты OVPN.
4. Добавляем пользователей с клиентскими сертификатами через "System / User Manager / Users", пример для сервера 1С:
- Disabled: true (This user cannot login)
- Username: server_1c
- Password: 123
- Certificate: true (Click to create a user certificate)
- Certificate authority: internal-ca
- Descriptive name: server_1c
5. Добавляем правила доступа к серверу через "Firewall / Rules / WAN"
- Protocol: UDP
- Destination: WAN address
- Destination Port Range: from 1194 to 1195
Поле добавления в форме списка правил применяем правила "Apply Changes"
6. Для удобной генерации конфигурационных файлов клиентов устанавливаем пакет "openvpn-client-export" через "System / Package Manager / Available Packages"
7. Формируем, скачиваем конфигурационные файлы клиентов через "VPN / OpenVPN / Client Export"
Выбираем нужный сервер, напротив имени пользователя скачиваем конфигурационный файл
8. Скачиваем клиент OpenVPN с официального сайта https://openvpn.net/community-downloads/, устанавливаем. Обращаем внимание на различные клиенты под win7 и win10, разница в TAP драйверах.
9. Копируем скачанный ".ovpn" файл в "c:\Program Files\OpenVPN\config\", подключаемся к серверу
10. На главной странице админ панели добавляем виджет OpenVPN и убеждаемся что оба клиента подключены
11. Разрешаем доступ по OVPN через "Firewall / Rules / OpenVPN"
Добавляем правило с
- Protocol: any
Применяем настройки.
12. Проверяем доступ с клиента до сервера через ping 10.0.8.2
Закрытие доступа к админ панели
В разделе "System / Advanced / Admin Access" устанавливаем флаг Anti-lockout: true (Disable webConfigurator anti-lockout rule)
Заходим в админ панель через http://10.0.9.1
Запуск на сервере как сервис
Для постоянной работы на стороне сервера 1С (без привязки к клиентскому сеансу) имеет смысл запустить OVPN клиент как службу.
1. отключить подключение через GUI
2. Запустить сервис "OpenVPNService" и поставить автоматический запуск
Тестирование
Тестировал с помощью iperf (https://iperf.fr/)
- на стороне клиента канал 100 МБит/сек,
- на стороне сервера канал 40МБит/сек
- на сервере VPN одно ядро Intel(R) Xeon(R) Silver 4214 CPU @ 2.20GHz
Средний показатель 20Мбит/сек при 50% загрузке CPU и Load average 0.4
Итог
При желании за небольшие деньги можно организовать безопасное подключение к серверу 1С используя VPN.
Благодарю за внимание.