Страница 1 из 1

ipfw, fwd и bridge

Добавлено: 2013-01-12 14:01:27
xscrew
Всем привет.
Я тут новенький и очень рассчитываю на вашу помощь.

Без особых деталей.
Машина с двумя интерфейсами em0 и em1. Интерфейсы объединены в мост bridge0, на мост навешивается адрес 192.168.0.200/24. Таким образом эта машина ставится вразрез между провайдером и юзерами, будучи прозрачной на L2. Есть желание любые запросы пользоватлей tcp 80, тобишь http форвардить на апач, который запущен на этой машине, чтобы апач показывал страничку. Остальное - детали.

Фря 9.1, ядро пересобрано стакими опциями:

Код: Выделить всё

options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=100
options         IPFIREWALL_FORWARD
options         DUMMYNET
options         IPFIREWALL_NAT
options         LIBALIAS
Правила в ipfw:

Код: Выделить всё

root@freebsd-snort ~ # ipfw show
01000  11486    829474 fwd 192.168.0.200,80 tcp from 192.168.0.210 to any dst-port 80
65534 181478 112169560 allow ip from any to any
65535      7      4122 deny ip from any to any
То есть на 192.168.0.210 при запросе на все адреса должен был бы сходить 192.168.0.200 в апач, а в конфиге апача прописано:

Код: Выделить всё

<VirtualHost *:80>
        ServerName default    
</VirtualHost>
Отвечать на любые запросы.

Как видно - в правиле ipfw 1000 счетчики растут, но машинка с адресом 192.168.0.210 при запросе http://ya.ru получает ya.ru, а не дефолтную страничку апача, как хотелось бы. В /var/log/httpd-access.log - пусто.

tcpdump я вижу следущее:

Код: Выделить всё

root@freebsd-snort ~ # tcpdump -n -i bridge0 host 192.168.0.210
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on bridge0, link-type EN10MB (Ethernet), capture size 65535 bytes
07:45:21.703917 IP 192.168.0.210.49385 > 87.250.251.3.80: Flags [S], seq 4071647755, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
07:45:21.707319 IP 87.250.251.3.80 > 192.168.0.210.49385: Flags [S.], seq 1577453469, ack 4071647756, win 14100, options [mss 1410,nop,nop,sackOK,nop,wscale 9], length 0
07:45:21.707962 IP 192.168.0.210.49385 > 87.250.251.3.80: Flags [.], ack 1, win 16567, length 0
07:45:21.708725 IP 192.168.0.210.49385 > 87.250.251.3.80: Flags [P.], seq 1:529, ack 1, win 16567, length 528
То есть ipfw не заворачивает трафик. Почему?

P.S. стоит сказать, что все вышеописанное я как-то в тестовом виде проделал ночью на работе, убедился что все просто и на этом успокоился. Спустя время, как понадобилось это в боевом виде - не могу поворить никак. Тут правда я не могу сказать, что все делаю так, как сделал в прошлый раз, да и фря была 8.2, а здесь 9.1. Но вроде это не влияет. Зато теперь все свои действия всегда буду записывать.

Re: ipfw, fwd и bridge

Добавлено: 2013-01-12 15:04:24
fessoga5
Недавно думал на эту тему. В голове возникает вопрос как пакет на ya.ru вернется назад, ведь отвечать за место ya.ru. будет ваш хост, а ос клиента ждет ответ от ya.ru, а не от вашего хоста.

Re: ipfw, fwd и bridge

Добавлено: 2013-01-12 15:31:02
xscrew
fessoga5 писал(а):Недавно думал на эту тему. В голове возникает вопрос как пакет на ya.ru вернется назад, ведь отвечать за место ya.ru. будет ваш хост, а ос клиента ждет ответ от ya.ru, а не от вашего хоста.
Тоже это смущает, но, повторюсь - как-то сработало у меня это. И вот http://www.lissyara.su/articles/freebsd ... s/hotspot/ тут реализовано.
Во-вторых пакет даже видимо до апача не доходит, т.к. в логах тишина.

