Приветствую всех.

Продолжая настраивать сервер для "сервиса", возникла новая проблема, которую объяснить у меня не получается.
 Видимо я не до конца понимаю механизм работы dummynet...

 Имеется:
2 jail'a с vimage, в каждый из которых помещена первая часть epair интерфейса и по одному IP из одной "честной" сети. Вторые части epair вместе с физическими сетевухами (ext0 и ext1) объединены bridge интерфейсами в основной системе. На ext0 есть дополнительный 3й IP из той же сети, привязанный в основной системе.
    В итоге, всего 3 IP из одной сети (в системе и каждом jail'e).
Через ext0 ходит трафик основной системы и jail1, через ext1 - только трафик jail2.

Это всё работает замечательно. Решил добавить shaper (ipfw, dummynet) в основной системе. В jail'ах ipfw не настраивал. Создал в по 1 трубе для исходящего в интернет трафика на ext0 и ext1, и по 1 трубе исходящего в jail'ы - на epair1 и epair2.

Проблема заключается в том, что как только я направляю трафик в dummynet, он всегда выходит из сетевухи ext0. Специально поставил log на "add queue" правиле, в логах пишется что трафик вылетает с ext1, а я его вижу tcpdump'ом на ext0. Пока работает ipfw с любыми правилами, но без направления в трубу - всё правильно (трафик идёт с интерфейса, соответствующего нужному jail'у), включаю - ответный трафик вылетает из ext0, даже если он идёт из jail'а, который связан бриджом с ext1. one_pass и включал, и выключал. Пробовал направлять в исходящую трубу только внутри jail'a. Сперва подумал, что намудрил с динамическими
 правилами, но переписав статическими, получил тот же результат.

Из конкретики: привожу пример правил ipfw (всю заготовку, чтобы не потерялась логика, или может я где-то ошибся)... Как только включаю правило 20100, физически трафик начинает вылетать из ext0, выключаю - из ext1. Более того, если выключаю one_pass, создаётся какая-то петля, и один раз влетевший в трубу трафик, всё время в ней крутится (запускаю 1 icmp пакет, а он в tcpdump'e с громадной скоростью отображается как вновь и вновь входящим). Включаю one_pass - уже на 20199 правило не попадает, трафик не множится, но по прежнему вылетает с ext0.

Кто-то может разглядеть мою ошибку? Система 9.1-PRERELEASE (недели 2 назад обновлялся)

# ext0: ${iphost}
# bridge0: ext0 + hgold0
# bridge1: ext1 + hguest0
# ${ipgold} and ${ipguest} on the other side of epairs (jgold0, jguest0)

${fw} pipe 200 config bw 256Kbit/s     # Out
${fw} pipe 201 config bw 256Kbit/s     # In
${fw} queue 1200 config pipe 200 weight 25 queue 70 mask dst-ip 0xffffffff gred 0.002/10/30/0.1 # Out ${fw} queue 1201 config pipe 201 weight 25 queue 70 mask src-ip 0xffffffff gred 0.002/10/30/0.1 # In

${fw} add 1000 skipto 10000 in recv ext0
${fw} add 1100 skipto 10100 in recv ext1
${fw} add 1200 skipto 10200 in recv hgold0
${fw} add 1300 skipto 10300 in recv hguest0
${fw} add 1400 skipto 10400 in
${fw} add 1400 skipto 20000 out xmit ext0
${fw} add 1500 skipto 20100 out xmit ext1
${fw} add 1600 skipto 20200 out xmit hgold0
${fw} add 1700 skipto 20300 out xmit hguest0
${fw} add 1800 skipto 20400 out

# Incoming ext0
${fw} add 10000 deny log not dst-ip ${iphost},${ipgold}
${fw} add 10099 pass proto ip
# ----------------

# Incoming ext1
${fw} add 10100 deny log not dst-ip ${ipguest}
${fw} add 10199 pass proto ip
# ----------------

# Incoming hgold0
${fw} add 10200 deny log not src-ip ${ipgold}
${fw} add 10299 pass proto ip
# ----------------

# Incoming hguest0
${fw} add 10300 deny log not src-ip ${ipguest}
${fw} add 10399 pass proto ip
# ----------------

# Incoming other
#${fw} add 10400
${fw} add 10499 pass proto ip
# ----------------

# Outgoing ext0
#${fw} add 20000
${fw} add 20099 pass proto ip
# ----------------

# Outgoing ext1
${fw} add 20100 queue 1200 log src-ip ${ipguest} not dst-ip ${iphost},${ipgold}
${fw} add 20199 pass proto ip
# ----------------

# Outgoing hgold0
#${fw} add 20200
${fw} add 20299 pass proto ip
# ----------------

# Outgoing hguest0
#${fw} add 20300 queue 1201 log not src-ip ${iphost},${ipgold} dst-ip ${ipguest}
${fw} add 20399 pass proto ip
# ----------------

# Outgoing other
#${fw} add 20400
${fw} add 20499 pass proto ip
# ----------------

Ответить