Коллеги, добрый день, заказали из Китая GPS-трекеры, они обмениваются с сервером TCP-пакетами с координатами, в настройках можно задать IP сервера и APN сим-карты.
Планируем их использовать на производстве, но есть один момент - там КСПД (то есть своя сотовая сеть LTE), поэтому в этой сети будет добавляться выход в глобальный интернет, чтобы трекер по запросу айпи адреса нашего сервера, искал его не в локальной сети, а отправлял в глобальный.
В этой сети стоит файрвол, соответственно нужно добавить айпи и порт в исключения. С исходящими запросами понятно - просто адрес сервера, который слушает TCP. Но от тех отдела производства поступил вопрос - трекер не только отправляет пакет, но и получает ответ от него, соответственно какие порты нужно добавлять в исключения для входящего трафика?
Это называется исходящий порт или порт источника. Он часто не фиксированный, а меняется в широких пределах (от 1025 до 65535).
С какого порта был отправлен запрос, на тот порт и придёт ответ. Это обязательный принцип.
Для файрвола такой проблемы нет, потому что файрвол отслеживает установленные соединения и пропускает ответы независимо от номера порта. Если только специально не настраивать отличное от этого поведение.
Когда через файрвол пролетает первый пакет, то файрвол не находит в своих записях такого соединения, проверяет по своим правилам, что его нужно пропустить, заносит новую запись о соединении с такого-то адреса на такой-то, с такого-то порта на такой-то. Когда летит ответ, то файрвол обнаруживает свою запись, что исходящее соединение уже было разрешено, значит и ответ нужно пропустить без дальнейших проверок.
Это если "на пальцах" объяснять.
tttttv, на самом деле, лучше не мой ответ отметьте решением, а ответ hint000 . Он намного детальнее и правильнее ответил. К коментарию Руслан Федосеев тоже прислушайтесь. :)
Я дал очень общий ответ.
Суть в том, что если ваши сетевеки задают такой вопрос, то, наверное, у них настроено по принципу "всё, что явно не разрешено на роутере, то - запрещено", включая established и related соединения инициированные вашими трекерами. Поэтому надо разрешить всем трекерам обращаться к их серверу во-вне и разрешить все вернувшиеся от этого сервера соединения. Это всё схематично и очень грубо.
Либо надо разрешить на файрволе входящие вернувшиеся соединения (established connection) которые инициировали трекеры, либо разрешить все входящие с айпиадреса сервера откуда приходят такие соединения.
Все ответы написаны с предположением, что межсетевой экран поддерживает запоминание состояний (stateful), а не работает просто по пакетам (stateless). Вероятно, раз вам задают такой вопрос, у оператора установлен stateless файрволл, и необходимо будет либо разрешить все эфемерные порты, либо, если есть доступ к коду трекера, делать bind() сокета на определённый фиксированный порт перед совершением соединения.