Для меня никогда не вставал вопрос про RDP, так как постоянно носил с собой ноутбук. Если в студенческие годы таскать на горбу 17 дюймовый Lenovo IdeaPad Z710 почти под 3кг веса (2.9кг) было не сложно, то со временем даже 15 дюймовый HP или 13 дюймовый MacBook Pro стал прилично ощущаться и не в лучшую сторону для моей спины.
Первая задача: как уменьшить вес, но не потерять в производительности? Для себя я выбрал собрать стационарный компьютер и подключаться к нему с iPad. Эта задача решается достаточно просто. И на ней не будем останавливаться.
Вторая задача: а как, собственно, подключаться? Есть несколько способов: ванильный rdp и сторонние сервисы. Начнем с сервисов. Сразу на ум приходит потрясающая тула TeamViewer. Она потрясающая до того момента, пока ты не узнаешь, какой ты дурак, который не читал лицензионное соглашение. Уехав на неделю в другую страну, с радостью, что проблема решена. И на второй день ловлю бан по железу, так как бесплатная версия запрещает использовать ее для работы. Можно купить лицензию за $130/год, но зачем такие крайности? Дальше мой выбор пал на такие сервисы как no-ip и DynDNS. Первый сразу отпал, так как роутер от моего провайдера (привет UPC) поддерживает только DynDNS. Как бы не хвалили этот сервис, я получил стабильные дисконнекты каждые 5-10 минут. Тут я вспомнил как я не люблю всю продукцию Oracle, а заодно вспомнил про них пару ласковых фраз.
Следующим моим вариантом стал сервис Google Remote Desktop. Именно он меня спас в ту неделю, когда меня забанили TeamViewer, тогда я предусмотрительно его настроил. Казалось бы, вот оно идеальное решение: стабильное подключение, бесплатно, быстрая установка. Но не все так радужно. Изображение не заполняет весь экран и окна часто не подстраиваться под текущее разрешение, что даже закрыть их становиться проблематично. И тут я вернулся к тому, что решил попробовать первой же попыткой. Перед всей этой эпопеей с сервисами, я решил а вдруг все будет просто и направился в ближайшую точку UPC. В Минске у меня с 2012го года была возможность подключать статический IP у моего провайдера, да что уж там, даже государственный Белтелеком за небольшую сумму предлагал подключить статический IP для индивидуального пользователя. Однако поляки были настолько удивлены вопросом о подключении статического IP для не бизнеса, что был вызван менеджер и за 10 минут он так все равно не понял, зачем физическому лицу может понадобиться статический IP. Естественно ничего у меня не вышло. Ну вот круг замкнулся и я снова тут.
С предисловием закончили, приступим к делу. Задача следующая: как всегда знать публичный IP своего устройства даже вне локальной сети.
Прособирав разные гайды в одном месте я пришел к следующему:
создал папку shareip в моих документах, где будет происходить все непотребство
Создал в этой папке 3 файла: new_ip.txt, old_ip.txt и getip.bat. В последний помещаем следующую команду, которая получает ваш публичный ip и записывает полученное значение в файл new_ip.txt
nslookup myip.opendns.com resolver1.opendns.com > ./new_ip.txt
Далее создаем скрипт на питоне script.py, который будет вызывать батник с прошлого пункта, проверять поменялся ли ip и, если да, то отправлять обновленный ip мне на почту.
import subprocess
import smtplib
def CheckFile():
file = open('old_ip.txt', 'r')
if ip != file.read():
file.close()
open('old_ip.txt', 'w').close()
file = open('old_ip.txt', 'w')
file.write(ip)
file.close()
return True
return False
def SendMail():
content = ip
connection = smtplib.SMTP_SSL('smtp.server', 465)
connection.login('login, 'password')
connection.sendmail('sender email', 'recipient email', content)
connection.quit()
def GetIp():
open('new_ip.txt', 'w').close()
subprocess.call('getip.bat')
GetIp()
ip = open('new_ip.txt', 'r').read()
if CheckFile() == True:
SendMail()
После нужно настроить джобу, которая будет периодически запускать наш скрипт. Для начала создадим файл scheduler.bat. С помощью него мы будем запускать, созданный нами скрипт:
"C:\Python311\python.exe" "C:\Users\User\Documents\shareip\script.py"
pause
Далее запускаем стандартную тулу Task Scheduler -> Action -> Create Task… -> Во вкладке general задаем имя -> Triggers -> New… -> Daily -> Repeat task every: 1 hour for a duration of: Indefinitely. -> Ok. -> Actions -> New… -> Browse -> Указываем путь до scheduler.bat -> Ok -> Ok.
Далее нужно включить RDP на удаленном компьютере. Для windows 11 это Settings -> System -> Remote Desktop -> Remote Desktop -> On.
-
Следующий шаг - установить статический ip для своего компьютера в вашей локальной сети. Для этого перейдите Control Panel -> Network and Internet -> Network and Sharing Center -> Change adapter settings -> Выберите свой текущий адаптер и зайдите в свойства. В свойствах найдите пункт Internet Protocol Version 4 (TCP/IPv4). Мой роутер находиться по адресу 192.168.1.1 (адрес своего вы можете узнать на обороте своего роутера, в инструкции или погуглить)
IP address
192.168.1.2
Subnet mask
255.255.255.0
Default gateway
192.168.1.1
Preferred DNS server
8.8.4.4
Alternate DNS server
8.8.8.8
Далее в настройках роутера вам нужно пробросить ваше устройство с вашим открытым портом в интернет. У меня этот пункт называется NAT где я указываю адрес моего компьютера, протокол и диапазон портов: 192.168.1.2 tcp 3389:3389
Может выйти так, что вы подключаетесь к своему устройству, но на моменте входа в аккаунт - не принимает пароль, так как у вас настроен только Hello PIN. Выполните следующую команду runas /u:MicrosoftAccount\your@email.com cmd.exe вас попросит ввести ваш пароль от аккаунта. После этого все должно заработать
Надеюсь, кому-то этот мини гайд пригодится (за все ошибки извините. Что вы вообще мне сделаете? Я в другом городе :-)
Комментарии (50)
Foggy4
27.05.2023 08:43+12Если провайдер выдает по DHCP "белый IP" , то проще все же DNS сервис настроить, почти все они имеют утилиту, которую можно прямо на комп поставить, если роутер не поддерживает. Сейчас просто многие провайдеры дают IP из приватного диапазона и тогда поможет только TeamViewer и иже с ними.
" Как бы не хвалили этот сервис, я получил стабильные дисконнекты каждые 5-10 минут. " - не очень понятно, как такое поведение может быть связано с DNS сервисом, вы получаете IP по доменному имени и все, далее DNS сервис в процессе никак не участвует.
Telmah
27.05.2023 08:43+10а автор смело выставляет RDP своего компа в мир на стандартном порту...
Konstantinus
27.05.2023 08:43+3обычно так делают до первой попытки взлома :)
acyp
27.05.2023 08:43+1Простой аналог fail2ban решает проблему брута. Регулярно поосматриваю securelab. Последняя дата уязвимости rdp-СЕРВЕРА с возможностью хоть какого-то доступа датирована 2007тгодом и относилась к rdp 7.0 (кажись).
nidalee
27.05.2023 08:43+2Дополню, что под эти цели уже есть софт.
Так что велосипед повторно можно не изобретать.
Daysleeper
27.05.2023 08:43Remote Desktop Gateway
nidalee
27.05.2023 08:43Это лишний сервер на винде нужен. Не у всех есть.
Есть, конечно, rdpgw, но там думать надо. :)
grvctr Автор
27.05.2023 08:43Я для наглядности оставил в статье стандартный порт)
sergey-kuznetsov
27.05.2023 08:43+1Нестандартный порт помогает буквально на несколько минут.
А банить по IP тоже бесполезно, так как брутят через ботнеты и каждая попытка идёт с нового адреса.isden
27.05.2023 08:43По моему опыту (ssh на нескольких серверах) помогает на срок от месяца до полугода.
После смены порта изредка кто-то тыркается. Потом в какой-то момент начинается прямо натуральный брутфорс, с мегабайтными логами попыток. Плюс один к номеру порта, и снова наслаждаемся чистыми логами какое-то время.
Поначалу пробовал банить адреса, потом подсети, потом их стало слишком дофига из разных локаций.
maxivanuk
27.05.2023 08:43+6Ой как неправильно вы делаете.... Вы же открыты всему миру, в том числе и неблагонадежным ребятам....
Рекомендую не следовать данному гайду. Да и вообще, как-то сложно.
Могу порекомендовать для таких случаев сервис ZeroTier - это локалка через интернет без сложных конфигураций... И будет достаточно надёжно.
Также, могу порекомендовать сервис облачного dns от микротика - там все эти плюшки из коробки (раздел ip-->cloud)
Ещё, если очень хочется именно открывать порт наружу, читать инструкции по "port knocking"
А вот открытые порты на маршрутизаторе - закрывайте ????
Darkholme
27.05.2023 08:43С "облачным dns" от mikrotik советую быть предельно осторожным. Он любит отваливаться из-за нагрузки на их сервера, и тогда к серверу вы не подключитесь. Концнепция сама по себе мне нравится и даже сам иногда пользуюсь, но лучше для резерва подключить тот же no-ip либо другого провайдера DDNS. А вот port knocking советую всем, жаль что не все хотят пошевелить пальцами и извилинами 10 минут. Но справедливости ради, оно не всегда удобно и нужно таскать всегда с собой скрипт или клиент.
nbkgroup
27.05.2023 08:43+6Выставлять голый RDP на статическом IP в сеть — это безумие. Да и на динамическом тоже.
А если серый IP от CGNAT будет — вообще работать будет невозможно.
avelor
27.05.2023 08:43+7Взять кинетик, настроить sstp через их облако (не нужен публичный адрес, не говоря про динамический), просто и относительно безопасно.
Альтернативно универсальный вариант - со своей виртуалкой где-нить в аренде, туннель до неё из дома и с планшета/ноутбука.
А ваш вариант подойдёт в редких случаях когда имеем публичный адрес на оьорудовании, но и да, есть варианты более простые, без велосипеда. Но с открытым рдп наружу как минимум используйте fail2ban решения и нестандартный порт (всё равно будут брутфорсить и проверять на уязвимости:) ). Не лишним будет подумать про MFA на rdp. Но и потом усё равно перейти на впн:)
Kotofay
27.05.2023 08:43+3Чего только не придумают, лишь бы не ставить Tailscale.
Johan_Palych
27.05.2023 08:43+1Tailscale - самый быстрый вариант c Free-планом. Подробные доки.
Headscale(An open source, self-hosted implementation of the Tailscale control server)
ZeroTier
Salavat
27.05.2023 08:43Верно. Дополню еще: комп выключаю. Постоянно включен rasp pi еще первая версия тоже с Tailscale. Через него смотрю камеру и также могу включить комп. Далее уже по rdp можно подключиться к компу с Tailscale, сделать дела, выключить. С телефона тоже удобно.
Konstantinus
27.05.2023 08:43+1Некоторое время использовал подобный способ повесим RDP на нестандартный порт. Со временем Виндоус отказался меня авторизировать из-за слишком частых попыток авторизации.
То есть логин/пароль у меня были сохранены и корректны. Но злоумышленники вычислив что на порту слушает rpd-сервер, брутфорсом пытались взломать систему.Компьютер к которому подключались показывал 30-50% загрузку процессора в момент простоя.
Добавил на роутере правило что подключение происходить только с белого списка IP - и все проблемы ушли.
Darkholme
27.05.2023 08:43На самом деле не всегда белый список возможен. Тогда приходится либо городить VPN, либо port knocking. От себя рекомендую и первое и второе. Теперь ваша сеть будет в безопасности а логи чистыми.
upd: если у вас mikrotik то сама судьба говорит что нужно использовать. Если что попрощо - VPN сервер и погнали.
Konstantinus
27.05.2023 08:43У меня Микротик. В правиле прописал условие что проброс только для этих Scr. Address.
nUser123
27.05.2023 08:43SSH туннель еще можно прокинуть
Antra
27.05.2023 08:43Кстати да. Если не хочется заморачиваться с полноценным VPN, уж хотя бы прокинуть SSH туннель с сертификатом и уже внутри подключаться по RDP. Но никак не сам RDP порт выставлять публично.
Тем более, что даже на винде можно OpenSSH.Server штатно развернуть. Со всякими C:\Users\user1\.ssh\authorized_keys и т.п.
vadimr
27.05.2023 08:43+1Статический ip стоит недорого, а решает очень много проблем. Ну и белый список для соединений, конечно.
maledog
27.05.2023 08:43+4Какая-то матрешка. Раз уж используем python, что мешало из него же вызвать nslookup и прочитать stdout, чтобы не возиться с временным файлом? Не говоря уже о том что существуют более простые способы получить свой ip, например "curl https://yoip.ru/api/" .
Felin
27.05.2023 08:43@grvctr
https://so-viewer.com/ вам в помощь
бесплатный, без ограничений, не благодарите.
vvzvlad
27.05.2023 08:43+1Боже. Почему не VPN/Zerotier/Tailscale? Почему не белый IP? Зачем извращаться? Зачем делать дырку в безопасности? Почему скрипт такой кривой? Зачем статический IP в локалке? Виндузятники..
nevzorofff
27.05.2023 08:43+1Вы реализовали тот же самый dyndns, который никак не мог быть источником обрывов.
Он не выполняет функции VPN, а делает то же, что и ваш скрипт - сообщает вашему клиенту RDP IP адрес вашего компьютера с RDP.
xkb45bkc4
27.05.2023 08:43А если поставить Hamachi, то два ПК будут в одной сети, причем подойдет любой серый ip от провайдера, ну а дальше уже RDP?
alexander222
27.05.2023 08:43-2Лет пятнадцать назад, когда был молодым и не опытным, решал эту проблему скриптом на сайте, который с параметром ?set записывал ip с котороко его вызвали, а с параметром ?get отдавал. Дома прописал в планировщик раз в минуту дергать скрипт на серевере, а когда было нужно заходил смотрел ip
samponet
27.05.2023 08:43Я что-то не понял- вся эта возня для того, чтобы предоставить доступ к своему компьютеру? Или таки к клиентскому? Если к своему, то это не сработает в сетях сотовых и большинства наземных провайдеров, ибо те и те предоставляют доступ через NAT и все dinDNS курят в сторонке. Самый простой способ, как говорили выше, тайлскейл. Если для клиентов, то там то же самое, так что легче дать им ссылку на клиента, развернув у себя что-то вроде Mesh и не мучится больше.
Читая статью, я думал вот нашелся парень, который запросто без танцев с бубуном умеет пробрасывать RDP до любого клиента, а оно вон чего оказывается.Antra
27.05.2023 08:43Как в tailscale выглядит процедура "подключения"? Действительно достаточно дать ссылку на клиента?
В свое время у меня сложилось впечатление, что на клиенте нужно ввести пароль от аккаунта, что меня категорически не устраивало для "подключить друга". Я про бесплатную версию, конечно, в энтерпрайзах понятно что хоть SSO делай.
В обшем, по этой причине я выбрал ZeroTier, где достаточно передать номер сети, а финально подтверждаешь подключение сам, в своей админке.
Как сейчас? Так-то Wireguard мне очень нравится. (Еще бы не ругался периодически на винде, что не может создать адаптер, совсем было бы хорошо)
samponet
27.05.2023 08:43Относительно tailscale я имел в виду именно для себя, для объединения своих ресурсов в одну сеть. Для клиентов конечно это не подходит именно из-за авторизации в аккаунте. Да для клиентов, по большому счету, и не надо их в одну сеть объединять,слишком заморочисто с точки зрения безопасности. Однако Meshcentral поддерживает маршрутизацию RDP до клиента, не без костыля, но реально.
MozgFx
27.05.2023 08:43Тулза и тулса я ещё понимаю коверканное от английского слова tools... утилиты. Но "тула" Карл... это что...? И ещё "джоба"? Почему задача называется джобой... Почему планировщиком не управляете через командную строку? ведь все очень просто!
MozgFx
27.05.2023 08:43Автор можно я сокращу твой мануал до нескольких строк.
1 пробрасываем порты на роутере и резервирует ip внутри сети, разрешаем rdp
2 настраиваем dyndns (или что там у вас за сервис) вышеупомянутый вам даже почта не нужна, достаточно знать dns имя.
3 когда нужно подключиться пингуем dns имя и получаем нужный ip с любого места в любое время.
4 при подключении используем тот ip что выдал нам ping. Порт который вы указали при настройке роутера.
Работает при наличии белого IP.
Darkholme
А причём здесь DDNS? Что мешало поставить клиент другого DDNS сервиса на ПК?