Jump to content
Local
kvirtu

FreeBSD 7.2 - Высокий load averages

Recommended Posts

еееем...

прибити dummynet до 0 ядра?

так он не грузит систему ?

Share this post


Link to post
Share on other sites

ну так, знатна бага

cpuset -l 0 -t `procstat -at | grep dummynet | awk '{print $2}'`

якщо, не помиляюсь - то отакою командою

Share this post


Link to post
Share on other sites

45 минут назад упала система в кору:

помогите расшифровать:

 

Unread portion of the kernel message buffer:


Fatal trap 12: page fault while in kernel mode
cpuid = 1; apic id = 01
fault virtual address   = 0xc
fault code              = supervisor write, page not present
instruction pointer     = 0x20:0xc04a2f14
stack pointer           = 0x28:0xc4f64c04
frame pointer           = 0x28:0xc4f64c40
code segment            = base 0x0, limit 0xfffff, type 0x1b
                        = DPL 0, pres 1, def32 1, gran 1
processor eflags        = interrupt enabled, resume, IOPL = 0
current process         = 13 (swi1: net)
trap number             = 12
panic: page fault
cpuid = 1
Uptime: 2h43m21s
Physical memory: 2004 MB
Dumping 120 MB: 105 89 73 57 41 25 9

Reading symbols from /boot/kernel/acpi.ko...Reading symbols from /boot/kernel/acpi.ko.symbols...done.
done.
Loaded symbols for /boot/kernel/acpi.ko
#0  doadump () at pcpu.h:196
196             __asm __volatile("movl %%fs:0,%0" : "=r" (td));
Ready to go.  Enter 'tr' to connect to the remote target
with /dev/cuad0, 'tr /dev/cuad1' to connect to a different port
or 'trf portno' to connect to the remote target with the firewire
interface.  portno defaults to 5556.

Type 'getsyms' after connection to load kld symbols.

If you're debugging a local system, you can use 'kldsyms' instead
to load the kld symbols.  That's a less obnoxious interface.
 

Edited by kvirtu

Share this post


Link to post
Share on other sites


по ходу у меня кривой фаевол, поправьте плиз:

 

#!/bin/sh

#

fwcmd='/sbin/ipfw -q'

#

${fwcmd} -f flush

${fwcmd} -f queue flush

${fwcmd} -f pipe flush

#

${fwcmd} add 50 fwd 10.128.10.1 tcp from 172.16.30.0/24 to any

#loopback

${fwcmd} add 100 pass all from any to any via lo0

${fwcmd} add 110 deny all from any to 127.0.0.0/8

${fwcmd} add 120 deny ip from 127.0.0.0/8 to any

#

${fwcmd} add 130 check-state

#drop icmp

${fwcmd} add 200 deny icmp from any to any in icmptype 5,9,13,14,15,16,17

#

#Mail Deny

${fwcmd} add 220 deny tcp from 10.128.10.0/24 to any 25

${fwcmd} add 221 deny tcp from 172.16.20.0/24 to any 25

#External interface Netbios BLOCK

${fwcmd} add 300 deny udp from any 135-139 to any via bge0 # netbios низя

${fwcmd} add 305 deny tcp from any 135-139,445 to any via bge0 # netbios низя

${fwcmd} add 310 deny udp from any to any 135-139 via bge0 # netbios низя

${fwcmd} add 315 deny tcp from any to any 135-139,445 via bge0 # netbios

#Internal interface Netbios BLOCK

${fwcmd} add 400 deny udp from any 135-139 to any via bge1 # netbios низя

${fwcmd} add 405 deny tcp from any 135-139,445 to any via bge1 # netbios низя

${fwcmd} add 410 deny udp from any to any 135-139 via bge1 # netbios низя

${fwcmd} add 415 deny tcp from any to any 135-139,445 via bge1

# netbios

#NAT

${fwcmd} nat 1 config ip 193.109.129.18 log same_ports

${fwcmd} add 65030 nat 1 ip from 172.16.20.0/23 to any

${fwcmd} add 65040 nat 1 ip from any to 193.109.129.18

#Real_IP

##${fwcmd} add 65050 allow ip from 194.79.21.190 to any

##${fwcmd} add 65051 allow ip from any to 194.79.21.190

###

# Allow TCP through if setup succeeded

${fwcmd} 65100 add pass tcp from any to any established

# Allow IP fragments to pass through

${fwcmd} 65110 add pass all from any to any frag

# Allow access to our DNS

