Особенности удаленной работы в 2025

от автора

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

Но есть нюанс: иногда требования безопасности вынуждают держать такие системы внутри локальной сети. Раньше это не было проблемой: даем человеку доступ да вот хотя бы через OpenVPN, он заходит удаленно в сеть и работает.
Но сейчас, видимо из-за санкций, такие простые решения как OpenVPN или вообще не работают, или работают крайне нестабильно. И даже не очень простые, типа Wireguard. И даже еще более непростые, не будем их тут называть.

Ну, вот еще один вариант решения проблемы, если переселяться в офис очень невыгодно: в принципе об этом недавно тут писали, но я остановлюсь именно на рабочем применении данной технологии.

Итак, допустим, у нас есть наша BigCRM, работающая на сервере 192.168.100.1, и подключиться к ней снаружи никак невозможно, а классические VPN у нас запрещены некими внешними враждебными силами.
На помощь приходит упоминавшаяся ранее технология i2p.

Чтобы минимизировать возможное влияние на офисную сеть — заведем отдельный компьютер. Это может быть буквально одноплатник из TV-box, так как нагрузка там в общем минимальная. Естественно, у него должен быть выход в интернет.

Установка несложная:

git clone https://github.com/PurpleI2P/i2pd.git
make

Полученный файл i2pd положим, например, в /usr/local/bin

Настраиваем тоннель на серверной стороне:
vim ~/.i2pd/tunnels.conf

[proxy] type = server address = 127.0.0.1 host = 127.0.0.1 port = 6008 gzip = 1 accesslist = ХХХХХХХХХХХХХХХХХХХХХХХХ inport = 6007 inbound.length = 1 inbound.quantity = 16 outbound.length = 1 outbound.quantity = 16 keys = proxy.dat 

Вон ту строчку accesslist пока комментируем или удаляем, чтобы оно всё запустилось, и запускаем из-под обычного юзера:

/usr/local/bin/i2pd

Создали серверный туннель с выходом на 127.0.0.1:6008. Теперь сюда можно подключить какую-то программу, слушающую порт 127.0.0.1:6008 и подключиться к ней удаленно через сеть i2p.

В документации сказано, что inport это не TCP/UDP порт, и поэтому _по идее_ конфликтовать с TCP портом port не должен, однако некоторые программы при попытке запуска потом могут сказать, что порт уже занят, поэтому лучше их разнести.

Конкретно в данном случае на этот порт повесим какой-нибудь socks5-прокси, например

sudo apt install microsocks
microsocks -i 127.0.0.1 -p 6008

Остается посмотреть адрес нашего туннеля в сети:

links (или lynx, на выбор) 127.0.0.1:7070
I2P Tunnels
proxy ⇒ ХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ.b32.i2p:6007

В данном случае нам нужен вот тот длинный адрес без .b32.i2p
Как видим, порт входа — 6007, это будет нужно при настройке клиента.

Теперь настраиваем домашнюю часть.
В качестве шлюза оказалось удобно использовать очередной одноплатник.
Принцип тот же: устанавливаем i2pd и настраиваем теперь клиентскую сторону канала

[proxy] type = client address = 127.0.0.1 host = 127.0.0.1 port = 6007 gzip = 1 destination = ХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ.b32.i2p destinationport = 6007 inbound.length = 1 inbound.quantity = 16 outbound.length = 1 outbound.quantity = 16 keys = proxy.dat 

Тут указывается входной адрес туннеля — 127.0.0.1:6007, точка назначения — ХХХХХХХ..ХХХ:6007

После запуска i2pd через некоторое время устанавливается туннель. Теперь, если на домашней стороне настроить sock5-прокси на точку входа туннеля — запрос пройдет на серверную сторону, на microsocks.
То есть, из домашней сети можно будет обращаться к серверу 192.168.100.1 в офисе, где крутится наша BigCRM. При этом маршрутизации между сетями нет, только через прокси.

Но настройка не закончена: по факту сейчас любой, кто каким-то образом найдет нужный адрес и нужный порт в сети i2p — тоже попадет в прокси-сервер в корпоративной сети, а это плохо.
Именно для этого есть настройка accesslist на серверной стороне.

На домашнем сервере нужно также запустить локально браузер:
links 127.0.0.1:7070
I2P Tunnels
proxy ⇒ ХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ.b32.i2p

Получив адрес клиента — подставить его в accesslist, не забыв раскомментировать, и перезапустить сервер уже окончательно.
Вот теперь чужих не пустит.

Но и это не всё: если кто заметил, адрес прокси-сервера — 127.0.0.1:6007, то есть, предполагается что клиент подключается локально, а как, если это одноплатник, даже без монитора?
Это не ошибка, дело в том, что мы настроим еще кое-что.

