Доступ к устройству через глобальный IP-адрес вместо порта пересылка на маршрутизатор

У меня есть скрипт python, размещенный на удаленном сервере. Допустим, хостинг-сайт предоставил URL-адрес myproject.host.com. Следующее является частью сценария:

import json
import socket
from flask import Flask
from flask import request
from flask import make_response
app=Flask(__name__)

# domain given by noip.com, forwarded port
ip = ('abc.noip.org', 9050)

# used to find device's global IP address, and modify the variable ip accordingly
@app.route('/findMyIP',methods=['GET'])
def findMyIP():
    global ip
    mip = request.environ.get('HTTP_X_REAL_IP', request.remote_addr)
    print(mip)
    ip = (mip,9050)
    return mip

@app.route('/webhook',methods=['GET'])
def webhook(data = 'Test Message'):
    # I am using UDP protocol
    sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    sock.sendto(data.encode(),ip)
    sock.close()
    return 'data sent'

Мой маршрутизатор перенаправил порт для доступа к устройству в локальной сети через Интернет.

Допустим, домен, предоставленный noip.com, - abc.noip.org, и перенаправленный порт - 9050.

С этой настройкой я могу получить доступ к своему устройству без каких-либо проблем.

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

Я пробовал сделать это:

-> С устройства я подключаюсь к «myproject.host.com/findMyIP». Обычно это показывает, что IP-адрес устройства имеет вид 10.xx.xx.xxx.

-> Я пытаюсь установить связь с устройством, используя IP-адрес, полученный на шаге выше.

Но мне не удается заставить его работать. Что мне здесь не хватает?

0
задан 8 January 2018 в 18:37
1 ответ

IP-адрес фактически является адресом сетевой интерфейс WAN вашего маршрутизатора, из-за этого маршрутизатор не знает, что новое входящее соединение на самом деле предназначено для вашего устройства в локальной сети маршрутизатора.

В конечном итоге маршрутизатор знает, что пакет предназначен для устройства, если есть существует правило (например, переадресация портов или DMZ), или если он увидел, что устройство сначала отправило соответствующий пакет другим способом.

Существует множество различных методов для подключения к серверу за SNAT, но один из моих любимых это pwnat Сами Камкара, поскольку для этого не требуется сторонний сервер, однако для этого потребуется, чтобы клиент также подключался с помощью pwnat.

В качестве альтернативы, если у вас есть общедоступный сервер, вы можете настроить обратный туннель SSH . Это может быть предпочтительнее, если вы хотите поделиться службой с другими.

В конечном счете, указанные выше варианты менее предпочтительны по сравнению с переадресацией портов, и их следует рассматривать только в том случае, если вы не контролируете маршрутизатор.

0
ответ дан 5 December 2019 в 06:52

Теги

Похожие вопросы