${fwcmd} 65130 add pass tcp from any to me 53 setup

${fwcmd} 65135 add pass tcp from me to any 53 setup

${fwcmd} 65140 add pass udp from any to me 53

${fwcmd} 65150 add pass udp from me 53 to any

# Allow ports from outside

${fwcmd} 65200 add pass tcp from any to me 53,80,3301 setup

##${fwcmd} 65210 add pass udp from any to me 27015 setup

# Reject&Log all setup of incoming connections from the outside

${fwcmd} 65250 add deny log tcp from any to any in via bge0 setup

# Allow setup of any other TCP connection

${fwcmd} 65300 add pass tcp from any to any setup

# Allow DNS queries out in the world

${fwcmd} 65400 add pass udp from me to any 53 keep-state

#

##${ipfw} add 65535 allow all from any to any

 

Share this post


Link to post
Share on other sites

Не простіше переписати - та зробити закритим його?

 

 

${fwcmd} 65400 add pass udp from me to any 53 keep-state

keep-state не потрібен для udp.

Share this post


Link to post
Share on other sites

Правила шейпера создает скрипт shaper_start.sh , ver 6.07 (abills)

Share this post


Link to post
Share on other sites

Не простіше переписати - та зробити закритим його?

 

 

${fwcmd} 65400 add pass udp from me to any 53 keep-state

keep-state не потрібен для udp.

убрал

Share this post


Link to post
Share on other sites

Итак, перебрав всё железо мы неуклонно приближаемся к реализации шейпера в какой-то (довольно старой, да?) версии абилс-а. Помню как на 4-ке еще при динамическом добавлении убивании пайпов я и многие знакомые получали жесткий вис фряхи.

Share this post


Link to post
Share on other sites

Не простіше переписати - та зробити закритим його?

 

 

${fwcmd} 65400 add pass udp from me to any 53 keep-state

keep-state не потрібен для udp.

Потрібен. У мене саме на такому костилі живуть ntpd сервіси на фрях: allow udp from me to any 123 keep-state. Якщо запит на синхронізацію ініційовано моїм ntpd - відслідковуємо keep-state і пропускаємо відповіді. Якщо це вхідний ntp запит не з трастових мереж - блокується.

Share this post


Link to post
Share on other sites

Итак, перебрав всё железо мы неуклонно приближаемся к реализации шейпера в какой-то (довольно старой, да?) версии абилс-а. Помню как на 4-ке еще при динамическом добавлении убивании пайпов я и многие знакомые получали жесткий вис фряхи.

0.56

Share this post


Link to post
Share on other sites

 

Не простіше переписати - та зробити закритим його?

 

 

${fwcmd} 65400 add pass udp from me to any 53 keep-state

keep-state не потрібен для udp.

Потрібен. У мене саме на такому костилі живуть ntpd сервіси на фрях: allow udp from me to any 123 keep-state. Якщо запит на синхронізацію ініційовано моїм ntpd - відслідковуємо keep-state і пропускаємо відповіді. Якщо це вхідний ntp запит не з трастових мереж - блокується.

 

хм, можливо я помилявся, але в цьому фаерволі можна сміливо видаляти все що є з allow\pass та залишити тільки deny, бо в кінці все одно allow ip from any to any

Share this post


Link to post
Share on other sites

В цьому мені лінь колупатися - на вскидку я б там половину вирізав і дещо місцями поміняв.

Share this post


Link to post
Share on other sites

ну так, знатна бага

cpuset -l 0 -t `procstat -at | grep dummynet | awk '{print $2}'`

якщо, не помиляюсь - то отакою командою

вечером опять начались траблы, попробовал команду, помогало на 5-6 минут.

Нашел на сайте muff.kiev.ua , скриптик:

#!/bin/shAWK=/usr/bin/awkCPUSET=/usr/bin/cpusetGREP=/usr/bin/grepPROCSTAT=/usr/bin/procstatPROCESS=dummynetTID=`$PROCSTAT -at | $GREP $PROCESS |$AWK '"/$PROCESS/" {print $2}'`$CPUSET -l 0 -t $TID

Или совпало но, после его запуска нагрузка ушла

Share this post


Link to post
Share on other sites

Это в буквальном смысле - переложил с больной головы на здоровую :) Надо разбираться почему дамминету крышу срывает.

Share this post


Link to post
Share on other sites

Это в буквальном смысле - переложил с больной головы на здоровую :) Надо разбираться почему дамминету крышу срывает.

подскажи что мониторить ? где копать ?