В самом деле, если у нас прокси-сервер перенаправляет нас в локальную сеть офиса — зачем нужно перенаправлять туда все запросы?
К счастью, есть удобное решение: программа xray.

https://github.com/XTLS/Xray-install
Следуем инструкциям, смотрим и выполняем скрипты, программа есть под разные архитектуры.

Всё интересное — в конфиге. Кратко суть логики работы:
— есть входящие интерфейсы разных типов
— есть исходящие интерфейсы разных типов
— есть правила маршрутизации запросов

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

И получаем примерно такой конфиг-файл:

{   "log": {     "loglevel": "debug"   },   "routing": {     "domainStrategy": "IPIfNonMatch",     "rules": [       {         "type":"field",         "ip":[             "192.168.1.1",         ],         "outboundTag": "direct"       },       {         "type":"field",         "domain":[           "regexp:\\.i2p$"         ],         "outboundTag": "i2p"       },       {         "type":"field",         "ip":[             "geoip:ru"         ],         "outboundTag": "direct"       },       {         "type":"field",         "domain":[           "regexp:ads\\.adlook\\.me$",           "regexp:buzzoola\\.com$",           "regexp:mc\\.yandex\\.ru$",           "regexp:pixel\\.konnektu\\.ru$"         ],         "outboundTag": "block"       },       {         "type":"field",         "domain":[           "regexp:\\.youtu\\.be",           "regexp:\\.yt\\.be",           "regexp:\\.googlevideo\\.com",           "regexp:\\.ytimg\\.com",           "regexp:\\.ggpht\\.com",           "regexp:\\.gvt1\\.com",           "jnn-pa.googleapis.com",           "regexp:\\.youtube-nocookie\\.com",           "regexp:\\.youtube-ui.l.google\\.com",           "regexp:\\.youtubeembeddedplayer\\.googleapis\\.com",           "regexp:\\.youtube.googleapis\\.com",           "regexp:\\.yt-video-upload\\.l\\.google\\.com",           "regexp:\\.wide-youtube\\.l\\.google.com"         ],         "outboundTag": "nodpi"       },       {         "type":"field",         "domain":[           "regexp:\\.ru",           "regexp:yandex\\."         ],         "outboundTag": "direct"       }     ]   },   "inbounds": [     {       "port": 1080,       "listen": "0.0.0.0",       "protocol": "socks",       "settings": {         "udp": true       }     }   ],   "outbounds": [     {       "protocol":"socks",       "settings":{         "servers": [           {             "address": "127.0.0.1",             "port": 6007           }         ]       },       "tag": "proxy"     },     {       "protocol":"socks",       "settings":{         "servers": [           {             "address": "127.0.0.1",             "port": 4447           }         ]       },       "tag": "i2p"     },     {       "protocol":"socks",       "settings":{         "servers": [           {             "address": "127.0.0.1",             "port": 1081           }         ]       },       "tag": "nodpi"     },     {       "protocol":"freedom",       "tag": "direct"     },     {       "protocol":"blackhole",       "tag":"block"     }   ] } 

Разберем поподробнее конфиг:

Есть одна точка входа, inboinds, тип socks5 по адресу 0.0.0.0:1080. Сюда мы настраиваем браузер.

Есть несколько точек выхода, outbounds:
— block — «черная дыра», пакеты просто пропадают
— direct — выход в интернет без ничего
— nodpi — чинилка для гугль-серверов
— i2p — сайты внутри сети i2p
— proxy — прокси-сервер в офисе

Есть правила маршрутизации, routing:
— то, что соответствует адресу локального роутера — идет напрямую на роутер
— домены с именем *.i2p — в сеть i2p
— сервера, определяющиеся по IP как отечественные — ремонта не требуют, и отправляются сразу в интернет
— навязчивая реклама идет в блок
— поломанные гуглосервера идут лечиться
— сайты *.ru также работают прекрасно без всего, поэтому идут прямо в интернет.
— всё остальное, непонятное, заворачивается на первое правило в списке исходящих, на прокси сервер в офисе.

Настраиваем браузер, запускаем xray:

xray -c config.json

Остается поставить лечилку для гуглосерверов:

git clone https://github.com/hufrea/byedpi
сd byedpi
make

ciadpi -p1081 -d1 -o25+s —auto=torst

Всё, теперь можно спокойно работать: хорошие сайты просто работают, плохие блочатся, сломанные лечатся, рабочие — на работе, и даже книжки можно почитать.
И всё это — не меняя больше настроек в браузере.

А в свободное время можно потестировать разные экспериментальные протоколы…


ссылка на оригинал статьи https://habr.com/ru/articles/872264/


Комментарии

Добавить комментарий

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