Jump to content
Калькуляторы

Переброс порта внутри локалки ..с самого сервера на другой 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

 

 

 

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

Share this post


Link to post
Share on other sites

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

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.

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

мы для такой задачи использовали tcppm

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
Дегтярев Илья,

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

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

 

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

 

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

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

Edited by Дегтярев Илья

Share this post


Link to post
Share on other sites
Дегтярев Илья,

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

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

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

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

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

Ламеры :)

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

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

 

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 стек видит данные пакеты, полученные внутренним интерфейсом, как направляющиеся внутрь сети.

 

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

Share this post


Link to post
Share on other sites

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

 

/etc/inetd.conf

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

 

Share this post


Link to post
Share on other sites
сам во фре слабо шарю, нашёл пример который кидал знакомый в аську, задача была та же

 

/etc/inetd.conf

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

 

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

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

 

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this