С меня на пиво :)

Share this post


Link to post
Share on other sites

Не использую дамминет, брасы все железячные. В момент критической загрузки глянь ipfw pipe show для начала. Да и вообще - параметры пайпов из абилсового скрипта изучить не помешает, может в новых версиях где-то чего-то поменяли. Как в самой фри, так и в абилсе.

Share this post


Link to post
Share on other sites

Не использую дамминет, брасы все железячные. В момент критической загрузки глянь ipfw pipe show для начала. Да и вообще - параметры пайпов из абилсового скрипта изучить не помешает, может в новых версиях где-то чего-то поменяли. Как в самой фри, так и в абилсе.

не использую даминет (kernel nat) . Да и дело не в нем. в момент пика нагрузки 1 % даминета

Только что опять  за 16 сек load aver выросла до 6 ! . Ни поллинг, ни отключение шейперов не помогло. Сделал ребут :facepalm:

до этого все работало как часики !

Edited by kvirtu

Share this post


Link to post
Share on other sites

 

 

не использую даминет (kernel nat)

 

Не-не - dummynet это шейпер, nat - совсем другое. И у первого и у второго свои закидоны. У меня что первое, что второе делают cisco. Лет 10 назад настроил и забыл.

Share this post


Link to post
Share on other sites

 

не использую даминет (kernel nat)

 

Не-не - dummynet это шейпер, nat - совсем другое. И у первого и у второго свои закидоны. У меня что первое, что второе делают cisco. Лет 10 назад настроил и забыл.

 

понял,

ну прикрутил я даминет к ядру 0 - не помогло

Share this post


Link to post
Share on other sites

 

 

ну прикрутил я даминет к ядру 0 - не помогло

Т.е. весь ресурс в тот момент именно дамминет отъедал? Не прерывания как раньше? Если дамминет все проще - есть куда рыть. В конце концов - использовать ng car вместо него. Хотя уверен что там что-то криво сетапится. Кинь пример правил для создания пайпов и заворачивания в них траффика.

Share this post


Link to post
Share on other sites

 

ну прикрутил я даминет к ядру 0 - не помогло

Т.е. весь ресурс в тот момент именно дамминет отъедал? Не прерывания как раньше? Если дамминет все проще - есть куда рыть. В конце концов - использовать ng car вместо него. Хотя уверен что там что-то криво сетапится. Кинь пример правил для создания пайпов и заворачивания в них траффика.

 

100.00% swi1: net

 

shaper_start.sh

 

 

 

#!/bin/sh

# Shaper/NAT/Session upper for ABillS

#

# PROVIDE: abills_shaper

# REQUIRE: NETWORKING mysql vlan_up

 

. /etc/rc.subr

 

# Add the following lines to /etc/rc.conf to enable abills_shapper:

#

# abills_shaper_enable="YES" - Enable abills shapper

#

# abills_shaper_if="" - ABillS shapper interface default ng*

#

# abills_nas_id="" - ABillS NAS ID default 1

#

# abills_ip_sessions="" - ABIllS IP SEssions limit

#

# abills_nat="EXTERNAL_IP:INTERNAL_IPS:NAT_IF;..." - Enable abills nat

#

# abills_multi_gateway="GATEWAY_IF_IP:GATEWAY_GATE_IP:GATEWAY_REDIRECT_IPS"

#

# abills_dhcp_shaper="" (bool) : Set to "NO" by default.

# Enable ipoe_shaper

#

# abills_dhcp_shaper_nas_ids="" : Set nas ids for shapper, Default: all nas servers

#

# abills_mikrotik_shaper="" : NAS IDS

#

#IPN Section configuration

#

# abills_ipn_nas_id="" ABillS IPN NAS ids, Enable IPN firewall functions

#

# abills_ipn_if="" IPN Shapper interface

#

# abills_ipn_allow_ip="" IPN Allow unauth ip

#

#Other

#

# abills_squid_redirect="" Redirect traffic to squid

#

# abills_neg_deposit="" Enable neg deposit redirect for VPN connection

#

# abills_neg_deposit_allow="" Neg deposit allow sites

#

# abills_neg_deposit_speed="512" Set default speed for negative deposit

#

# abills_neg_deposit_fwd_ip="127.0.0.1" Neg deposit forward ip

#

 

 

CLASSES_NUMS='2 3'

VERSION=6.07

 

 

name="abills_shaper"

 

if [ x${abills_shaper_enable} = x ]; then

name="abills_nat"

abills_nat_enable=YES;

