Надеюсь, я попал на правильный сайт, так как это мой первый вопрос здесь !!
Итак, вот моя ситуация. У меня есть небольшой сервер, размещенный дома за линией DSL, для которой у меня есть статический IP-адрес. Теперь я хотел бы, чтобы на одном порту работали две разные службы. Я не могу применить какую-либо фильтрацию исходных IP-адресов, поскольку они оба должны быть доступны откуда угодно. В общем, я думаю, что нет способа сделать это, и единственное решение - запускать службы на 2 разных IP-адресах.
Для этого я думал об использовании другой линии DSL, для которой у меня, очевидно, есть второй общедоступный IP-адрес. Есть ли способ перенаправить трафик, адресованный определенному порту, на другую машину, но в Интернете, а не внутри LAN ???
Ах, конечно, я надеялся сделать это только с модемом / маршрутизатором, без какого-либо дополнительного оборудования (иначе это было бы слишком просто, какой-то трубопровод netcat и поехали !!). Для заинтересованных маршрутизатор - Zyxel P-2602R-D1A (текст ссылки)
Любые идеи и предложения приветствуются !!!
Спасибо
Теоретически это сработает. Вам нужно будет настроить переадресацию портов с дополнительного общедоступного IP-адреса на исходный IP-адрес. В вашем случае extraIP: 80 на originalIP: 81.
У меня с iptables такая настройка. Он был разработан для облегчения миграции между различными диапазонами общедоступных IP-адресов. По сути, «старый» общедоступный IP-адрес будет преобразован через NAT в «новый» общедоступный IP-адрес. NAT прошел через Интернет без проблем.
Сомневаюсь, что с вами будет работать модем / роутер. Скорее всего, он может выполнять переадресацию портов на IP только в своей локальной сети. Единственный способ узнать это - попытаться преобразовать любой случайный публичный IP-адрес в NAT, и вы увидите, работает ли он.
Я попытался сделать это с помощью pfense, но потерпел неудачу. Только IPTables сработал правильно.
Это возможно, но сложно, я сомневаюсь, что ваш средний домашний маршрутизатор будет обладать необходимой гибкостью.
В оставшейся части этого поста я предполагаю, что ваши маршрутизаторы - это обычные Linux-системы. Эти принципы, вероятно, будут применяться на других платформах, но я не знаю подробностей.
В iptables правила «DNAT» используются для изменения места назначения соединений. Iptables с радостью изменит пункт назначения на все, что вы захотите.
Это отлично работает, когда цели вашего правила DNAT находятся в локальной сети за маршрутизатором, реализующим DNAT. DNAT изменяет пункт назначения в начальном пакете соединения, устанавливает запись отслеживания соединения и передает пакет в пункт назначения. Ответ возвращается через тот же маршрутизатор, соответствует записи отслеживания соединения, подвергается обратному преобразованию и отправляется обратно источнику. Источник принимает пакет, и связь продолжается.
Это не так хорошо работает, когда цель вашего правила DNAT находится в другой сети где-то в Интернете. DNAT изменяет пункт назначения в исходном пакете и передает пакет обратно вашему провайдеру.
Если ваш интернет-провайдер следует лучшим практикам, его входящая фильтрация на этом этапе отбрасывает пакет на пол, но давайте притворимся, что это не так.
Пакет доставляется на сервер, который отвечает ему и отправляет ответ клиенту. К сожалению, ответный пакет никогда не попадает в маршрутизатор, реализующий DNAT, и никогда не подвергается обратной трансляции. Таким образом, клиент получает пакет с неожиданным адресом источника, который сразу же падает на пол.
Итак, как нам это обойти?
Один из вариантов заключается в том, что помимо передачи пакета через правило DNAT мы также передаем его через правило SNAT / MASQUERADE. Это позволит избежать проблем с входящей фильтрацией ISP и вернет ответы в блок NAT, чтобы можно было применить обратную трансляцию. К сожалению, он также скроет IP-адрес клиента от сервера, что сделает контроль над злоупотреблением практически невозможным.
Другой вариант - объединить VPN с политикой маршрутизации. Вместо того, чтобы отправлять пакеты из NAT-бокса на сервер через открытый Интернет, мы отправляем их через VPN. Затем на сервере используется политика маршрутизации, так что когда пакет приходит через VPN, ответы на этот пакет также отправляются через VPN.
Вы должны добавить правило DNAT на маршрутизатор B. Это означает, что маршрутизатор B должен поддерживать DNAT и быть достаточно гибким, чтобы выполнять DNAT на том же интерфейсе. Если нет, попробуйте установить альтернативную прошивку, например OpenWrt.
Теперь я хотел бы, чтобы две разные службы работали на одном порту.
Так не получится. Каждая серверная программа должна прослушивать свой собственный порт (вы столкнетесь с ошибками «не удается привязать» или «порт используется», если две программы пытаются открыть один и тот же порт).
Если вы говорите о хостинге двух разных веб-сайтов, это достигается виртуальным хостингом на основе имени. То есть один сервер прослушивает порт 80, но запросы для сайтов 1 и 2 отправляются в разные места.
Кроме того, вам понадобятся два общедоступных IP-адреса или вам нужно будет использовать разные порты.
Я уверен, что ваш интернет-провайдер будет рад продать вам другой IP-адрес. Возможно, вам придется приобрести другой маршрутизатор DSL (я не знаю, знает ли ваш, как обрабатывать более одного общедоступного IP-адреса), но вам не понадобится другая линия DSL.