Mikrotik: портмаппинг на внешнем интерфейсе и клиент из локальной сети не может подключиться, используя белый адрес роутера. Существует ли решение?
Здравствуйте!
Есть следующая конфигурация: роутер микротик (RouterOS 6.18), интернет PPoE (внешний адрес 69.69.69.69), несколько комп-ров в локальной сети. На одном из-комп-ров (192.168.0.2) некий сервис слушает tcp порт 128, в связи с чем был проброшен снаружи порт для внешних клиентов:
add action=dst-nat chain=dstnat dst-address=69.69.69.69 dst-port=128 protocol=tcp to-addresses=192.168.0.2 to-ports=128
Всё работает, как и ожидалось.
Далее возникает необходимость клиенту из локальной сети подключаться с сервису, используя как целевой не локальный адрес 192.168.0.2, а внешний 69.69.69.69; после чего выясняется, что для локальных клиентов успешно только пингование внешнего адреса роутера, а попытки подключения к любому из заведомо открытых портов (22, 80, 128) не приносят успеха.
Т.к. ранее я с микротиками не сталкивался, то, видимо, или что-то упустил в документации, или просто не понимаю.
Никаких хитрых правил фаервола\ната\роутинга нет, у локальных клиентов никаких ни ограничений, ни проблем доступа в интернет нет.
Так же подобная конфигурация (обращаться к роутеру из локальной сети, используя внешний адрес) работала на бюджетных роутрах (типа длинк-асус) без дополнительных правил роутинга или фаервола.
Попытки написать какие-либо дублирующие правила для этого конкретного не-локального адреса (ведь доступ и маскарадинг из локальной сети во внешнюю и так уже разрешен и работает) к успеху не привели.
Собственно, сам вопрос: что нужно сделать микротику, чтобы клиент 192.168.0.1 смог успешно соединится с 69.69.69.69:128 ? или это неисправимая особенность микротика?
Другая форма такой же проблемы:
маршрутизатор Mikrotik, внешний адрес 69.69.69.69 ; адресация локальной сети 192.168.88/24 ; всем локальным клиентам доступен интернет без каких либо ограничений (правило создано одно: всех из внутренней сети NATить наружу).
Вопрос: какую неочевидную настройку микротика нужно сделать, чтобы у клиента в локальной сети открылась страница по адресу http: // 69.69.69.69 (это веб-интерфейс управления роутером) или получить ssh по адресу 69.69.69.69:22 ?
вероятная проблема в том, что вы используете in-interface=garstelecom
а в случае доступа из локальной сети пакты идут с локального интерфейса, по ссылке используется dst-address=1.1.1.1
Скорее всего, не работает по следующей причине: инициатор соединения (клиент с адресом 192.168.0.*) посылает запрос на адрес 69.69.69.69. На роутере переписывается адрес назначения (на 192.168.0.2), но не переписывается адрес отправителя. Сервер (получатель) видит, что пакет отправлен с локального адреса (192.168.0.*) и ответ шлёт напрямую на этот адрес (в обход роутера). А клиент в результате получает ответ на свой запрос не с ожидаемого адреса 69.69.69.69, а с 192.168.0.2, так что считает такой пакет невалидным и игнорирует.
Для более точной диагностики нужны выводы следующих команд от имени root на роутере:
ifconfig -a
route -n
iptables-save
# если третья команда не работает, то вместо неё две:
iptables -nvL
iptables -t nat -nvL
К сожалению, выполнения "в лоб" этих "стандартных" микротик не предоставляет. Есть топорные аналоги (которые я еще не всё нашёл) - например, маршруты (остальную информацию я еще не собрал в удобоваримом виде):
[admin@MikroTik] /ip route> print
Flags: X - disabled, A - active, D - dynamic, C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme,
B - blackhole, U - unreachable, P - prohibit
# DST-ADDRESS PREF-SRC GATEWAY DISTANCE
0 ADS 0.0.0.0/0 69.69.69.128 1
1 ADC 69.69.69.128/32 69.69.69.30 pppoe-out1 0
2 ADC 192.168.88.0/24 69.69.69.1 bridge-local 0
074909: @074909: "out-interface=pppoe-out1" натятся пакеты только для pppoe, вероятно нужно добавить еще одно правило, чтобы натились пакеты уходящие во внутреннюю сеть на ip сервера
Если я правильно понимаю, #2 и #3 как раз это и делают: destination nat с подменой адреса назначения.
И они работают за исключением случая, когда источник находится в локальной сети за этим же роутером.
074909: в пакете нужно менять адрес источника (srcnat)
т.е. что-то вроде
chain=srcnat action=masquerade out-interface=bridge-local dst-address=192.168.88.25
ldvldv: Действительно, один-в-один, спасибо за ссылку.
Создал правило по мануалу:
chain=srcnat src-address=192.168.88.0/24 dst-address=192.168.88.25 protocol=tcp dst-port=1228 out-interface=bridge-local action=masquerade
но эффект нулевой, всё так же отсутствует доступ.
Уже завтра перепроверю, какие интерфейсы в какие группы входят; или, возможно, попробую совсем прямолинейно изменить экшн на action=src-nat to-addresses=69.69.69.30
ldvldv: Ваша ссылка - однозначно описывает и проблему, и ее решение. Напишите ее, пожалуйста, еще раз отдельным ответом, а не комментарием к ответу, чтобы я смог указать ответ как решение.
Добиться практически решения задачи на том маршрутизаторе, что у меня был, не представилось возможным, больше доступа к нему нет.
Скорее всего - особенность Микротика.
Была похожая задача - на Микротике на внешнем интерфейсе несколько внешних белых адресов, сделано несколько подсетей за НАТом, на разных внутренних портах. Проброшен порт RDP с одного внешнего адреса на вутренний 192,168,24,18. Снаружи работает, из своей сети 192.168.22.ХХХ - не работает. За разумные сроки не решили.
В регламенте обмена данными с сервером этого волшебного приложения, похоже, используется адрес сервера, и, судя по всему, адрес сообщается клиентом. Как результат - ресурсы, добавленные локальным клиентом, не могут получить снаружи (им же серый адрес 192.168.0.2 ни к чему), ни наоборот - добавленные внешними клиентами ресурсы не может получить локальный клиент (потому что нет доступа к своему же белому адресу).
Сергей: внешний клиент подключается (указывая белый адрес), работает с общим проектом, в процессе добавляя условные "текстуры". локальный клиент подключается (указывая серый адрес) к этому же проекту, тоже добавляет "текстуры". Сервер сообщает внешнему клиенту об изменениях и тот безуспешно пытается забрать "текстуру" с сервера 192.168.0.2 (предполагаю, что сервер ему сообщил, что автор ему сообщил адрес сервера, куда он аплоадил). То же самое и с другой стороны - локальный клиент не может получить текстуру с сервера 69.69.69.69
Это что касается "зачем".
По части "как сделать", насколько я понимаю, у Вас мыслей нет, кроме "тупой бред" и кристального видения деталей работы неназванного неизвестного приложения. Если и в дальнейшем Вы планируете придерживаться линии "сквернословие без конструктивизма", то я очень попрошу просто промолчать: такие сообщения не уточняют вопроса и не отвечают на него.
Многословность моих ответов объясняется тем, что задача простая, никаким принципам маршрутизации логически не противоречит, и при этом решается на не-микротиках.
перво-наперво нужно указывать приложение(и реальные порты в том числе), а не строить из себя супершпиона. исходя из первого нужно смотреть сколько портов вообще задействовано. второе - я уже давно не видал программ которым нужно явно указывать один интерфейс. ройтесь в настройках ибо вышеупомянутое это прошлый век. третье!!!! клиент может обращаться по домену!!!!!!!!!!!!!!!!!!!!! а не по айпишнику! для внешников один адрес, для внутрянки через заглушку второй!!!!!!!!!!
Я уже понял, что Вы из будущего считаете, что мне в прошлом веке такая задача не нужна и только поэтому решение тоже не нужно.
К сожалению, рабочая схема не включает в себя ни днс серверов, ни использования доменных имён.
Я искренне рад, что Вам не приходилось сталкиваться с кривыми приложениями и с оборудованием, настройки которого неочевидны.
Специально для Вас изменю вопрос, оставив суть избавившись от упоминания каких-либо имен приложения и нестандартных портов. Итак, дано:
маршрутизатор Mikrotik, внешний адрес 69.69.69.69 ; адресация локальной сети 192.168.88/24 ; всем локальным клиентам доступен интернет без каких либо ограничений (правило создано одно: всех из внутренней сети NATить наружу).
Вопрос: какую неочевидную настройку микротика нужно сделать, чтобы у клиента в локальной сети открылась страница по адресу 69.69.69.69 (это веб-интерфейс управления роутером) или получить ssh по адресу 69.69.69.69:22 ?
я бы помог. если бы запрашиваемое вами решение не числилось в моем мозге как костыль =). вы же упрямо не хотите решать задачу с правильного конца. увы ... надеюсь вам не помогут в данном конкретном случае.
Сергей: Т.е. ответа на поставленный вопрос у Вас нет.
Еще раз напомню свою просьбу: воздержитесь, пожалуйста, от написания сообщений на тех "вопросах-ответах", которым не собираетесь ни уточнять вопрос, ни отвечать на него.
ответ на вопрос у меня есть. аж два. могу еще четыре придумать. или пятьдесят (это легко в случае с микротиком и наличии извращенного мозга). но я вам настоятельно рекомендовал корректно настроить сервер. вы не хотите. беда с вами. обычно помогают людям которые в тупике и не могут решить задачу. вам я явно указал что ваша задача не в этом. вы игнорируете.
Повторяю вопрос:
маршрутизатор Mikrotik, внешний адрес 69.69.69.69 ; адресация локальной сети 192.168.88/24 ; всем локальным клиентам доступен интернет без каких либо ограничений (правило создано одно: всех из внутренней сети NATить наружу).
Вопрос: какую неочевидную настройку микротика нужно сделать, чтобы у клиента в локальной сети открылась страница по адресу 69.69.69.69 (это веб-интерфейс управления роутером) или получить ssh по адресу 69.69.69.69:22 ?
Вот Вы такой умный. Это Вы сами решили или кто-то сказал?
Я впервые столкнулся с микротиком на практике, а не в теории. Прошу совета у сообщества, т.к. не понимаю и не смог найти в документации: невозможность обратится из локальной сети к маршрутизатору по его внешнему адресу - это его конструктивная особенность (с учетом того, что требуемое поведение ничему не противоречит, вполне стандартно, и решается на любых других маршрутизаторах вне зависимости от их цены) или какая-то неочевидность настройки, которую я проглядел.
В чём суть ваших сообщений, если отбросить прямые оскорбления и голословность утверждений о наличии ответа и некорректности вопроса - лично мне не ясно. Поблагодарить могу, если это Вам необходимо: в конце концов, только необходимость понять, что Вам нужно, и заставила меня переформулировать вопрос более кратко и лаконично.
Я тупой. Я сам так решил. =) Жить легче. Меня просто забавляет ваша реакция. Вы изначально поставили задачу с множеством неизвестных. Рассказывая ужасы как у вас там всё плохо. Я вам указал что вы не с того конца заходите на поставленную задачу. Вас такой подход не устроил и вы сказали что вы умнее, и знаете лучше что делать. А я тупее и знаю что так не надо делать =). Выводы каждый сделал сам для себя.
Я уже понял свою ошибку в том, что вопрос был излишне многословен и на поверхностный взгляд неконкретен. Благодаря Вам я изменил форму настолько упрощёно, насколько возможно, не изменив сути проблемы. Я прекрасно понимаю, что говорить о принципиальном наличии решения легче, чем предоставить собственно само решение или подтвердить наличие именно такой особенности маршрутизаторов конкретного производителя.
Был бы очень признателен, если бы Вы высказались по сути проблемы (а не о моих личных качествах, ценах на оборудование, Ваших жизненных принципах, или неправильности задач, которые иногда могут встать пред любым человеком без возможности изменить их условия). Итак, дано:
маршрутизатор Mikrotik, внешний адрес 69.69.69.69 ; адресация локальной сети 192.168.88/24 ; всем локальным клиентам доступен интернет без каких либо ограничений (правило создано одно: всех из внутренней сети NATить наружу).
Вопрос: какую неочевидную настройку микротика нужно сделать, чтобы у клиента в локальной сети открылась страница по адресу http: // 69.69.69.69 (это веб-интерфейс управления роутером) или получить ssh по адресу 69.69.69.69:22 ?