fi;

 

rcvar=`set_rcvar`

 

: ${abills_shaper_enable="NO"}

: ${abills_shaper_if=""}

: ${abills_nas_id=""}

: ${abills_ip_sessions=""}

 

: ${abills_nat=""}

: ${abills_multi_gateway=""}

 

: ${abills_dhcp_shaper="NO"}

: ${abills_dhcp_shaper_nas_ids=""}

: ${abills_neg_deposit="NO"}

: ${abills_neg_deposit_speed=""}

: ${abills_neg_deposit_fwd_ip="127.0.0.1"}

: ${abills_portal_ip="me"}

: ${abills_mikrotik_shaper=""}

: ${abills_squid_redirect="NO"}

 

: ${abills_ipn_nas_id=""}

: ${abills_ipn_if=""}

: ${abills_ipn_allow_ip=""}

 

 

load_rc_config $name

#run_rc_command "$1"

 

IPFW=/sbin/ipfw

SED=/usr/bin/sed

BILLING_DIR=/usr/abills

 

start_cmd="abills_shaper_start"

stop_cmd="abills_shaper_stop"

restart_cmd="abills_shaper_restart"

 

if [ x${abills_mikrotik_shaper} != x ]; then

${BILLING_DIR}/libexec/billd checkspeed mikrotik NAS_IDS="${abills_mikrotik_shaper}" RECONFIGURE=1

fi;

 

#Negative deposit forward (default: )

FWD_WEB_SERVER_IP=${abills_neg_deposit_fwd_ip}

#Your user portal IP (Default: me)

USER_PORTAL_IP=${abills_portal_ip}

 

#make at ipfw -q flush

if [ w${ACTION} = wtest ]; then

ACTION=start

echo "${IPFW} -q flush" | at +10 minutes

fi;

 

EXTERNAL_INTERFACE=`/sbin/route get default | grep interface: | awk '{ print $2 }'`

 

#Get external interface

if [ x${abills_shaper_if} != x ]; then

INTERNAL_INTERFACE=${abills_shaper_if}

else

INTERNAL_INTERFACE=ng\*

fi;

 

#**********************************************************

#

#**********************************************************

abills_shaper_start() {

ACTION=start

 

abills_shaper

abills_dhcp_shaper

abills_ipn

abills_nat

external_fw_rules

neg_deposit

abills_ip_sessions

squid_redirect

}

 

#**********************************************************

#

#**********************************************************

abills_shaper_stop() {

ACTION=stop

 

abills_shaper

abills_dhcp_shaper

abills_ipn

abills_nat

neg_deposit

abills_ip_sessions

squid_redirect

}

 

#**********************************************************

#

#**********************************************************

abills_shaper_restart() {

abills_shaper_stop

abills_shaper_start

}

 

#**********************************************************

# Abills Shapper

#**********************************************************

