Руководство по организации удалённого подключения к промышленному плк посредством openvpn

Core

PHP Version 7.2.32
Directive Local Value Master Value
allow_url_fopen On On
allow_url_include On On
arg_separator.input & &
arg_separator.output & &
auto_append_file no value no value
auto_globals_jit On On
auto_prepend_file no value no value
browscap no value no value
default_charset UTF-8 UTF-8
default_mimetype text/html text/html
disable_classes no value no value
disable_functions symlink,shell_exec,exec,popen,system,dl,passthru,escapeshellarg,escapeshellcmd,show_source,pcntl_exec symlink,shell_exec,exec,popen,system,dl,passthru,escapeshellarg,escapeshellcmd,show_source,pcntl_exec
display_errors Off Off
display_startup_errors Off Off
doc_root no value no value
docref_ext no value no value
docref_root no value no value
enable_dl Off Off
enable_post_data_reading On On
error_append_string no value no value
error_log error_log error_log
error_prepend_string no value no value
error_reporting 32767 32767
expose_php On On
extension_dir /opt/alt/php72/usr/lib64/php/modules /opt/alt/php72/usr/lib64/php/modules
file_uploads On On
hard_timeout 2 2
highlight.comment #FF8000 #FF8000
highlight.default #0000BB #0000BB
highlight.html #000000 #000000
highlight.keyword #007700 #007700
highlight.string #DD0000 #DD0000
html_errors On On
ignore_repeated_errors On On
ignore_repeated_source On On
ignore_user_abort Off Off
implicit_flush Off Off
include_path .:/opt/alt/php72/usr/share/pear .:/opt/alt/php72/usr/share/pear
input_encoding no value no value
internal_encoding no value no value
log_errors Off Off
log_errors_max_len 1024 1024
mail.add_x_header Off Off
mail.force_extra_parameters no value no value
mail.log no value no value
max_execution_time 30 30
max_file_uploads 20 20
max_input_nesting_level 64 64
max_input_time 60 60
max_input_vars 1000 1000
memory_limit 128M 128M
open_basedir no value no value
output_buffering 1 1
output_encoding no value no value
output_handler no value no value
post_max_size 8M 8M
precision 14 14
realpath_cache_size 4096K 4096K
realpath_cache_ttl 120 120
register_argc_argv Off Off
report_memleaks On On
report_zend_debug On On
request_order no value no value
sendmail_from no value no value
sendmail_path /usr/sbin/sendmail -t -i /usr/sbin/sendmail -t -i
serialize_precision 100 100
short_open_tag On On
SMTP localhost localhost
smtp_port 25 25
sys_temp_dir no value no value
track_errors Off Off
unserialize_callback_func no value no value
upload_max_filesize 128M 128M
upload_tmp_dir /tmp /tmp
user_dir no value no value
user_ini.cache_ttl 300 300
user_ini.filename .user.ini .user.ini
variables_order EGPCS EGPCS
xmlrpc_error_number
xmlrpc_errors Off Off
zend.assertions 1 1
zend.detect_unicode On On
zend.enable_gc On On
zend.multibyte Off Off
zend.script_encoding no value no value
zend.signal_check Off Off

standard

Dynamic Library Support enabled
Path to sendmail /usr/sbin/sendmail -t -i
Directive Local Value Master Value
assert.active 1 1
assert.bail
assert.callback no value no value
assert.exception
assert.quiet_eval
assert.warning 1 1
auto_detect_line_endings
default_socket_timeout 60 60
from no value no value
session.trans_sid_hosts no value no value
session.trans_sid_tags a=href,area=href,frame=src,form= a=href,area=href,frame=src,form=
url_rewriter.hosts no value no value
url_rewriter.tags a=href,area=href,frame=src,input=src,form=fakeentry a=href,area=href,frame=src,input=src,form=fakeentry
user_agent no value no value

SPL

SPL support enabled
Interfaces OuterIterator, RecursiveIterator, SeekableIterator, SplObserver, SplSubject
Classes AppendIterator, ArrayIterator, ArrayObject, BadFunctionCallException, BadMethodCallException, CachingIterator, CallbackFilterIterator, DirectoryIterator, DomainException, EmptyIterator, FilesystemIterator, FilterIterator, GlobIterator, InfiniteIterator, InvalidArgumentException, IteratorIterator, LengthException, LimitIterator, LogicException, MultipleIterator, NoRewindIterator, OutOfBoundsException, OutOfRangeException, OverflowException, ParentIterator, RangeException, RecursiveArrayIterator, RecursiveCachingIterator, RecursiveCallbackFilterIterator, RecursiveDirectoryIterator, RecursiveFilterIterator, RecursiveIteratorIterator, RecursiveRegexIterator, RecursiveTreeIterator, RegexIterator, RuntimeException, SplDoublyLinkedList, SplFileInfo, SplFileObject, SplFixedArray, SplHeap, SplMinHeap, SplMaxHeap, SplObjectStorage, SplPriorityQueue, SplQueue, SplStack, SplTempFileObject, UnderflowException, UnexpectedValueException

