Как настроить RDP без static ip и сторонних сервисов

5b276d784286a71b4b3956771062911d

Для меня никогда не вставал вопрос про 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 своего устройства даже вне локальной сети.

Прособирав разные гайды в одном месте я пришел к следующему:  

  1. создал папку shareip в моих документах, где будет происходить все непотребство

  2. Создал в этой папке 3 файла: new_ip.txt, old_ip.txt и getip.bat. В последний помещаем следующую команду, которая получает ваш публичный ip и записывает полученное значение в файл new_ip.txt

nslookup myip.opendns.com resolver1.opendns.com > ./new_ip.txt

  1. Далее создаем скрипт на питоне 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()
  1. После нужно настроит джобу, которая будет периодически запускать наш скрипт. Для начала создадим файл scheduler.bat. С помощью него мы будем запускать, созданный нами скрипт:

"C:\Python311\python.exe" "C:\Users\User\Documents\shareip\script.py"
pause
  1. Далее запускам стандартную тулу 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.

  2. Далее нужно включить RDP на удаленном компьютере. Для windows 11 это Settings → System → Remote Desktop → Remote Desktop → On. 

  3. Следующий шаг — установить статический 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

  4. Далее в настройках роутера вам нужно пробросить ваше устройство с вашим открытым портом в интернет. У меня этот пункт называется NAT где я указываю адрес моего компьютера, протокол и диапазон портов: 192.168.1.2 tcp 3389:3389

  5. Может выйти так, что вы подключаетесь к своему устройству, но на моменте входа в аккаунт — не принимает пароль, так как у вас настроен только Hello PIN. Выполните следующую команду runas /u: MicrosoftAccount\your@email.com cmd.exe вас попросит ввести ваш пароль от аккаунта. После этого все должно заработать

Надеюсь, кому-то этот мини гайд пригодится (за все ошибки извините. Что вы вообще мне сделаете? Я в другом городе:-)

© Habrahabr.ru