abills_shaper() {

if [ x${abills_shaper_enable} = xNO ]; then

return 0;

elif [ x${abills_shaper_enable} = xNAT ]; then

return 0;

fi;

 

echo "ABillS Shapper ${ACTION}"

 

#Octets direction

PKG_DIRECTION=`cat ${BILLING_DIR}/libexec/config.pl | grep octets_direction | ${SED} "s/\\$conf{octets_direction}='\(.*\)'.*/\1/"`

 

if [ w${PKG_DIRECTION} = wuser ] ; then

IN_DIRECTION="in recv ${INTERNAL_INTERFACE}"

OUT_DIRECTION="out xmit ${INTERNAL_INTERFACE}"

else

IN_DIRECTION="out xmit ${EXTERNAL_INTERFACE}"

OUT_DIRECTION="in recv ${EXTERNAL_INTERFACE}"

fi;

 

#Enable NG shapper

if [ w != w`grep '^\$conf{ng_car}=1;' ${BILLING_DIR}/libexec/config.pl` ]; then

NG_SHAPPER=1

fi;

 

#Main users table num

USERS_TABLE_NUM=10

#First Class traffic users

USER_CLASS_TRAFFIC_NUM=10

 

#NG Shaper enable

if [ w${ACTION} = wstart -a w${NG_SHAPPER} != w ]; then

echo -n "ng_car shapper"

#Load kernel modules

kldload ng_ether

kldload ng_car

kldload ng_ipfw

 

for num in ${CLASSES_NUMS}; do

# FW_NUM=`expr `;

echo "Traffic: ${num} "

#Shaped traffic

${IPFW} add ` expr 10000 - ${num} \* 10 ` skipto ` expr 10100 + ${num} \* 10 ` ip from table\(` expr ${USER_CLASS_TRAFFIC_NUM} + ${num} \* 2 - 2 `\) to table\(${num}\) ${IN_DIRECTION}

${IPFW} add ` expr 10000 - ${num} \* 10 + 5 ` skipto ` expr 10100 + ${num} \* 10 + 5 ` ip from table\(${num}\) to table\(` expr ${USER_CLASS_TRAFFIC_NUM} + ${num} \* 2 - 2 + 1 `\) ${OUT_DIRECTION}

 

${IPFW} add ` expr 10100 + ${num} \* 10 ` netgraph tablearg ip from table\(` expr ${USER_CLASS_TRAFFIC_NUM} + ${num} \* 2 - 2 `\) to any ${IN_DIRECTION}

${IPFW} add ` expr 10100 + ${num} \* 10 + 5 ` netgraph tablearg ip from any to table\(` expr ${USER_CLASS_TRAFFIC_NUM} + ${num} \* 2 - 2 + 1 `\) ${OUT_DIRECTION}

 

#Unlim traffic

${IPFW} add ` expr 10200 + ${num} \* 10 ` allow ip from table\(9\) to table\(${num}\) ${IN_DIRECTION}

${IPFW} add ` expr 10200 + ${num} \* 10 + 5 ` allow ip from table\(${num}\) to table\(9\) ${OUT_DIRECTION}

done;

 

echo "Global shaper"

${IPFW} add 10000 netgraph tablearg ip from table\(10\) to any ${IN_DIRECTION}

${IPFW} add 10010 netgraph tablearg ip from any to table\(11\) ${OUT_DIRECTION}

${IPFW} add 10020 allow ip from table\(9\) to any ${IN_DIRECTION}

${IPFW} add 10025 allow ip from any to table\(9\) ${OUT_DIRECTION}

if [ ${INTERNAL_INTERFACE} = w"ng*" ]; then

${IPFW} add 10030 allow ip from any to any via ${INTERNAL_INTERFACE}

fi;

#done

#Stop ng_car shaper

elif [ w${ACTION} = wstop -a w$2 = w ]; then

echo "Stop shapper"

 

for num in ${CLASSES_NUMS}; do

${IPFW} delete ` expr 9100 + ${num} \* 10 + 5 ` ` expr 9100 + ${num} \* 10 ` ` expr 9000 + ${num} \* 10 ` ` expr 10000 - ${num} \* 10 ` ` expr 10100 + ${num} \* 10 ` ` expr 10200 + ${num} \* 10 ` ` expr 9000 + ${num} \* 10 + 5 ` ` expr 10000 - ${num} \* 10 + 5 ` ` expr 10100 + ${num} \* 10 + 5 ` ` expr 10200 + ${num} \* 10 + 5 `

done;

 

${IPFW} delete 9000 9005 10000 10010 10015 08000 08010 09010 10020 10025

else

echo "DUMMYNET shaper"

if [ x${abills_nas_id} = x ]; then

if [ "${abills_ipn_nas_id}" != "" ]; then

abills_nas_id=${abills_ipn_nas_id};

else

abills_nas_id=1;

fi;

fi;

 

${BILLING_DIR}/libexec/billd checkspeed NAS_IDS=${abills_nas_id} RECONFIGURE=1 FW_DIRECTION_OUT="${OUT_DIRECTION}" FW_DIRECTION_IN="${IN_DIRECTION}";

fi;

}

 

 

#**********************************************************

#IPoE Shapper for dhcp connections

#**********************************************************

abills_dhcp_shaper() {

if [ ${abills_dhcp_shaper} = NO ]; then

return 0;

fi;

 

if [ -f ${BILLING_DIR}/libexec/ipoe_shapper.pl ]; then

if [ x${abills_dhcp_shaper_nas_ids} != x ]; then

NAS_IDS="NAS_IDS=${abills_dhcp_shaper_nas_ids}"

fi;

if [ w${ACTION} = wstart ]; then

${BILLING_DIR}/libexec/ipoe_shapper.pl -d ${NAS_IDS}

elif [ w${ACTION} = wstop ]; then

kill `cat ${BILLING_DIR}/var/log/ipoe_shapper.pid`

fi;

else

echo "Can\'t find 'ipoe_shapper.pl' "

fi;

}

 

#**********************************************************

#Ipn Sections

# Enable IPN

#**********************************************************