mysqli

MysqlI Support enabled
Client API library version mysqlnd 5.0.12-dev — 20150407 — $Id: 3591daad22de08524295e1bd073aceeff11e6579 $
Active Persistent Links
Inactive Persistent Links
Active Links
Directive Local Value Master Value
mysqli.allow_local_infile Off Off
mysqli.allow_persistent On On
mysqli.default_host no value no value
mysqli.default_port 3306 3306
mysqli.default_pw no value no value
mysqli.default_socket no value no value
mysqli.default_user no value no value
mysqli.max_links Unlimited Unlimited
mysqli.max_persistent Unlimited Unlimited
mysqli.reconnect Off Off
mysqli.rollback_on_cached_plink Off Off

mysqlnd

mysqlnd enabled
Version mysqlnd 5.0.12-dev — 20150407 — $Id: 3591daad22de08524295e1bd073aceeff11e6579 $
Compression supported
core SSL supported
extended SSL supported
Command buffer size 4096
Read buffer size 32768
Read timeout 86400
Collecting statistics Yes
Collecting memory statistics No
Tracing n/a
Loaded plugins mysqlnd,debug_trace,auth_plugin_mysql_native_password,auth_plugin_mysql_clear_password,auth_plugin_sha256_password
API Extensions mysqli,pdo_mysql
mysqlnd statistics
bytes_sent 21202
bytes_received 272808
packets_sent 652
packets_received 9086
protocol_overhead_in 36344
protocol_overhead_out 2608
bytes_received_ok_packet
bytes_received_eof_packet
bytes_received_rset_header_packet 2277
bytes_received_rset_field_meta_packet
bytes_received_rset_row_packet 2110
bytes_received_prepare_response_packet 61622
bytes_received_change_user_packet 204182
packets_sent_command 313
packets_received_ok
packets_received_eof
packets_received_rset_header 253
packets_received_rset_field_meta
packets_received_rset_row 300
packets_received_prepare_response 876
packets_received_change_user 7631
result_set_queries 253
non_result_set_queries 47
no_index_used 99
bad_index_used
slow_queries
buffered_sets 253
unbuffered_sets
ps_buffered_sets
ps_unbuffered_sets
flushed_normal_sets
flushed_ps_sets
ps_prepared_never_executed
ps_prepared_once_executed
rows_fetched_from_server_normal 7378
rows_fetched_from_server_ps
rows_buffered_from_client_normal 7378
rows_buffered_from_client_ps
rows_fetched_from_client_normal_buffered 161
rows_fetched_from_client_normal_unbuffered
rows_fetched_from_client_ps_buffered
rows_fetched_from_client_ps_unbuffered
rows_fetched_from_client_ps_cursor
rows_affected_normal 32
rows_affected_ps
rows_skipped_normal 7378
rows_skipped_ps
copy_on_write_saved
copy_on_write_performed
command_buffer_too_small
connect_success 13
connect_failure
connection_reused
reconnect
pconnect_success
active_connections 18446744073709551603
active_persistent_connections
explicit_close 13
implicit_close
disconnect_close
in_middle_of_command_close
explicit_free_result 253
implicit_free_result
explicit_stmt_close
implicit_stmt_close
mem_emalloc_count
mem_emalloc_amount
mem_ecalloc_count
mem_ecalloc_amount
mem_erealloc_count
mem_erealloc_amount
mem_efree_count
mem_efree_amount
mem_malloc_count
mem_malloc_amount
mem_calloc_count
mem_calloc_amount
mem_realloc_count
mem_realloc_amount
mem_free_count
mem_free_amount
mem_estrndup_count
mem_strndup_count
mem_estrdup_count
mem_strdup_count
mem_edupl_count
mem_dupl_count
proto_text_fetched_null
proto_text_fetched_bit
proto_text_fetched_tinyint 56
proto_text_fetched_short
proto_text_fetched_int24
proto_text_fetched_int 7332
proto_text_fetched_bigint 4
proto_text_fetched_decimal 2
proto_text_fetched_float
proto_text_fetched_double
proto_text_fetched_date
proto_text_fetched_year
proto_text_fetched_time
proto_text_fetched_datetime
proto_text_fetched_timestamp
proto_text_fetched_string 7697
proto_text_fetched_blob
proto_text_fetched_enum
proto_text_fetched_set
proto_text_fetched_geometry
proto_text_fetched_other
proto_binary_fetched_null
proto_binary_fetched_bit
proto_binary_fetched_tinyint
proto_binary_fetched_short
proto_binary_fetched_int24
proto_binary_fetched_int
proto_binary_fetched_bigint
proto_binary_fetched_decimal
proto_binary_fetched_float
proto_binary_fetched_double
proto_binary_fetched_date
proto_binary_fetched_year
proto_binary_fetched_time
proto_binary_fetched_datetime
proto_binary_fetched_timestamp
proto_binary_fetched_string
proto_binary_fetched_json
proto_binary_fetched_blob
proto_binary_fetched_enum
proto_binary_fetched_set
proto_binary_fetched_geometry
proto_binary_fetched_other
init_command_executed_count
init_command_failed_count
com_quit 13
com_init_db
com_query 300
com_field_list
com_create_db
com_drop_db
com_refresh
com_shutdown
com_statistics
com_process_info
com_connect
com_process_kill
com_debug
com_ping
com_time
com_delayed_insert
com_change_user
com_binlog_dump
com_table_dump
com_connect_out
com_register_slave
com_stmt_prepare
com_stmt_execute
com_stmt_send_long_data
com_stmt_close
com_stmt_reset
com_stmt_set_option
com_stmt_fetch
com_deamon
bytes_received_real_data_normal 158537
bytes_received_real_data_ps

