Jump to content

Recommended Posts

Posted

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

 

 

 

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

Posted

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

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.

 

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

Posted

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

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

Posted (edited)
Дегтярев Илья,

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

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

 

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

 

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

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

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

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

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

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

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

Posted
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

  • 2 weeks later...
Posted

Ламеры :)

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

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

 

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

 

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

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

 

/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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.