abills_ipn() {

 

if [ x${abills_ipn_nas_id} = x ]; then

return 0;

fi;

 

if [ w${ACTION} = wstart ]; then

if [ x${abills_ipn_if} != x ]; then

IFACE=" via ${abills_ipn_if}"

fi;

 

#Redirect unauth ips to portal

${IPFW} add 64000 fwd ${FWD_WEB_SERVER_IP},80 tcp from any to any dst-port 80 ${IFACE} in

 

# Разрешить ping к серверу доступа

${IPFW} add 64100 allow icmp from any to me ${IFACE}

${IPFW} add 64101 allow icmp from me to any ${IFACE}

 

if [ x${abills_ipn_allow_ip} != x ]; then

# Доступ к странице авторизации

${IPFW} add 10 allow tcp from any to ${abills_ipn_allow_ip} 9443 ${IFACE}

${IPFW} add 11 allow tcp from ${abills_ipn_allow_ip} 9443 to any ${IFACE}

${IPFW} add 12 allow tcp from any to ${abills_ipn_allow_ip} 80 ${IFACE}

${IPFW} add 13 allow tcp from ${abills_ipn_allow_ip} 80 to any ${IFACE}

 

# Разрешить ДНС запросы к серверу

${IPFW} add 64400 allow udp from any to ${abills_ipn_allow_ip} 53

${IPFW} add 64450 allow udp from ${abills_ipn_allow_ip} 53 to any

fi;

 

echo "Restart active sessions"

/usr/abills/libexec/periodic monthly MODULES=Ipn SRESTART=1 NO_ADM_REPORT=1 NAS_IDS="${abills_ipn_nas_id}" &

# Block unauth ips

#${IPFW} add 65000 deny ip from not table\(10\) to any ${IFACE} in

${IPFW} add 65000 deny ip from any to any ${IFACE} in

elif [ w${ACTION} = wstop ]; then

${IPFW} delete 10 11 12 13 64000 64100 64101 64400 64450 65000

fi;

}

 

#**********************************************************

# Start custom shapper rules

#**********************************************************

external_fw_rules() {

 

if [ ${firewall_type} = "/etc/fw.conf" ]; then

cat ${firewall_type} | while read line

do

RULEADD=`echo ${line} | awk '{print \$1}'`;

NUMBERIPFW=`echo ${line} | awk '{print \$2}'`;

 

if [ w${RULEADD} = wadd ]; then

NOEX=`${IPFW} show ${NUMBERIPFW} 2>/dev/null | wc -l`;

 

if [ ${NOEX} -eq 0 ]; then

${IPFW} ${line};

fi;

fi;

done;

fi;

}

 

#**********************************************************

#NAT Section

# options IPFIREWALL_FORWARD

# options IPFIREWALL_NAT

# options LIBALIAS

#Nat Section

#**********************************************************