hash

hash support enabled
Hashing Engines md2 md4 md5 sha1 sha224 sha256 sha384 sha512/224 sha512/256 sha512 sha3-224 sha3-256 sha3-384 sha3-512 ripemd128 ripemd160 ripemd256 ripemd320 whirlpool tiger128,3 tiger160,3 tiger192,3 tiger128,4 tiger160,4 tiger192,4 snefru snefru256 gost gost-crypto adler32 crc32 crc32b fnv132 fnv1a32 fnv164 fnv1a64 joaat haval128,3 haval160,3 haval192,3 haval224,3 haval256,3 haval128,4 haval160,4 haval192,4 haval224,4 haval256,4 haval128,5 haval160,5 haval192,5 haval224,5 haval256,5
MHASH support Enabled
MHASH API Version Emulated Support

Приступаем к настройке

Схема сети
ipsecgw.example.commamakeeneticroad-warriorsrkn.example.com

auto = route

Убеждаемся что все работает:

Шаг второй. Появление Keenetic

Настройки компонентов KeeneticOSIPSec VPN

Интернет → Подключения →
Другие подключения

(3 изображения)

crypto engine hardwarecrypto engine software
Все работает:

Шаг третий. Защищаем мобильные устройства

  • в директории /etc/strongswan/ipsec.d/cacerts создаем 2 символические ссылки: одну на корневое хранилище доверенных сертификатов в /etc/pki/tls/certs; и вторую с названием ca.pem, указывающую на /etc/letsencrypt/live/ipsecgw.example.com/chain.pem
  • В директории /etc/strongswan/ipsec.d/certs также создаются два симлинка: первый, с именем certificate.pem, ссылается на файл /etc/letsencrypt/live/ipsecgw.example.com/cert.pem. И второй, с именем fullchain.pem, ссылающийся на /etc/letsencrypt/live/ipsecgw.example.com/fullchain.pem
  • В директории /etc/strongswan/ipsec.d/private размещаем симлинк key.pem, указывающий на закрытый ключ, сгенерированный certbot и лежащий по пути /etc/letsencrypt/live/ipsecgw.example.com/privkey.pem

ipsec.conf

профиль

Проверяем:

Часть четвертая, финальная. Прорубаем окно в Европу

Готовим VPS

  • left/rightsubnet = %dynamic — инструктирует Strongswan применять политики ко всем типам трафика между пирами
  • В каждом из конфигов указан параметр rightrsasigkey. Без него попытка установки IKE SA всегда будет оканчиваться ошибкой IKE AUTH ERROR в логе, поскольку Strongswan не сможет подписать сообщение без знания открытой части RSA-ключа удаленного пира. Для получения открытых ключей мы можем воспользоваться openssl. На каждом из хостов (ipsecgw и RKN) выполняем sudo /usr/bin/openssl rsa -in /etc/letsencrypt/live/ipsecgw.example.com/privkey.pem -pubout > ~/ipsecgw.example.com.pem и sudo /usr/bin/openssl rsa -in /etc/letsencrypt/live/rkn.example.com/privkey.pem -pubout > ~/rkn.example.com.pem, после чего при помощи scp перекрестно копируем их между серверами в расположения, указаные в конфиге

