bNet Posted December 10, 2009 Posted December 10, 2009 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 ...что естественно не работает.. могут быть варианты сделать такой проброс? Вставить ник Quote
Abram Posted December 10, 2009 Posted December 10, 2009 Не знаю, как в фре, в линупсе делается так: 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. Странно, гугль по этому поводу молчит. Вставить ник Quote
bNet Posted December 10, 2009 Author Posted December 10, 2009 вот именно, гугль молчит... и в примерах по pf.conf такого не встречал... Вставить ник Quote
Дегтярев Илья Posted December 11, 2009 Posted December 11, 2009 Так как сервер сидит не за шлюзом, а рядом, надо как то пакеты от сервера возвращать через шлюз. Например для 192.168.0.2 прописать шлюзом по умолчанию 192.168.0.1 Вставить ник Quote
Abram Posted December 11, 2009 Posted December 11, 2009 Дегтярев Илья, а сфигали 192.168.0.2 будет принимать пакеты, в которых чужой destination? Надо натить. Вставить ник Quote
trace Posted December 11, 2009 Posted December 11, 2009 мы для такой задачи использовали tcppm Вставить ник Quote
bNet Posted December 11, 2009 Author Posted December 11, 2009 а можно конкретно с примером? Вставить ник Quote
vop Posted December 11, 2009 Posted December 11, 2009 Не знаю, какая задача, но можно использовать port-proxy Вставить ник Quote
bNet Posted December 11, 2009 Author Posted December 11, 2009 задача такая: раньше по адресу 192.168.0.1 был сервер на Win 2003, и на нем стоял сервер чата (порт 9740). Теперь по адресу 192.168.0.1, находится шлюз на FreeBSD, а сервер чата перенесен на адрес 192.168.0.2, порт тот-же. проблемма в том, что у пользователей чат настроен по ІР адресу, а не по ДНС имени, и чтобы не бегать ко всем, пользователя, и не менять вручную адреса чата, я хочу чтобы сервер сам их перебрасывал Вставить ник Quote
Дегтярев Илья Posted December 11, 2009 Posted December 11, 2009 (edited) Дегтярев Илья,а сфигали 192.168.0.2 будет принимать пакеты, в которых чужой destination? Надо натить. Очевидно, что на 192.168.0.1 настроен dnat этого порта. Для получения ответа адрес в пакете нужно поменять назад. Можно вообще без ната, подняв .1 на лупбеке на втором компе. На настройщем .1 пакеты до нужного порта отроутить на .2, который увидев свой адрес (хоть и на лупбеке) корректно обработает пакет и правильно ответит. Edited December 11, 2009 by Дегтярев Илья Вставить ник Quote
Abram Posted December 12, 2009 Posted December 12, 2009 Дегтярев Илья,а сфигали 192.168.0.2 будет принимать пакеты, в которых чужой destination? Надо натить. Очевидно, что на 192.168.0.1 настроен dnat этого порта. Очевидно, что товарищ как раз и пытается его настроить ;).Вариант с лупбеком мне лично как-то не нравится. Слишком костыльно. Вставить ник Quote
vIv Posted December 14, 2009 Posted December 14, 2009 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 Вставить ник Quote
Ivan_83 Posted December 24, 2009 Posted December 24, 2009 Ламеры :) НАТ нада делать и рдр потом. В рускоязычном мануале по ПФ есть пример такой реализации. 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 стек видит данные пакеты, полученные внутренним интерфейсом, как направляющиеся внутрь сети. Авторы документации к пакетному фильтру рекомендуют в общем случае использовать какое-нибудь из предыдущих решений вместо последнего. Вставить ник Quote
disappointed Posted December 27, 2009 Posted December 27, 2009 сам во фре слабо шарю, нашёл пример который кидал знакомый в аську, задача была та же /etc/inetd.conf http stream tcp nowait root /usr/local/bin/socket socket 192.168.6.2 80 Вставить ник Quote
Kuzmich Posted December 29, 2009 Posted December 29, 2009 сам во фре слабо шарю, нашёл пример который кидал знакомый в аську, задача была та же /etc/inetd.conf http stream tcp nowait root /usr/local/bin/socket socket 192.168.6.2 80 Тогда уж rinetd поставить. Он хоть процесс на каждый коннект запускать не будет. Однако у такого способа есть минус - скрывается IP-адрес абонента, без которого трудновато будет "банить". P.S. Для любого севиса должно быть своё имя в DNS. Тогда проблем не будет. Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.