abills_nat() {

 

if [ x"${abills_nat}" = x ]; then

return 0;

fi;

 

echo "ABillS NAT ${ACTION}"

abills_ips_nat=`echo ${abills_nat} | sed 's/ //g'`;

abills_ips_nat=`echo ${abills_nat} | sed 's/;/ /g'`;

 

NAT_TABLE=20

NAT_FIRST_RULE=20

NAT_USERS_RULE=21

NAT_REAL_TO_FAKE_TABLE_NUM=33;

 

for IPS_NAT in ${abills_ips_nat}; do

# NAT External IP

NAT_IPS=`echo ${IPS_NAT} | awk -F: '{ print $1 }'`;

# Fake net

FAKE_NET=`echo ${IPS_NAT} | awk -F: '{ print $2 }' | sed 's/,/ /g'`;

#NAT IF

NAT_IF=`echo ${IPS_NAT} | awk -F: '{ print $3 }'`;

 

if [ x"${NAT_IPS}" = x ]; then

IP=`ifconfig \`route -n get default | grep interface | awk '{ print $2 }'\` | grep "inet " | awk '{ print $2 }'`

NAT_IPS=${IP}

fi;

 

echo " NAT ${ACTION}"

 

# nat configuration

for IP in ${NAT_IPS}; do

if [ w${ACTION} = wstart ]; then

${IPFW} nat ${NAT_USERS_RULE} config ip ${IP} log

${IPFW} table ${NAT_REAL_TO_FAKE_TABLE_NUM} add ${IP} ${NAT_USERS_RULE}

 

for f_net in ${FAKE_NET}; do

${IPFW} table ` expr ${NAT_REAL_TO_FAKE_TABLE_NUM} + 1` add ${f_net} ${NAT_USERS_RULE}

done;

elif [ w${ACTION} = wstop ]; then

${IPFW} nat delete ${NAT_USERS_RULE}

fi;

done;

NAT_USERS_RULE=`expr ${NAT_USERS_RULE} + 1`

done;

 

# ISP_GW2=1 For redirect to second way

if [ "${abills_multi_gateway}" != "" ]; then

abills_gateways=`echo ${abills_multi_gateway} | sed 's/ /,/g'`;

abills_gateways=`echo ${abills_gateways} | sed 's/;/ /g'`;

 

for GATEWAY in ${abills_gateways}; do

# NAT External IP

GW2_IF_IP=`echo ${GATEWAY} | awk -F: '{ print $1 }'`;

# Fake net

GW2_IP=`echo ${GATEWAY} | awk -F: '{ print $2 }' | sed 's/,/ /g'`;

#NAT IF

GW2_REDIRECT_IPS=`echo ${GATEWAY} | awk -F: '{ print $3 }'`;

 

NAT_ID=22

#Fake IPS

${IPFW} table ${NAT_REAL_TO_FAKE_TABLE_NUM} add ${GW2_IF_IP} ${NAT_ID}

#NAT configure

${IPFW} nat ${NAT_ID} config ip ${GW2_IF_IP} log

#Redirect to second net IPS

for ip_mask in ${GW2_REDIRECT_IPS} ; do

${IPFW} table ` expr ${NAT_REAL_TO_FAKE_TABLE_NUM} + 1` add ${ip_mask} ${NAT_ID}

done;

 

#Forward traffic 2 second way

${IPFW} add 60015 fwd ${GW2_IP} ip from ${GW2_IF_IP} to any

#${IPFW} add 30 add fwd ${ISP_GW2} ip from ${NAT_IPS} to any

 

echo "Gateway: ${GW2_REDIRECT_IPS} -> ${GW2_IP} added";

done;

fi;

 

# UP NAT

if [ w${ACTION} = wstart ]; then

if [ w${NAT_IF} != w ]; then

NAT_IF="via ${NAT_IF}"

fi;

 

${IPFW} add 60010 nat tablearg ip from table\(` expr ${NAT_REAL_TO_FAKE_TABLE_NUM} + 1 `\) to any $NAT_IF

${IPFW} add 1020 nat tablearg ip from any to table\(${NAT_REAL_TO_FAKE_TABLE_NUM}\) $NAT_IF in

elif [ w${ACTION} = wstop ]; then

${IPFW} table ${NAT_REAL_TO_FAKE_TABLE_NUM} flush

${IPFW} table ` expr ${NAT_REAL_TO_FAKE_TABLE_NUM} + 1 ` flush

${IPFW} delete 60010 20 60015

fi;

 

}

 

 

#**********************************************************

#Neg deposit FWD Section

#**********************************************************

neg_deposit() {

 

if [ "${abills_neg_deposit}" = NO ]; then

return 0;

fi;

 

echo "Negative Deposit Forward Section (for mpd) ${ACTION}"

 

if [ w${DNS_IP} = w ]; then

DNS_IP=`cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }' | head -1`

fi;

 

FWD_RULE=1014;

 

#Forwarding start

if [ x${ACTION} = xstart ]; then

${IPFW} add ${FWD_RULE} fwd ${FWD_WEB_SERVER_IP},80 tcp from table\(32\) to any dst-port 80,443 via ${INTERNAL_INTERFACE}

#If use proxy

#${IPFW} add ${FWD_RULE} fwd ${FWD_WEB_SERVER_IP},3128 tcp from table\(32\) to any dst-port 3128 via ${INTERNAL_INTERFACE}

# if allow usin net on neg deposit

if [ x${abills_neg_deposit_speed} != x ]; then

${IPFW} add 9000 skipto ${FWD_RULE} ip from table\(32\) to any ${IN_DIRECTION}

${IPFW} add 9001 skipto ${FWD_RULE} ip from any to table\(32\) ${OUT_DIRECTION}

 

#${IPFW} add 10020 pipe 1${abills_neg_deposit_speed} ip from any to not table\(10\) ${IN_DIRECTION}

#${IPFW} add 10021 pipe 1${abills_neg_deposit_speed} ip from not table\(10\) to any ${OUT_DIRECTION}

#${IPFW} pipe 1${abills_neg_deposit_speed} config bw ${abills_neg_deposit_speed}Kbit/s mask src-ip 0xfffffffff

 

${IPFW} add `expr ${FWD_RULE} + 30` pipe 1${abills_neg_deposit_speed} ip from any to not table\(10\) ${IN_DIRECTION}

${IPFW} add `expr ${FWD_RULE} + 31` pipe 1${abills_neg_deposit_speed} ip from not table\(10\) to any ${OUT_DIRECTION}

${IPFW} pipe 1${abills_neg_deposit_speed} config bw ${abills_neg_deposit_speed}Kbit/s mask src-ip 0xfffffffff

else

${IPFW} add `expr ${FWD_RULE} + 10` allow ip from table\(32\) to ${DNS_IP} dst-port 53 via ${INTERNAL_INTERFACE}

${IPFW} add `expr ${FWD_RULE} + 20` allow tcp from table\(32\) to ${USER_PORTAL_IP} dst-port 9443 via ${INTERNAL_INTERFACE}

${IPFW} add `expr ${FWD_RULE} + 30` deny ip from table\(32\) to any via ${INTERNAL_INTERFACE}

fi;

elif [ w${ACTION} = wstop ]; then

${IPFW} delete ${FWD_RULE} ` expr ${FWD_RULE} + 10 ` ` expr ${FWD_RULE} + 20 ` ` expr ${FWD_RULE} + 30 `

elif [ w${ACTION} = wshow ]; then

${IPFW} show ${FWD_RULE}

fi;

}

 