Re: ipfw, fwd и bridge

Добавлено: 2013-01-12 15:43:23
harmless

Код: Выделить всё

net.link.bridge.ipfw: 0
Поставь в 1 и будет тебе счастье.

Re: ipfw, fwd и bridge

Добавлено: 2013-01-12 16:07:39
xscrew
harmless писал(а):

Код: Выделить всё

net.link.bridge.ipfw: 0
Поставь в 1 и будет тебе счастье.

Код: Выделить всё

net.link.bridge.ipfw         Set to 1 to enable layer2 filtering
из мана. это разве то?

В любом случае, ставлю в 1 - счасться не случается

Re: ipfw, fwd и bridge

Добавлено: 2013-01-12 18:26:45
xscrew
Думаю мне пришло понимание.

При наличия моста - пакет коммутируется на L2 и на L3, где есть правило ipfw fwd просто не поднимается (хотя счетчик увеличивается). С мостом есть только один вариант - фильтрация на L2, как раз параметр net.link.bridge.ipfw, но на L2 ipfw не умеет forward. А мне нужен forward. Может есть какие-нибудь другие варианты, при условии моста?

Re: ipfw, fwd и bridge

Добавлено: 2013-02-08 10:44:50
harmless
Судя из мана

Код: Выделить всё

                  ^    to upper layers    V
                  |                       |
                  +----------->-----------+
                  ^                       V
            [ip(6)_input]           [ip(6)_output]     net.inet(6).ip(6).fw.enable=1
                  |                       |
                  ^                       V
            [ether_demux]        [ether_output_frame]  net.link.ether.ipfw=1
                  |                       |
                  +-->--[bdg_forward]-->--+            net.link.bridge.ipfw=1
                  ^                       V
                  |      to devices       |
есть еще один уровень где работает ipfw

Код: Выделить всё

net.link.ether.ipfw: 0
Но для вас это не спасение(
Вот только что он там делает пока не знаю, буду искать(самому интересно)

ipfw, fwd и bridge

Добавлено: 2016-03-18 13:27:19
k0ma
У меня подобная проблема, есть 2 сервера Freebsd 10.1 и Windows 2008. Необходимо все запросы DNS от одного сервера перекинуть на другой севрер. Допустим 192.168.1.1 - адрес, который видят все пользователи, есть адрес 192.168.10.1 - второй сервер который должен людям отвечать за место 192.168.1.1
По аналогии с "прозрачным squid" я сделал так

Код: Выделить всё

${ipfw} add 10 fwd 192.168.10.1,53 tcp from 192.168.1.1 to any
. Тоесть перенаправлять DNS tcp запросы на адрес 192.168.10.1 принятые на адрес 192.168.1.1. Верно? Подскажите как на самом деле читать данное правило? На разных сайтах по разному трактуется, кому верить? Либо это не так просто сделать, либо делается это все в пределах одного сервера?

ipfw, fwd и bridge

Добавлено: 2016-03-18 13:42:35
harmless
Трактуется это так - все запросы от 192.168.1.1 к любому хосту по протоколу tcp перекинуть на 192.168.10.1 порт 53

ipfw, fwd и bridge

Добавлено: 2016-03-18 16:50:23
LBV
с fwd нельзя правильно перенаправить пакет на другую тачку кроме локальной, т.к. не меняется адрес источника, у ipfw с этим туго, можно поизвращатся с реверс натом или использовать pf, или софт из портов, например

Код: Выделить всё

net/portfwd

ipfw, fwd и bridge

Добавлено: 2016-03-18 17:15:19
k0ma
Реверс нат?
Пример можно? pf не очень хочется, по ряду причин...

ipfw, fwd и bridge

Добавлено: 2016-03-21 13:38:23
LBV