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

ICQ + Kernel NAT + IPFW (отваливается аська)

Добавлено: 2010-11-26 13:57:40
bobbe
Помогите пжлста разобраться с проблемой.
FreeBSD 7.3 R2.
Решил "намутить" Kernel Nat. Намутил :) После чего возникла следующая проблема: периодически отваливается ICQ (конкретно QIP) с интервалом минут в 5. И после нескольких "отваливаний" вообще при подключении ругается что "Превышен лимит подключений".
Инет, почта.. всё вроде бы работает нормально.
До кернел-ната был natd + точно такой же конфиг IPFW (за исклчюениум правил NAT конечно).

Подскажите, как/чем анализировать данную проблему :) Ну или просто решение подскажите :))

конфиг ядра

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

# IPFW
options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=100
options         IPFIREWALL_FORWARD
# PIPE
options         DUMMYNET
# NAT
options         IPFIREWALL_NAT
options         LIBALIAS
rc.conf

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

hostname="oldman.domain.local"
defaultrouter="xxx.xxx.x.xxx"
ifconfig_fxp0="inet aaa.aaa.a.aaa  netmask 255.255.255.240"
ifconfig_fxp1="inet 10.80.16.5 netmask 255.255.255.0"
gateway_enable="YES"
firewall_enable="YES"
firewall_script="/etc/rc.ipfw"
firewall_nat_enable="YES"
firewall_nat_interface="fxp0"
конфиг IPFW

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

ipfw -q -f flush

cmd="ipfw -q add"
skip="skipto 400"
ks="keep-state"

oif="fxp0"
oip="aaa.aaa.a.aaa"
iif="fxp1"
inet="10.80.16.0/24"
iip="10.80.16.5"

#####   RULES

	$cmd 010 allow all from any to any via $iif	

	$cmd 020 allow all from any to any via lo0	
	$cmd 030 deny ip from any to 127.0.0.0/8	
	$cmd 040 deny ip from 127.0.0.0/8 to any

#NAT in
	ipfw -q nat 1 config if $oif
	$cmd 060 nat 1 ip from any to any in via $oif

	$cmd 070 check-state

##### Outgoing #####
	
	$cmd 100 $skip icmp from any to any $ks
	
	$cmd 105 $skip udp from any to any 123 out via $oif $ks
	
	$cmd 110 $skip udp from any to any 53 out via $oif $ks
	$cmd 111 $skip tcp from any to any 53 out via $oif setup $ks

	$cmd 160 $skip all from $inet to any 25 out via $oif setup $ks		
	$cmd 170 $skip all from $inet to any 110 out via $oif setup $ks		
	$cmd 171 $skip tcp from $inet to any 5190 out via $oif setup $ks	
	$cmd 172 $skip tcp from $inet to any 443 via $oif setup $ks		
	$cmd 173 $skip tcp from $inet to any 9010 out via $oif setup $ks	
	$cmd 174 $skip tcp from $inet to any 21 out via $oif setup $ks		
	$cmd 175 $skip tcp from $inet to any 80 out via $oif setup $ks			
	
   #### FPSU/Klient-bank ####
	$cmd $skip udp from 10.80.16.25 1024-65535 to 194.186.207.189 out xmit $oif $ks
	
	$cmd 190 $skip all from $oip to any out via $oif setup $ks

	$cmd 360 allow all from any to any established	
	
##### Final #####

	$cmd 399 deny log logamount 1000 all from any to any	
	
### NAT	
	$cmd 400 nat 1 ip from any to any out via $oif		
	
	$cmd 410 allow all from any to any			
	$cmd 999 deny log all from any to any

Re: ICQ + Kernel NAT + IPFW (отваливается аська)

Добавлено: 2010-11-26 14:31:24
hizel

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

ipfw disable one_pass

Re: ICQ + Kernel NAT + IPFW (отваливается аська)

Добавлено: 2010-11-26 15:41:44
bobbe
"Заработало!" :) Спасибо!
Но почему с natd в этом "one_pass" не было необходимости?
Объясните пжлста! Ну или подскажите где почичать об этом "one_pass". Чтоб абсолютно вкурить :)

Re: ICQ + Kernel NAT + IPFW (отваливается аська)

Добавлено: 2010-11-26 15:55:21
hizel

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

man ipfw
и медитация на тему прохождения пакетов по ipfw поможет ;-)

цимес в этом набросе:
To let the packet continue after being (de)aliased, set the sysctl variable net.inet.ip.fw.one_pass to 0.
one_pass и net.inet.ip.fw.one_pass одно и тоже

Re: ICQ + Kernel NAT + IPFW (отваливается аська)

Добавлено: 2010-12-09 15:35:55
bobbe
hizel, подскажите еще пжлста по такому вопросу:

Вот вообщем теже правила, всё то же..

У машины 10.80.16.25 есть возможность подключения к 194.186.207.189.
Так же необходимо дать возможность этой машине подключаться "to any 8585 out via $oif" , грубо говоря.
если я добавляю после

#### FPSU/Klient-bank ####
$cmd $skip udp from 10.80.16.25 1024-65535 to 194.186.207.189 out xmit $oif $ks

$cmd $skip tcp from 10.80.16.25 1024-65535 to any 8585 out xmit $oif setup $ks

, то в логах наблюдаю примерно следующее:

...Deny TCP 10.80.16.25:4331 91.213.144.132:8585 out via fxp0

Почему такое происходит? Ведь разрешил же ж...

Re: ICQ + Kernel NAT + IPFW (отваливается аська)

Добавлено: 2010-12-09 15:44:41
bobbe
Если добавляю это правило перед правилом ###FPSU/Klient-bank###, то оно работает, но перестает работать правило ##FPSU/Klient-bank##...

Re: ICQ + Kernel NAT + IPFW (отваливается аська)

Добавлено: 2010-12-09 15:51:46
hizel
лучше везде ставить номер правила и смотреть ipfw show и ipfw -d show

Re: ICQ + Kernel NAT + IPFW (отваливается аська)

Добавлено: 2010-12-09 16:08:22
bobbe
Ну то есть мне сюда выложить ipfw -d show?

Re: ICQ + Kernel NAT + IPFW (отваливается аська)

Добавлено: 2010-12-09 17:40:55
hizel
ну не обязательно, можно и самому проанализировать

Re: ICQ + Kernel NAT + IPFW (отваливается аська)

Добавлено: 2010-12-13 15:14:29
bobbe
Спасибо еще раз за помощь.
Вот может быть кому-то пригодится:
http://house.hcn-strela.ru/BSDCert/BSDA-course/ape.html
Ман по IPFW и не только. На доступном языке.