под спойлером

Настройка NAT для IPSec

На этом можно и попрощаться, но, если вы попробуете пингануть любое устройства в сети с Москвы в Питер, то скорее всего этого у вас не получится. Как же так спросите вы? А я отвечу, это связано с тем что оба маршрутизатора имеют правила NAT (masquerade), которые изменяют адрес источника перед шифрованием пакета (это можно посмотреть на диаграмме прохождения пакетов предоставляемой производителем). Mikrotik не может зашифровать трафик, поскольку адрес источника не соответствует адресу указанному в конфигурации политики. Чтобы это исправить нужно настроить правило обхода для туннеля.

Делаем все как у меня, единственное во вкладке Actions выставите accept, просто скриншот этой строчки не стал делать. Замечу что данное правило должно стоять на первом месте так как они здесь обрабатываются сверху вниз.

На сегодня все, если будет вопросы задавайте их в нашей группе Телеграмм.

Phar

Phar: PHP Archive support enabled
Phar EXT version 2.0.2
Phar API version 1.1.1
SVN revision $Id: ba76a9b0e06d536a9b602c782e38e6826cb4ee02 $
Phar-based phar archives enabled
Tar-based phar archives enabled
ZIP-based phar archives enabled
gzip compression enabled
bzip2 compression enabled
OpenSSL support enabled
Phar based on pear/PHP_Archive, original concept by Davey Shafik.Phar fully realized by Gregory Beaver and Marcus Boerger.Portions of tar implementation Copyright (c) 2003-2009 Tim Kientzle.
Directive Local Value Master Value
phar.cache_list no value no value
phar.readonly On On
phar.require_hash On On

ionCube Loader

ionCube Loader developed by ionCube Ltd.

Visit ioncube.com for latest Loaders and support.

This Loader also includes features for real-time error reporting and malware protection. Visit ioncube24.com for more details.

Loader version 10.4.0
ionCube24 features unconfigured
Directive Local Value Master Value
ic24.api.log_msg_errors
ic24.api.max_timeout 7 7
ic24.api_access_key ******** ********
ic24.api_check_ip 1 1
ic24.enable
ic24.home_dir no value no value
ic24.phperr.enable auto auto
ic24.phperr.ignore
ic24.sec.block_stdin 1 1
ic24.sec.block_uploaded_files 1 1
ic24.sec.enable auto auto
ic24.sec.exclusion_key ******** ********
ic24.sec.initial_action block block
ic24.sec.initial_cache_all 1 1
ic24.sec.initial_notify always always
ic24.sec.initial_state 1 1
ic24.sec.stop_on_error 1 1
ic24.sec.trusted_include_paths ******** ********
ic24.slt 7 7
ic24.update_domains_retry_interval 30 30
ioncube.loader.encoded_paths no value no value

Zend OPcache

Opcode Caching Up and Running
Optimization Enabled
SHM Cache Enabled
File Cache Disabled
Startup OK
Shared memory model mmap
Cache hits 430743
Cache misses 104
Used memory 20555960
Free memory 113661768
Wasted memory
Interned Strings Used memory 716392
Interned Strings Free memory 7672216
Cached scripts 104
Cached keys 146
Max keys 16229
OOM restarts
Hash keys restarts
Manual restarts
Directive Local Value Master Value
opcache.blacklist_filename no value no value
opcache.consistency_checks
opcache.dups_fix Off Off
opcache.enable On On
opcache.enable_cli Off Off
opcache.enable_file_override Off Off
opcache.error_log no value no value
opcache.file_cache no value no value
opcache.file_cache_consistency_checks 1 1
opcache.file_cache_only
opcache.file_update_protection 2 2
opcache.force_restart_timeout 180 180
opcache.huge_code_pages Off Off
opcache.inherited_hack On On
opcache.interned_strings_buffer 8 8
opcache.lockfile_path /tmp /tmp
opcache.log_verbosity_level 1 1
opcache.max_accelerated_files 10000 10000
opcache.max_file_size
opcache.max_wasted_percentage 5 5
opcache.memory_consumption 128 128
opcache.opt_debug_level
opcache.optimization_level 0x7FFFBFFF 0x7FFFBFFF
opcache.preferred_memory_model no value no value
opcache.protect_memory
opcache.restrict_api no value no value
opcache.revalidate_freq 2 2
opcache.revalidate_path Off Off
opcache.save_comments 1 1
opcache.use_cwd On On
opcache.validate_permission Off Off
opcache.validate_root Off Off
opcache.validate_timestamps On On

