Приветствую всех.
Продолжая настраивать сервер для "сервиса", возникла новая проблема,
которую объяснить у меня не получается.
Видимо я не до конца понимаю механизм работы 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
# ----------------