#**********************************************************

#Session limit section

#**********************************************************

abills_ip_sessions() {

 

if [ x${abills_ip_sessions} = x ]; then

return 0;

fi;

 

echo "Session limit ${abills_ip_sessions}";

if [ w${ACTION} = wstart ]; then

${IPFW} add 00400 skipto 65010 tcp from table\(34\) to any dst-port 80,443 via ${INTERNAL_INTERFACE}

${IPFW} add 00401 skipto 65010 udp from table\(34\) to any dst-port 53 via ${INTERNAL_INTERFACE}

${IPFW} add 00402 skipto 60010 tcp from table\(34\) to any via ${EXTERNAL_INTERFACE}

${IPFW} add 64001 allow tcp from table\(34\) to any setup via ${INTERNAL_INTERFACE} in limit src-addr ${abills_ip_sessions}

${IPFW} add 64002 allow udp from table\(34\) to any via ${INTERNAL_INTERFACE} in limit src-addr ${abills_ip_sessions}

${IPFW} add 64003 allow icmp from table\(34\) to any via ${INTERNAL_INTERFACE} in limit src-addr ${abills_ip_sessions}

elif [ w${ACTION} = wstop ]; then

${IPFW} delete 00400 00401 00402 64001 64002 64003

fi;

}

 

#**********************************************************

#Squid Redirect

#**********************************************************

squid_redirect() {

 

#FWD Section

if [ ${abills_squid_redirect} = NO ]; then

return 0;

fi;

 

if [ x${SQUID_SERVER_IP} = w ]; then

SQUID_SERVER_IP=127.0.0.1;

fi;

 

SQUID_REDIRET_TABLE=40

FWD_RULE=10040;

 

#Forwarding start

if [ w${ACTION} = wstart ]; then

echo "Squid Forward Section - start";

${IPFW} add ${FWD_RULE} fwd ${SQUID_SERVER_IP},8080 tcp from table\(${SQUID_REDIRET_TABLE}\) to any dst-port 80,443 via ${INTERNAL_INTERFACE}

#If use proxy

#${IPFW} add ${FWD_RULE} fwd ${FWD_WEB_SERVER_IP},3128 tcp from table\(32\) to any dst-port 3128 via ${INTERNAL_INTERFACE}

elif [ x${ACTION} = xstop ]; then

echo "Squid Forward Section - stop:";

${IPFW} delete ${FWD_RULE}

elif [ x${ACTION} = xshow ]; then

echo "Squid Forward Section - status:";

${IPFW} show ${FWD_RULE}

fi;

}

 

 

 

load_rc_config $name

run_rc_command "$1"

 

 

Edited by kvirtu

Share this post


Link to post
Share on other sites

dummynet 0 % , c включенным поллингом - сетевые не грузят, а вот 100.00% swi1: net

Share this post


Link to post
Share on other sites

как только загрузка swi1: net снижается до 20 %, все нормализуется.

Share this post


Link to post
Share on other sites

у меня была похожая ситуация, когда рандомно грузился сервер как по систем, так и по прерываниям - не хватало входящего

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×