Перейти к содержимому
Калькуляторы

Переброс порта внутри локалки ..с самого сервера на другой IP

OS FreeBSD 8

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

тоесть, при запросе на ІР сервера (192.168.0.1), по порту 9770, сервер перекидывал их на комп 192.168.0.2 на порт 9770

 

на сколько я знаю, это не реально, хоть и не понимаю почему :)

я прописал так

/etc/pf.conf:

 

rdr on vr0 proto tcp from any to 192.168.0.1 port 9770 -> 192.168.0.2

 

 

 

...что естественно не работает.. могут быть варианты сделать такой проброс?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не знаю, как в фре, в линупсе делается так:

iptables -t nat -A PREROUTING -d 192.168.0.1 -p tcp -m tcp --d-port 9770 -j DNAT --to-destination 192.168.0.2:9770

Ключевое слово - DNAT.

 

Странно, гугль по этому поводу молчит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

вот именно, гугль молчит... и в примерах по pf.conf такого не встречал...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Так как сервер сидит не за шлюзом, а рядом, надо как то пакеты от сервера возвращать через шлюз.

 

Например для 192.168.0.2 прописать шлюзом по умолчанию 192.168.0.1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Дегтярев Илья,

а сфигали 192.168.0.2 будет принимать пакеты, в которых чужой destination? Надо натить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а можно конкретно с примером?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не знаю, какая задача, но можно использовать port-proxy

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

задача такая:

раньше по адресу 192.168.0.1 был сервер на Win 2003, и на нем стоял сервер чата (порт 9740). Теперь по адресу 192.168.0.1, находится шлюз на FreeBSD, а сервер чата перенесен на адрес 192.168.0.2, порт тот-же. проблемма в том, что у пользователей чат настроен по ІР адресу, а не по ДНС имени, и чтобы не бегать ко всем, пользователя, и не менять вручную адреса чата, я хочу чтобы сервер сам их перебрасывал

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Дегтярев Илья,

а сфигали 192.168.0.2 будет принимать пакеты, в которых чужой destination? Надо натить.

Очевидно, что на 192.168.0.1 настроен dnat этого порта.

 

Для получения ответа адрес в пакете нужно поменять назад.

 

Можно вообще без ната, подняв .1 на лупбеке на втором компе.

На настройщем .1 пакеты до нужного порта отроутить на .2, который увидев свой адрес (хоть и на лупбеке) корректно обработает пакет и правильно ответит.

Изменено пользователем Дегтярев Илья

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Дегтярев Илья,

а сфигали 192.168.0.2 будет принимать пакеты, в которых чужой destination? Надо натить.

Очевидно, что на 192.168.0.1 настроен dnat этого порта.

Очевидно, что товарищ как раз и пытается его настроить ;).

Вариант с лупбеком мне лично как-то не нравится. Слишком костыльно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

OS FreeBSD 8

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

тоесть, при запросе на ІР сервера (192.168.0.1), по порту 9770, сервер перекидывал их на комп 192.168.0.2 на порт 9770

Я делал это через inetd, но по памяти синтаксис не напишу, но суть такая:

порт должен быть описан в services

в inetd.conf пишешь что-то типа:

port9770 ... ... ... socket 192.168.0.2 9770

 

Посмотри man socket как его вызывать

 

Но учти, что для принимающего сервера IP адреса клиентов заменятся на адрес компа с inetd

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ламеры :)

НАТ нада делать и рдр потом.

В рускоязычном мануале по ПФ есть пример такой реализации.

 

C.2.1.6.4.4. RDR в комбинации с NAT

 

И наконец, в комбинации с правилом NAT можно достичь того, что трансляция адресов источника так же будет осуществляться и соединение будет устанавливаться ожидаемым образом.

 

rdr on $int_if proto tcp from $int_net to $ext_if port 80 -> $server

no nat on $int_if proto tcp from $int_if to $int_net

nat on $int_if proto tcp from $int_net to $server port 80 -> $int_if

 

 

Эти правила приведут к тому, что первый пакет поступивший от клиента будет заново транслирован, когда будет отправлен через внутренний интерфейс, при этом у него будет подменён адрес источника на внутренний адрес шлюза. Внутренний сервер ответит шлюзу, который вернёт адреса обратно благодаря NAT и RDR трансляциям и пакет отправится к клиенту. Это достаточно сложный приём. Нужна осторожность, чтобы не применить правила NAT к другому трафику, например к внешним соединениям (прошедшим через другие правила rdr) или к соединениям самого шлюза. Так же имейте ввиду, что это преобразование приводит к тому, что TCP/IP стек видит данные пакеты, полученные внутренним интерфейсом, как направляющиеся внутрь сети.

 

Авторы документации к пакетному фильтру рекомендуют в общем случае использовать какое-нибудь из предыдущих решений вместо последнего.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

сам во фре слабо шарю, нашёл пример который кидал знакомый в аську, задача была та же

 

/etc/inetd.conf

http stream tcp nowait root /usr/local/bin/socket socket 192.168.6.2 80

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

сам во фре слабо шарю, нашёл пример который кидал знакомый в аську, задача была та же

 

/etc/inetd.conf

http stream tcp nowait root /usr/local/bin/socket socket 192.168.6.2 80

 

Тогда уж rinetd поставить. Он хоть процесс на каждый коннект запускать не будет.

Однако у такого способа есть минус - скрывается IP-адрес абонента, без которого трудновато будет "банить".

 

P.S. Для любого севиса должно быть своё имя в DNS. Тогда проблем не будет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.