nixp.ru v3.0

28 мая 2017,
воскресенье,
13:35:03 MSK

DevOps с компанией «Флант»
dub написал 23 декабря 2006 года в 14:10 (714 просмотра) Ведет себя неопределенно; открыл 1 тему в форуме.

FreeBSD 4.11, ipfw, Squid transparent proxy. ipfw настроен динамически. И, в принципе, работает. Но есть проблема: юзеры жалуются на «скорость интернета», то есть доступа по HTTP в основном. При этом канал к провайдеру не загружен, полки не бывает практически никогда.

ipfw.conf:

cmd=’ipfw -q add' # command string

tun=’tun0\′ # Tunelled PPP Interface

pif=’fxp0\′ # Public Interface NIC

lif=’xl0\′ # Local interface NIC

lnet=’192.168.0.0/24\′ # Local Network

fwd=’fwd 127.0.0.1,3128\′ # Transparent proxy forward

stks=’setup keep-state' # Outgoing TCP client connection

# Flush rules

ipfw -q -f flush

# Local traffic

$cmd 1001 pass all from $lnet to any in recv $lif

$cmd 1001 pass all from any to $lnet out xmit $lif

# Match packet to current dynamic rules

$cmd 1002 check-state

# Deny ACK packets that did not match current dynamic rules

$cmd 1003 deny log tcp from any to any established

# HTTP request from me

$cmd 2102 pass tcp from me to any 80 out xmit $tun $stks

# HTTP Transparent Proxy

$cmd 2103 $fwd tcp from $lnet to any 80 out xmit $tun $stks

#### Default denial

$cmd 4000 deny log all from any to any

При этом правило 1003 отбрасывает очень много пакетов на 80 порт и с 80 порта. Направления:

- из локальной сети в мир [local_ip] -> [website_ip]

- от сервера в мир [my_ext_ip] -> [website_ip]

- из мира к серверу [website_ip] -> [my_ext_ip]

Dec 10 15:50:59 gate /kernel: ipfw: 1003 Deny TCP 192.168.0.200:1486 [website_ip]:80 out via tun0

Dec 10 15:50:59 gate /kernel: ipfw: 1003 Deny TCP [website_ip]:80 [my_ext_ip]:4919 in via tun0

Dec 10 15:51:00 gate /kernel: ipfw: 1003 Deny TCP [website_ip]:80 [my_ext_ip]:3561 in via tun0

Dec 10 15:51:00 gate /kernel: ipfw: 1003 Deny TCP 192.168.0.200:1487 [website_ip]:80 out via tun0

Dec 10 15:51:03 gate /kernel: ipfw: 1003 Deny TCP 192.168.0.200:1489 [website_ip]:80 out via tun0

Dec 10 15:51:03 gate /kernel: ipfw: 1003 Deny TCP [my_ext_ip]:3561 [website_ip]:80 out via tun0

Dec 10 15:51:04 gate /kernel: ipfw: 1003 Deny TCP [my_ext_ip]:4919 [website_ip]:80 out via tun0

Dec 10 15:51:05 gate /kernel: ipfw: 1003 Deny TCP 192.168.0.200:1486 [website_ip]:80 out via tun0

Dec 10 15:51:05 gate /kernel: ipfw: 1003 Deny TCP 192.168.0.200:1487 [website_ip]:80 out via tun0

Насколько я понимаю, проблема может быть в том, что правила слишком быстро устаревают. Сначала setup-пакет из лана в мир проходит до правила 2103, форвардится Squid, и создается динамическое правило. Дальше, если Squid не имеет страницы в кэше, он обращается к сайту: setup-пакет от сервера в мир доходит до правила 2102 и создается динамическое правило. Когда же одно из этих правил устаревает, пакеты с флагом ACK (?), соотвествующие установленному TCP-соединению, начинают отбрасываться. И так происходит, пока не будет предпринята попытка утсановления нового соединения, то есть пока не появится новый setup-пакет. На этом мысль обрывается.

Пытался увеличить время жизни правил. На текущий момент ipfw-related переменные sysctl установлены следующим образом.

# sysctl -a | grep net.inet.ip.fw.

net.inet.ip.fw.enable: 1

net.inet.ip.fw.one_pass: 1

net.inet.ip.fw.debug: 1

net.inet.ip.fw.verbose: 1

net.inet.ip.fw.verbose_limit: 1000

net.inet.ip.fw.dyn_buckets: 256

net.inet.ip.fw.curr_dyn_buckets: 256

net.inet.ip.fw.dyn_count: 12

net.inet.ip.fw.dyn_max: 8192

net.inet.ip.fw.static_count: 66

net.inet.ip.fw.dyn_ack_lifetime: 300

net.inet.ip.fw.dyn_syn_lifetime: 20

net.inet.ip.fw.dyn_fin_lifetime: 1

net.inet.ip.fw.dyn_rst_lifetime: 1

net.inet.ip.fw.dyn_udp_lifetime: 10

net.inet.ip.fw.dyn_short_lifetime: 300

net.inet.ip.fw.dyn_grace_time: 10

FreeBSD 4.11 не понимает переменной net.inet.ip.fw.dyn_keepalive.

Какие-нибудь мысли по этому поводу? Заранее спасибо.