
В этой статье я хочу рассказать о полученном опыте организации удалённого доступа к промышленному программируемому логическому контроллеру (далее — ПЛК) посредством бюджетного решения на базе интернет-центра KEENETIC 4G.
Данная статья будет особенно интересна специалистам в области АСУТП, которые задались вопросом организации удалённого доступа, но не знали с чего начать.
Итак, начнём!
В данном примере рассмотрим наиболее часто встречающийся вариант, а именно:
- Локальный компьютер, который будет являться OpenVPN сервером с установленным пакетом TIA Portal для программирования ПЛК. (локальная сеть 192.168.1.0)
- Маршрутизатор предприятия с внешним белым IP — адресом (например, 217.196.58.128).
- Интернет-центр KEENETIC 4G с установленным клиентом OpenVPN подключенный к мобильной связи.
- Программируемый логический контроллер SIMATIC S7-1500 (локальная сеть 192.168.112.0).
Наличие внешнего белого IP — адреса на одной из сторон является необходимым условием работы OpenVPN сервера (сервер OpenVPN должен быть расположен на стороне белого IP — адреса).
Для организации VPN соединения между Интернет-центром KEENETIC и рабочем местом нам необходимо установить следующее ПО:
- OpenVPN — программа для создания безопасных виртуальных частных сетей, удаленного подключения к серверу
- XCA — программа для лёгкого создания сертификатов с графическим интерфейсом
- Notepad++ — текстовый редактор (необязательно)
Установка пакета OpenVPN на Windows.
Устанавливаем компонент EasyRSA (для создания сертификатов встроенными средствами (необязательно).

В случае вывода сообщения об установке драйвера, нажимаем «установить».

В случае, если требуется установить несколько виртуальных адаптеров или если виртуальный адаптер был некорректно установлен, то переходим по нижеприведённому адресу и запускаем «addtab.bat» скрипт:
C:\Program Files\TAP-Windows\bin

Создание X.509 сертификатов
1. Устанавливаем XCA
XCA — программа для лёгкого создания сертификатов с графическим интерфейсом
2. Создаём БД
«Файл» -> «Новая база данных», далее программа запросит ввод пароля, вводим пароль или оставляем поля пустыми и нажимаем «ОК».

3. Создаём сертификат удостоверяющего центра (CA)
Для этого переключаемся на вкладку «Сертификаты» и нажимаем на кнопку «Новый сертификат»

Далее переключаемся на вкладку «Субъект» и заполняем необходимые поля (то, что выделено красным должно иметь уникальное имя).

Нажимаем «Сгенерировать новый ключ» и подтверждаем действие нажатием кнопки «создать».

Переключаемся на вкладку «Расширения», выбираем тип сертификата «Центр Сертификации» и настраиваем срок действия сертификата (сертификат CA должен иметь более длительный срок действия, чем сертификаты компьютера, которые будут созданы позже.)

Нажимаем «ОК» и теперь мы можем приступить к настройке сертификатов компьютера.
4. Создание шаблонов сертификатов компьютера
Для упрощения создания машинных сертификатов будем использовать заранее приготовленный шаблон. Переключаемся на вкладку «Шаблоны» и нажимаем на кнопку «Новый шаблон».

Выбираем «Пустой шаблон» и переходим к редактированию нашего шаблона, имена в угловых скобках в будущем должны быть уникальными.

Переходим на вкладку «Расширения», задаём тип «Конечный субъект» и настраиваем период действия сертификата компьютера (должен быть не больше чем у сертификата удостоверяющего центра).

Нажимаем «Ок» для создания шаблона.
Данный шаблон теперь может быть использован как базовый в качестве создания машинных сертификатов, подписанных нашим удостоверяющим центром.
5. Создания сертификатов компьютера с использованием шаблона
Переключаемся на вкладку «сертификаты» и нажимаем на кнопку «Новый сертификат», выбираем опцию «Использовать этот сертификат для подписи», в качестве шаблона выбираем наш шаблон <My_Machine> и нажимаем на кнопку «Применить всё».

Далее переходим на вкладку «Субъект» вводим уникальное имя, например, «My_Server», генерируем ключ.

Таким образом мы создали сертификат сервера. Проделываем туже самую процедуру для сертификата клиента (My_Client).

6. Экспорт машинных сертификатов и ключей
Для создания конфигурационного файла OpenVPN клиента (KEENETIC) и сервера (ПК Windows) нам потребуется экспортировать сертификат удостоверяющего центра, сертификат сервера, сертификат клиента, закрытый ключ сервера, закрытый ключ клиента.
Для этого переходим на вкладку «Сертификаты» выбираем сертификат удостоверяющего центра My_CA нажимаем на кнопку «Экспорт» и выгружаем в заранее созданную папку, например My_Keys, расположенную на рабочем столе.

Проделываем тоже самое для сертификата клиента (My_Client) и сертификата сервера (My_Server).
Переключаемся на вкладку «Закрытые ключи» выбираем ключ My_Client, нажимаем экспорт и выгружаем в нашу папку.

Проделываем туже самую процедуру для ключа сервера.
7. Создания параметра Диффи-Хэллмана
Для конфигурации параметров сервера нам также потребуется параметр Диффи-Хэллмана
Для создания параметра нажимаем на вкладку «Дополнительно» и выбираем пункт «Сгенерировать параметры Дифии-Хэллмана».

Далее выбираем длину параметра, например, 2048. Далее выгружаем наш параметр в папку с ключами.

В итоге в нашей папке должны находиться следующее файлы:
- Сертификат удостоверяющего центра My_CA.crt
- Сертификат клиента My_Client.crt
- Сертификат сервера My_Server.crt
- Закрытый ключ клиента My_Client.pem
- Закрытый ключ сервера My_Server.pem
- Параметр Дифии-Хэллмана dh2048.pem

Создание файлов конфигурации клиента и сервера
Т.к. протоколом промышленной связи S7-1500 является Profinet, то для установления соединения с ПЛК нам потребуется организовать L2 соединение, которым в данном случае является TAP-интерфейс.
Настройка конфигурации OpenVPN сервера
Для создания файла конфигурации сервера перейдите в папку с конфигурационными файлами OpenVPN [ C:\Program Files\OpenVPN\config ] и создайте файл TAP_Server с расширением .ovpn

Откройте файл TAP_Server.ovpn программой просмотра текстовых файлов (например, Notepad++) и скопируйте следующий текст:
# Указываем работу на L2 уровне
dev tap
# Параметр, используемый в Windows системах
# Указываем имя нашего TAP-Windows адаптера
dev-node MyTap
# Конфигурируем сервер в режиме моста для TAP устройств
server-bridge
# Указываем протокол работы сервера и версию IP
proto udp4
# Указываем номер порта, на котором будет работать OpenVPN
port 50501
# Пинговать каждые 10 секунд сервер и если в течение 120 секунд
# не будут получены ответные пакеты, перезапустить подключение.
keepalive 10 120
# Указывает алгоритм шифрования
cipher AES-256-CBC
# Уровень детализации лога
verb 3
# Во внутрь копируем сертификат удостоверяющего центра
<ca>
</ca>
# Во внутрь копируем сертификат ключа
<cert>
</cert>
# Во внутрь копируем закрытый ключ
<key>
</key>
# Во внутрь копируем параметр (ключ) Diffie-Hellman (Диффи-Хеллмана).
<dh>
</dh>
Затем откройте программой просмотра текстовых файлов My_CA.crt, My_Server.crt, My_Server.pem, dh2048.pem и скопируйте текст из:
My_CA.crt в <ca> </ca>
My_Server.crt в <cert> </cert>
My_Server.pem в <key> </key>
dh2048.pem в <dh> </dh>

в результате получим следующее:
dev tap
dev-node MyTap
server-bridge
proto udp4
port 50501
keepalive 10 120
cipher AES-256-CBC
verb 3
<ca>
-----BEGIN CERTIFICATE-----
MIIDqjCCApKgAwIBAgIIJJ8tf67Csf4wDQYJKoZIhvcNAQELBQAwgYsxCzAJBgNV
BAYTAlJVMRQwEgYDVQQIEwtLUkFTTk9ZQVJTSzEUMBIGA1UEBxMLS1JBU05PWUFS
U0sxDjAMBgNVBAoTBU15T1JHMQ4wDAYDVQQLEwVNeU9SRzEOMAwGA1UEAwwFTXlf
Q0ExIDAeBgkqhkiG9w0BCQEWEW15ZW1haWxAbXlob3N0Lnh4MB4XDTE5MTIxMzAw
MDAwMFoXDTQ5MTIxMjIzNTk1OVowgYsxCzAJBgNVBAYTAlJVMRQwEgYDVQQIEwtL
UkFTTk9ZQVJTSzEUMBIGA1UEBxMLS1JBU05PWUFSU0sxDjAMBgNVBAoTBU15T1JH
MQ4wDAYDVQQLEwVNeU9SRzEOMAwGA1UEAwwFTXlfQ0ExIDAeBgkqhkiG9w0BCQEW
EW15ZW1haWxAbXlob3N0Lnh4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
AQEA3dJoAVl7foXZMavZIr9RTB59h+El26OYll7KMBHritf+x8DEVjcg86uyDSf0
yzLtAR+8J013W3SRDVpl3gqdk3t1qb7Paz1OUrV2Hu3N5Ws1s4elpENTQAe1HFZS
u0NRhXBCxTTyToNdb1pKcIJziVNLXdTL+pud0T8FNs6q37t14XFkfDOw85m7y3py
vU8+ucmQEd5vOKPjcY1jklVZkQJKcGTI77x/R2k6HK7ryul5uIepi/RrVrgTNe5W
rYWuk6wlmmFLvgdzoVaBJO8edo89M7oJIQFMNN9x3cpbths6/3ZummBktfgVa7xy
3fs//M5v1pjnYeJ5wd5tiCXkpQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqG
SIb3DQEBCwUAA4IBAQDbNhPy3IftjPVNyaUH/5AW6R0Fjqoct/55ZMDrdWlLY1mo
iTTxhFPv1DbilUE/nr+SwGvZV2MQs4G1hi9PgGqY5a+lJCSios8BJ7zlrt/LLQQ/
st0r2wzpCYROxoi+zu9YNGZJPP9GI3KdcVye9Rt3vbLbL8LQ8kKKwn3Ju5i1SUMy
gzvGTNUPtqOKVJid39IIdva3iMUBspfMGv2EcaGaRWekW9Pni/gBS2eHkBH1/X6n
KiopjtZw7A4RPHzC58jp+ypT/X63tPwf5+kWsMDeLG1XTKnLoPeAVNtszMhGsgzE
DoZUuL4pb8XbpcnrPlgp0WSkrf1RJrJGuArvUDLu
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
MIIDyzCCArOgAwIBAgIIINPrUqBedY8wDQYJKoZIhvcNAQELBQAwgYsxCzAJBgNV
BAYTAlJVMRQwEgYDVQQIEwtLUkFTTk9ZQVJTSzEUMBIGA1UEBxMLS1JBU05PWUFS
U0sxDjAMBgNVBAoTBU15T1JHMQ4wDAYDVQQLEwVNeU9SRzEOMAwGA1UEAwwFTXlf
Q0ExIDAeBgkqhkiG9w0BCQEWEW15ZW1haWxAbXlob3N0Lnh4MB4XDTE5MTIxMzAw
MDAwMFoXDTQ5MTIxMjIzNTk1OVowgY8xCzAJBgNVBAYTAlJVMRQwEgYDVQQIEwtL
UkFTTk9ZQVJTSzEUMBIGA1UEBxMLS1JBU05PWUFSU0sxDjAMBgNVBAoTBU15T1JH
MQ4wDAYDVQQLEwVNeU9SRzESMBAGA1UEAwwJTXlfU2VydmVyMSAwHgYJKoZIhvcN
AQkBFhFNeUVtYWlsQE15SG9zdC54eDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
AQoCggEBAJhJYVC8WJneQTTO9p7NJvS803W1lq/8Z78Vx8J5jejVhXXZa0NYfXX8
iiXUr26vdhXN5htSNgktz9Tr5zUHwKhzpq+yYICPS44AmzMJByPBhjHUq7/HjnOA
e78k80OTzqL5XH8olrQc7690K1GW3b0PduH+bYykDGijQ8vlkwBKQhgxeo7zkTrm
VWsgmFJEbrdGoZPnwyHrStMHM0f6UMkEWqooughphaxtJWzS4GJES09z3VSN/3CV
FuV2Jn3UGyoEHKrZUa/kFgRx9j9AqRx3//WFusm2KPUim+IA4SLoXP5M6pZXaxvA
Z4y5b2xIc/OFFX5DfaCSpAMFwzZFYXkCAwEAAaMtMCswCQYDVR0TBAIwADAeBglg
hkgBhvhCAQ0EERYPeGNhIGNlcnRpZmljYXRlMA0GCSqGSIb3DQEBCwUAA4IBAQAZ
EXHnqu9Ilz6+w4SB/wfl5HG3UyS2n8oNpTHbFkX1Sn2+2FFuSCZlxhQYyhZKUjRq
NsbWMMcwRDST9V6cPw6iaTPfz2G8zaBFjsemnyYD6YttNmdqXgv5wiik3btP2Jk2
3msmg8MlA/EgeZWSFe0ee4yE+L145JgtEQeg0xb7t8J9OOt3W1GVnoX1hQa2GePH
PlKqc5ooPAuzIW4kWzxQefqcV5j1Rof98/dQJwJwCatRYgFciOZe26rcsu0R1iKF
yS6NB+HwJxZY1ExPcSDmiVu5cyeasSLp1bxcqb9V7a3e9YxNZ8AVmjh/NfOcb2a/
/Mx8QxPEP7g+B6tWfF/Q
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAmElhULxYmd5BNM72ns0m9LzTdbWWr/xnvxXHwnmN6NWFddlr
Q1h9dfyKJdSvbq92Fc3mG1I2CS3P1OvnNQfAqHOmr7JggI9LjgCbMwkHI8GGMdSr
v8eOc4B7vyTzQ5POovlcfyiWtBzvr3QrUZbdvQ924f5tjKQMaKNDy+WTAEpCGDF6
jvOROuZVayCYUkRut0ahk+fDIetK0wczR/pQyQRaqii6CGmFrG0lbNLgYkRLT3Pd
VI3/cJUW5XYmfdQbKgQcqtlRr+QWBHH2P0CpHHf/9YW6ybYo9SKb4gDhIuhc/kzq
lldrG8BnjLlvbEhz84UVfkN9oJKkAwXDNkVheQIDAQABAoIBAGZFmapr4yDqx2Xc
vHmnk0r3aRf7LMjhvRbyXKZ5ldlRVIDx0/x1eER9ppWDgZHXGnnIPooIqyt87b+z
8iGGJFe826vRIsgT9AzY0WHz5SyZMjNS/Ukdjsh4+CJFgW3X3QVMbFclfhhV+o4d
eV4g8KegtBlQEmhKX98CDmznr9KYAxBtiMODkG3gi523+8qgOH5Nqgr+0CGxwcJU
4fDHadjbSj7+12ZrY3TVZm451fEzgh2nPAseyAoNYe0CM9hExmq4jeNxjZFQHNBv
refghZaPmyuRWSOfzNbEwRsLCZeLUHDdrNvsPRnFvmLcFhtFKwctngvkGK5lPs1w
dCgs8pUCgYEAyJOsi+ZTAWTjJC1pCr3FRJEjoqfqZGw/OLCKV7PBF8Yf2DIB+LDD
gfgoMi39sK/HkaH1H6CqD1Gter8WE67gAURvo5UjK4vFAGhmQSbiwhRUCRKRljwT
zB4k649XpD8fiOzd9S12uKyr8EvvDbOz9x1XcxQELcqURIunTuDH4CsCgYEAwl3F
twSkSOPYG2AeLnuwf8sYtFbcvSYL/8cGovOuZ0GlSLpHO2k1qhUzl6HrpIhEyVom
IQRJW9S5lB7z5lU/CVcbGmYLwu4y5/tl4MeG8NOEj1o8FR9RzUw92dSSKoMfCMad
lz/RmOrBnX4pwqICs7r7h7VsnOsr/AYn5H04zusCgYEAwHHv+8rhmVTTGsL3Jfcu
brtTFZ1Gp1O01Q+NrNgrTEQsCaLxgUsYSntvFbZK0lvVf0WFivL8N/aGHF97Lyd6
hbzD4JAXTpCsU9fXRGuq5cvbVVkblqnN1OqXQewmitCF0TpzO+qDHm2OCuDQXLUu
1sqwPRnXaJgV6i6UOHozTEECgYEAgmguFqxrmWgdf8iOl3tvoV5f1eeNtO7JEDS1
1DEQ68CUp+YrksX1NoeBFRSTqNGw7TOp728T1SQ12xalZ/38DEVALwcWjxQIXbND
2HumowAXqaLOOxHHbangub0w0IsnEFlKNMeh1ipz+zpBxI+0pmgnCReFpwb2fOKY
c2o86j8CgYAWTWn/Y1/bNgtStzya6fbxpc4Mc2nCZu6bTQpAgA44r+nRJuHpVm0T
cGDKj4NZ8H4wqMmk58GoOreAVsX4qXeN9QkdfAR5dA8eWVz42faC328W3G4VA5cc
GvTqDMzq0j3bz+4csHMn3BHatHymjgsg0sgc8FshuD6dQk0NNruk9A==
-----END RSA PRIVATE KEY-----
</key>
<dh>
-----BEGIN DH PARAMETERS-----
MIIBCAKCAQEAlpVUnvCTJ1XF9mnwhf+P+QZhVWsNyRaqEgLuO2a/fGUqPESU9KRo
bDa489awzJs6j/JCKh1xR5H5JLE+Ho6XdgIXH9LTr03BV3PsPQiA28ZiluekBGGY
ps7dTLr0Ex4V6Ae3+E+Z7lM/Yhsa4w6fl+GNRkastD42Nx4g4iN+cIerLMFCRPl1
P7Go36VbEtO/aNX/zNExmcDsYSqiLkBeGrNxXen2Loqex5AlwE9WOliUbak6Ra/W
vf21Wi03TvBBfjEDKtM/Bsyo8Ar2lgBYIrANvylU/0Gg8OyRWqcIoQjwPyjavAHd
v14V1igYDa1xP9WQ262DMHfHLhqwjOW2GwIBAg==
-----END DH PARAMETERS-----
</dh>
Настройка конфигурации OpenVPN клиента
Для создания файла конфигурации клиента перейдите в папку с конфигурационными файлами OpenVPN [ C:\Program Files\OpenVPN\config ] и создайте файл TAP_Client с расширением .ovpn
Откройте файл TAP_Server.ovpn программой просмотра текстовых файлов (например Notepad++) и скопируйте следующий текст:
# Указываем, что мы используем клиентское подключение
client
# Указываем работу на L2 уровне
dev tap0
# Указываем протокол работы сервера и версию IP
proto udp4
# Указываем номер порта, на котором будет работать OpenVPN
port 50501
# Задает сервер, к которому должен подключаться клиент
# могут использоваться записи IP и DNS.
remote 217.196.58.128
# Указывает алгоритм шифрования
cipher AES-256-CBC
# Уровень детализации лога
verb 3
# Во внутрь копируем сертификат удостоверяющего центра
<ca>
</ca>
# Во внутрь копируем сертификат клиента
<cert>
</cert>
# Во внутрь копируем закрытый ключ клиента
<key>
</key>
Затем откройте программой просмотра текстовых файлов My_CA.crt, My_Client.crt, My_Client.pem и скопируйте текст из:
My_CA.crt в <ca> </ca>
My_Client.crt в <cert> </cert>
My_Client.pem в <key> </key>

в результате получим следующее:
client
dev tap0
proto udp4
port 50501
remote 217.196.58.128
cipher AES-256-CBC
verb 3
<ca>
-----BEGIN CERTIFICATE-----
MIIDqjCCApKgAwIBAgIIJJ8tf67Csf4wDQYJKoZIhvcNAQELBQAwgYsxCzAJBgNV
BAYTAlJVMRQwEgYDVQQIEwtLUkFTTk9ZQVJTSzEUMBIGA1UEBxMLS1JBU05PWUFS
U0sxDjAMBgNVBAoTBU15T1JHMQ4wDAYDVQQLEwVNeU9SRzEOMAwGA1UEAwwFTXlf
Q0ExIDAeBgkqhkiG9w0BCQEWEW15ZW1haWxAbXlob3N0Lnh4MB4XDTE5MTIxMzAw
MDAwMFoXDTQ5MTIxMjIzNTk1OVowgYsxCzAJBgNVBAYTAlJVMRQwEgYDVQQIEwtL
UkFTTk9ZQVJTSzEUMBIGA1UEBxMLS1JBU05PWUFSU0sxDjAMBgNVBAoTBU15T1JH
MQ4wDAYDVQQLEwVNeU9SRzEOMAwGA1UEAwwFTXlfQ0ExIDAeBgkqhkiG9w0BCQEW
EW15ZW1haWxAbXlob3N0Lnh4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
AQEA3dJoAVl7foXZMavZIr9RTB59h+El26OYll7KMBHritf+x8DEVjcg86uyDSf0
yzLtAR+8J013W3SRDVpl3gqdk3t1qb7Paz1OUrV2Hu3N5Ws1s4elpENTQAe1HFZS
u0NRhXBCxTTyToNdb1pKcIJziVNLXdTL+pud0T8FNs6q37t14XFkfDOw85m7y3py
vU8+ucmQEd5vOKPjcY1jklVZkQJKcGTI77x/R2k6HK7ryul5uIepi/RrVrgTNe5W
rYWuk6wlmmFLvgdzoVaBJO8edo89M7oJIQFMNN9x3cpbths6/3ZummBktfgVa7xy
3fs//M5v1pjnYeJ5wd5tiCXkpQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqG
SIb3DQEBCwUAA4IBAQDbNhPy3IftjPVNyaUH/5AW6R0Fjqoct/55ZMDrdWlLY1mo
iTTxhFPv1DbilUE/nr+SwGvZV2MQs4G1hi9PgGqY5a+lJCSios8BJ7zlrt/LLQQ/
st0r2wzpCYROxoi+zu9YNGZJPP9GI3KdcVye9Rt3vbLbL8LQ8kKKwn3Ju5i1SUMy
gzvGTNUPtqOKVJid39IIdva3iMUBspfMGv2EcaGaRWekW9Pni/gBS2eHkBH1/X6n
KiopjtZw7A4RPHzC58jp+ypT/X63tPwf5+kWsMDeLG1XTKnLoPeAVNtszMhGsgzE
DoZUuL4pb8XbpcnrPlgp0WSkrf1RJrJGuArvUDLu
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
MIIDyzCCArOgAwIBAgIII6a7Y3h+sS0wDQYJKoZIhvcNAQELBQAwgYsxCzAJBgNV
BAYTAlJVMRQwEgYDVQQIEwtLUkFTTk9ZQVJTSzEUMBIGA1UEBxMLS1JBU05PWUFS
U0sxDjAMBgNVBAoTBU15T1JHMQ4wDAYDVQQLEwVNeU9SRzEOMAwGA1UEAwwFTXlf
Q0ExIDAeBgkqhkiG9w0BCQEWEW15ZW1haWxAbXlob3N0Lnh4MB4XDTE5MTIxMzAw
MDAwMFoXDTQ5MTIxMjIzNTk1OVowgY8xCzAJBgNVBAYTAlJVMRQwEgYDVQQIEwtL
UkFTTk9ZQVJTSzEUMBIGA1UEBxMLS1JBU05PWUFSU0sxDjAMBgNVBAoTBU15T1JH
MQ4wDAYDVQQLEwVNeU9SRzESMBAGA1UEAwwJTXlfQ2xpZW50MSAwHgYJKoZIhvcN
AQkBFhFNeUVtYWlsQE15SG9zdC54eDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
AQoCggEBAM1xGkTl0fTge3jacEgSkrMoN3wgIr94Y1uD574XqxKYdH11hEdldTLa
gx8MGLIYaXN/HQTEYuhxpk+EX0Mqns9TazGouvE2/poP4KiO8iSHVO9PaaKO0OKq
Y7ctt4TVBdnD2UjiHCq5DfQ/T6UGv4bOR61RCqymyBnnVQ/KyR0DX4/U+jLx9wxS
d5OLD0SSqOjdLTnI1gBpEphRuPo6705I+eM7cATyoL17GMgAQ1W4zLzq3ojNPCo3
U/P0tPvQi6hHoJv5Rj8EfgK7eID7kUqvCrG4Vvg+iKjC7m1ABweOjBXVpk7UsKin
97I/Gz0PGOwnsh3a3J/WNZu1DuPfw9UCAwEAAaMtMCswCQYDVR0TBAIwADAeBglg
hkgBhvhCAQ0EERYPeGNhIGNlcnRpZmljYXRlMA0GCSqGSIb3DQEBCwUAA4IBAQDd
v4iq13jCqRI6yeFlB8ouMVtuVpI+p7w6KBYyc+phbDuzqI4iFkMyhj0H+cx/760M
ziQMuLR/pRrSPKPI03JgFI5dFh1txnNFkelQutZ+6qe4c1y9OhKhwg3n6jS2PevG
Tvlrl1utoiNOVXhcvH0CxuD5AJEyQa9SH/vO3TRQC9g5zbfULTgOhpUmaVPYBkX/
tBnvnKFdmsLqwgrKvdqfJF3WqJuQSdHtyp4MVZN1d/T+HoQ5YfN5nGXpLLgLdGaq
KvtAtFACkltO0A7R2WeLw1WNiXGHNxd3OFuVedapub1zXCSiYZNC+8MX7PkQnV9e
p1JB/AWXg/Z7uQSua3+c
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAzXEaROXR9OB7eNpwSBKSsyg3fCAiv3hjW4PnvherEph0fXWE
R2V1MtqDHwwYshhpc38dBMRi6HGmT4RfQyqez1NrMai68Tb+mg/gqI7yJIdU709p
oo7Q4qpjty23hNUF2cPZSOIcKrkN9D9PpQa/hs5HrVEKrKbIGedVD8rJHQNfj9T6
MvH3DFJ3k4sPRJKo6N0tOcjWAGkSmFG4+jrvTkj54ztwBPKgvXsYyABDVbjMvOre
iM08KjdT8/S0+9CLqEegm/lGPwR+Art4gPuRSq8KsbhW+D6IqMLubUAHB46MFdWm
TtSwqKf3sj8bPQ8Y7CeyHdrcn9Y1m7UO49/D1QIDAQABAoIBAQC6dsyL+jf9VX5b
6497qvfhikAJ9jTzqjYsCuXcwCiygRNCB9ae4rRkCrZ2CImlo8iaXqYc/I51QSnd
BF1eXiG0NZeWg/nhE7Q0avLSqqOWigqKBn7vX0ayZEqLKQBnnN1pkHv3zdoY4MuM
g6YrN5vApBukcGkK2XnHIRMweTLek9/qAeDgcE4ZVXIgHkNjqAc9y/kd5Sx+fL+N
k/dGQeTne2xgzJZsiu4uoS9jnBE7g1hQpfLpbyoREaRjWob/KP2IDFIjInjnHrb9
mO5Xuqsv8mHp4+67Ium8IN5jDldoObayEd8giE6x3r/3x60RSmV8IDHKPIs507qD
2hoCXz8hAoGBAObhKqowjp5TuqPt9Nrm+cVZKroDvz8bXb8ejOMn22Wj171cdNy3
gxbt5ksLXsHmjPWm9fK5ZL8m33U+uMwcgqIUbHILo40AQK9FtwkjyeTQne1OBjJa
2tjCc3ySo0icEswRFJrCu9Rcszehj56WlJzmvE0CiM2QGG3ExOxl8LNtAoGBAOPL
Zv5nkG0RAuOg5w+tLi2H14BcD1ICpPcq232mXdqzEeeXSysvgpwDaOWPGXtgWvIK
ScIw9xqW7tonk5EjKnsgPajV8OvG+vAqC2liHy00IxZ+YB+vzE66uUEpYXUpzI2n
F+pb+rQDSQo3beyamjeL1wYEjntDyWqfRmQfQSkJAoGAMP1CIk6fVHULu1D4jaJJ
CVj8OfAlmmxiHfWLi3+fjBeR5XpCybqetDTSksXc22PiMRW2RkSUXgMPkz810wmR
pnaS9DgIAhk1oHs4dVYEtuqVOA9APVsN6MSJ4Lr0rql/S5GsP5JmbI8m7/z2Dn6B
FjHXbrfE82lJ5bDE4CxZQJkCgYAvmtJrWDlWkbeI2pdvL0H3QexHZvXMrcDL5qj4
GUyD5+hV/cg3vjYNZKkHUGCC6CAZdQz1CEabx+8iqCKusiqukI5SOmOe4naOujqo
S1k4mSy8Bq0P8i1ARsVwWLWFRrb443KcB5zdAdLBz9OpHqYb9Z16JHmiSQhOv/p1
8hIsAQKBgQCvHQu6NKsdNDogXCiwEt52jlqBRs4NEjspupOKzV+HlEfek6ijKMce
P9o4U+vpiG5ZmIYPzgTfAlaWxoMi5ynRZhiMA8dFzX53uyJiYJetXm+zb71l9BW8
kmsch0B5z5yAjEA+CWIqDJ05O7QTLMLC69QU4UICswbyJy1MFUfrbg==
-----END RSA PRIVATE KEY-----
</key>
На этом создание файлов конфигурации клиента и сервера будем считать завершенным.
Настройка маршрутизатора предприятия
Т.к. наш персональный компьютер подключен не напрямую к линии с внешним белым IP, а через маршрутизатор предприятия, то для доступа к компьютеру с локальным IP-адресом из внешней сети необходимо пробросить порт, который мы указали в конфигурации сервера (50501).
В зависимости от модели маршрутизатора процедура проброса портов может отличаться.
На скриншоте ниже приведён пример по настройке маршрутизатора предприятия (не нашего KEENETIC 4G).

Запуск OpenVPN сервера на персональном компьютере
Наши файлы конфигурации готовы, осталось перейти к нюансам по настройке OpenVPN на системе под управлением Windows, для этого перейдём к настройке параметров адаптера и переименуем TAP-Windows Adapter V9 как MyTap (в соответствии с именем dev-node).

А также настроим локальный адрес нашему адаптеру (должен быть назначен на не занятый IP адрес нашей локальной сети контроллера, например 192.168.112.230)

Далее запускаем в работу сервер OpenVPN:
1. Запускаем приложение, расположенное по адресу C:\Program Files\OpenVPN\bin\openvpn-gui.exe (или нажимаем на ярлык на рабочем столе)

2. Переходим в трей, выбираем созданный файл конфигурации «TAP_Server» и нажимаем «подключиться»

3. Убедимся, что наш сервер работает и перейдём к настройке интернет-центра KEENETIC 4G

Настройка интернет-центра KEENETIC 4G
По-умолчанию в KEENETIC 4G не входит клиент OpenVPN, поэтому сначала нам следует его установить. Для этого подключаем KEENETIC 4G к интернету различным способом (по кабелю, по Wi-Fi или с помощью 4G модема), далее переходим в «Общие настройки» и нажимаем кнопку «Изменить набор компонентов».

Выбираем нужные нам компоненты (в данном случае Клиент OpenVPN уже был установлен, поэтому для примера показывается другой компонент) и нажимаем кнопку «Установить обновление».

Далее перейдём к настройке нашей сети, для этого выбираем «Домашняя сеть» и настраиваем IP-адрес нашего маршрутизатора, например 192.168.112.101 (так же должен быть свободным).

Далее нам следует настроить наше OpenVPN подключение, для этого выбираем «Другие подключения», нажимаем кнопку «добавить подключение».
Вводим имя подключения (произвольное, например, TAP_Client_PLC), выбираем тип подключения (OpenVPN), в конфигурацию OpenVPN копируем текст из нашего созданного файла для клиента (TAP_Client.ovpn) и нажимаем кнопку сохранить для применения изменений.

Далее нам следует включить интерфейс OpenVPN в основной мост, но прежде чем сделать данную процедуру нам придётся установить клиент telnet. Для этого перейдём в панель управления, далее «Включение или отключение компонентов Windows», выберем Telnet Client и нажмём «ОК».

После того, как telnet клиент будет установлен — подключаемся к нашему KEENETIC 4G: на клавиатуре жмём сочетание клавиш WIN+R, вводим cmd

Вводим команду telnet [IP_нашего_KEENETIC] (например, telnet 192.168.112.101)

Пройдём процесс авторизации (введём логин и пароль (если он был настроен)) и введём следующие команды:
interface Bridge0
include OpenVPN0
system configuration save
Проверим правильность нашей конфигурации:
show
running-config
В итоге мы должны увидеть нечто подобное:

Отмечу, что интерфейс OpenVPN0 создаётся только после создания OpenVPN подключения.
Включаем в работу наш OpenVPN клиент.

Видим, что KEENETIC 4G осуществил подключение к нашему серверу и переходим к настройке нашего контроллера S7-1500.

Настройка программируемого логического контроллера S7-1500
В настройках нашего контроллера достаточно установить локальный адрес нашего маршрутизатора:
- Устанавливаем галочку «Use router»
- Вбиваем адрес домашней сети нашего KEENETIC 4G (192.168.112.101)

После прогрузки конфигурации, контроллер станет доступен для доступа по удалённому подключению.

На этом настройка нашего удалённого подключения завершена.
Благодарю за внимание!
Комментарии (25)
DarkWolf13
19.12.2019 00:28интересная статья, но вот использовать подобное соединение именно для инженерной станции сомнительно, где гарантия что в момент прогрузки приложения не произойдет сбой, будет ли на удаленном объекте кто-нибудь кто поможет восстановить, у меня при прогрузке в другом корпусе 1200 контроллера был сбой, пришлось в щитовую с ноутом идти. не все контроллеры защищены от подобного сбоя, у некоторых вообще на до все заново на самом контроллере настраивать сбhосив его в default/
noumenon_s Автор
19.12.2019 06:27Тестировал на 1500 отключение линии связи во время полной прогрузки контроллера — ничего страшного не произошло. Повторная прогрузка при восстановлении связи решила проблему.
Как себя поведёт данное решение на других контроллерах — подсказать не смогу. Единственное из-за чего пришлось подключатся к локальной сети — это прогрузка конфигурайции контроллера при неправильной настройки сетевых параметров контроллера (не был прописан маршрутизатор KEENETIC).DarkWolf13
19.12.2019 08:37вот в том то и дело, что можно слегка ошибиться в hardware и придется искать способ телепортации или самому или помощнику на удаленный объект. А на других контроллерах тоже есть комбинации что в случае неправильной прогрузки теряется и связь и возможность удаленной правки (не везде прогружается конфигурация и программа может прогружаться по-отдельности)… учитывая правило siemens хорошо стыкуется только с siemens, в остальных случаях хороший результат не гарантируется… и надо к этому быть более-менее готовым
Muzzy0
19.12.2019 15:28Есть старая народная примета: удалённая настройка фаервола — к дальней дороге :)))
vampire333
19.12.2019 01:19+1А безопасники Ваши в курсе этой дыры?
Fenogik
19.12.2019 10:04Если безопасники разбирающиеся, то запретят прочитав.
А если неразбирающиеся, то запретят даже не читая.
nkusnetsov
19.12.2019 03:42Статья из серии "какой нельзя создавать архитектуру промышленной системы".
Опять 192.168.1.х в рабочих сетях. А если "192.168" привели "для примера" — поглядите в RFC. Там есть диапазоны для этого "TEST-NET" называются.
Еще один автор не знает, как использовать маршрутизацию.
Еще один костыль из стороннего несертифицированного продукта очень "обрадует" безопасников. Хотя, в конторе, где шлюз на keenetic, денег на безопасность наверняка совсем нет.noumenon_s Автор
19.12.2019 08:07По поводу маршрутизации прошу прояснить?
Цель написания данной статьи — это показать возможность удалённого подключения к промышленному ПЛК, т.к. в интернете вообще нет информации отчего следует отталкиваться.
Данный «костыль» произошёл как раз таки из сертифицированного промышленного маршрутизатора, который не имеет поддержки TAP-соединения и изначально схема выглядит вот так:
Windows TUN-сервер соединяется с промышленным сертифицированным маршрутизатором-клиентом (пусть будет PxC 2903588), который обслуживающий персонал по месту может включать/выключать по своему усмотрению с помощью переключателя (на маршрутизаторе имеются управляющие контакты). Далее к маршрутизатору подключается KEENETIC. Создаём второй TAP-интерфейс на Windows. И по второму интерфейсу (через KEENETIC) подключаемся к сети контроллера.
Не нужно носить розовые очки и каждому пациенту с насморком назначать томографию.nkusnetsov
19.12.2019 09:00Возможно, в программировании Вы разбираетесь гораздо лучше. Но арзитектура сетей — это пока не Ваше.
Создавать большие L2-broadcast сегменты воообще так-себе решение. Тем более, "растягивать" их через интернет и удаленный доступ.
По поводу сертификации — покадите сертификаты. ФСТЭК на примененное Вами ПО OpenVPN.
Из-за таких непродуманных решений КИИ оказывается уязвимой.
За оформление статьи с иллюстрациями "5".
А за сетевую арзитектуру "троечка", увы.
vakhramov
19.12.2019 06:15Обычно белого IP нет ни у кого, так что дополните, пожалуйста, инструкцию настройкой роутинга через VPS, к примеру :)
И это..«как полюбить Siemens после Allen-Bradley» тоже статья неплохо бы зашла)) Знаю оба типа контроллеров, но работа с Сименсом больше напоминает низкоуровневое программирование, а с A-B — высокоуровневое. А уж тем, кто с A-B слезает в Siemens — он и вовсе кажется адом.Siemargl
19.12.2019 08:22В качестве терапии предлагаю попрограммировать Овены или им подобные в Кодесис.
vakhramov
19.12.2019 10:18Совет из разряда — вы потеряли ногу — отрубите ещё и руку, чтобы не сомневаться, что может быть хуже :)
Я бы почитал про другие примеры, на которые стоит обратить внимание, которые сравнимы с серией хотя бы «микро» (а не 800, которая «нано»).
Овен видывал. Если нету последнего исходного проекта — пиши-пропало.Siemargl
19.12.2019 10:46Из лидеров еще Шнайдер Юнити и Омрон CX. У микролоджиксов софт с большими сравнивать неуместно, да и старые они — сняли вроде с пр-ва.
AntonShipulin
19.12.2019 06:15А как же надёжность связи? Временны?е адержки из-за шифрования? Вы на столько доверяете и рекомендуете OpenVPN?
Minipyh
19.12.2019 06:15вы СЕРЬЕЗНО?! инструкция как на Винде установить ВПН сервер в картинках и зачем-то использовать TAP вместо TUN. я бы понял ещё ssh-тунелирование по ключу. но то что вы написали просто ЗЛО. как это вообще проходит модерацию?
noumenon_s Автор
19.12.2019 06:18TUN — соединение не подойдёт. Profinet работает на втором уровне OSI. Проще говоря вы не сможете подключится к контроллеру по TUN-интерфейсу.
Sfinx88
19.12.2019 06:49Нет, мои дорогие, так нельзя делать. Почему? Потому что в реальной жизни к удалёнке цепляются для устранения проблем, это всегда срочно, это всегда прессинг. И у тебя не будет времени пилить всю эту хрень, генерировать сертификаты, пробрасывать туннели потому что тебе нужно срочно проблему решать. Ты обычно даже не понимаешь, а жив ли контроллер, в каком он состоянии, не говоря уж о прочем. Единственный, более или менее рабочий способ в реальной жизни — кто-то на объекте цепляет любой комп, или ноут к ПЛК и ты через RDP или TeamViewer работаешь. Все то что писали выше про безопасность — конечно верно, но в реальной жизни то нет.
constnw88
19.12.2019 07:48Siemens & keenetic, серьёзно? В реальной жизни VPN без доступа в Интернет и наоборот. Все операторы предоставляют эти услуги. Если есть деньги на S7, то и на каналы денег хватит.
DarkWolf13
19.12.2019 08:45в том-то и дело что ТЗ и бюджет могут быть изначально заточены по siemens, а вот текущие расходы зачастую не такие радостные, да и со временем финансирование может быть урезано…
Siemargl
19.12.2019 08:36Соломку стелить надо заранее. Для сущей безопасности пока нет абзаца, можно вытащить шнурок из рутера.
кто-то на объекте цепляет любой комп
это когда на объекте есть любой комп с _нужным_ комплектом инженерного ПО требуемых версий
Dimm56
22.12.2019 15:38+1Использую opnsense + kennetic для таких целей. Точечные ПК соединяю при помощи ovpn с привязкой адреса. Для объединения сетей ipsec. Мне так удобно)) на данный момент работает 28 ipsec и 25 vpn каналов и их количество будет расти. Очень удобно. Все в одном месте: шлюз для офиса, vpn сервер, генератор сертификатов и т.д и т.п. gui opnsense очень удобен и приятен в работе.
Vvka
Предоставлять доступ в PCN (process control network) с внешней сети (internet) любыми средствами — это безумство.
Muzzy0