mbstring

Multibyte Support enabled
Multibyte string engine libmbfl
HTTP input encoding translation disabled
libmbfl version 1.3.2
oniguruma version 6.3.0
mbstring extension makes use of «streamable kanji code filter and converter», which is distributed under the GNU Lesser General Public License version 2.1.
Multibyte (japanese) regex support enabled
Multibyte regex (oniguruma) backtrack check On
Multibyte regex (oniguruma) version 6.3.0
Directive Local Value Master Value
mbstring.detect_order no value no value
mbstring.encoding_translation Off Off
mbstring.func_overload
mbstring.http_input no value no value
mbstring.http_output no value no value
mbstring.http_output_conv_mimetypes ^(text/|application/xhtml\+xml) ^(text/|application/xhtml\+xml)
mbstring.internal_encoding no value no value
mbstring.language neutral neutral
mbstring.strict_detection Off Off
mbstring.substitute_character no value no value

exif

EXIF Support enabled
EXIF Version 7.2.32
Supported EXIF Version 0220
Supported filetypes JPEG, TIFF
Multibyte decoding support using mbstring enabled
Extended EXIF tag formats Canon, Casio, Fujifilm, Nikon, Olympus, Samsung, Panasonic, DJI, Sony, Pentax, Minolta, Sigma, Foveon, Kyocera, Ricoh, AGFA, Epson
Directive Local Value Master Value
exif.decode_jis_intel JIS JIS
exif.decode_jis_motorola JIS JIS
exif.decode_unicode_intel UCS-2LE UCS-2LE
exif.decode_unicode_motorola UCS-2BE UCS-2BE
exif.encode_jis no value no value
exif.encode_unicode ISO-8859-15 ISO-8859-15

session

Session Support enabled
Registered save handlers files user
Registered serializer handlers php_serialize php php_binary wddx
Directive Local Value Master Value
session.auto_start Off Off
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_httponly no value no value
session.cookie_lifetime
session.cookie_path
session.cookie_secure
session.gc_divisor 1000 1000
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.lazy_write On On
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /opt/alt/php72/var/lib/php/session /opt/alt/php72/var/lib/php/session
session.serialize_handler php php
session.sid_bits_per_character 4 4
session.sid_length 32 32
session.upload_progress.cleanup On On
session.upload_progress.enabled On On
session.upload_progress.freq 1% 1%
session.upload_progress.min_freq 1 1
session.upload_progress.name PHP_SESSION_UPLOAD_PROGRESS PHP_SESSION_UPLOAD_PROGRESS
session.upload_progress.prefix upload_progress_ upload_progress_
session.use_cookies 1 1
session.use_only_cookies 1 1
session.use_strict_mode
session.use_trans_sid

Преимущества прокси

  1. В условиях реальной сети с потерями практическая скорость прокси зачастую выше, чем у VPN-решений. Это вызвано тем, что при проксировании TCP-соединений ретрансмиты на участках клиент-прокси и прокси-целевой узел происходят независимо. Прокси имеет свои TCP-буферы и кратковременные задержки ввода-вывода в обе стороны не сказываются на передаче с противоположной стороны. VPN же работает только на сетевом уровне (IP) и потерянные сегменты TCP будут пересылаться по всей длине пути от VPN-клиента до целевого сервера.
  2. Гибкость. Проще настроить избирательное проксирование. Использование прокси можно ограничить конкретными приложениями, в браузере — конкретными доменами. Можно использовать несколько разных прокси для разных адресов назначения одновременно.
  3. Трудно обнаружить с помощью DPI, в том числе DPI осуществляющими активные пробы. Однако, для этого необходима некоторая донастройка. В случае с прокси через TLS, такое соединение можно выдать за обычное HTTPS-соединение. В случае с VPN факт его использования виден даже пассивному DPI. Даже если это Wireguard.
  4. Нет целого класса проблем с внезапно прервавшимся VPN-соединением. В худшем сценарии VPN-соединение может прерваться и пользователь не заметит, что его трафик уже не защищён и/или он уже работает со своего «домашнего» IP-адреса. В случае с прокси такие проблемы исключены.
  5. Не нужны высокие привилегии в системе ни для клиента прокси, ни для сервера. Это может быть весьма полезно в случаях, когда у Вас нет высоких прав в системе.
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *