Перейти к содержимому

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


Рекомендованные сообщения

  • Ответы 321
  • Created
  • Последний ответ

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

До перехода на линукс все ещё не созрели? Если есть другой комплект железа - разверните все тоже под линуксами и потестируйте. Кто-то вон даже помощь предлагал.

Видите, на каждой странице звучат призывы переходить на linux. И это не холивар или попытки под№"%ть - такова суровая реальность. Допускаю что по всем параметрам системы примерно равны и непринципиа

Оффтоп. Собирался как-то было дело freebsd по изучать, для общего развития, всё руки не доходили. Вы меня убедили что оно того не стОит. Спасибо ребята за топик!

Posted Images

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.
 

Изменено пользователем kvirtu
Ссылка на сообщение
Поделиться на других сайтах


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

 

#!/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

 

Ссылка на сообщение
Поделиться на других сайтах

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

 

 

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

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

убрал

Ссылка на сообщение
Поделиться на других сайтах

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

Ссылка на сообщение
Поделиться на других сайтах

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

 

 

${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 запит не з трастових мереж - блокується.

Ссылка на сообщение
Поделиться на других сайтах

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

0.56

Ссылка на сообщение
Поделиться на других сайтах

 

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

 

 

${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

Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Ссылка на сообщение
Поделиться на других сайтах

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

Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

Изменено пользователем kvirtu
Ссылка на сообщение
Поделиться на других сайтах

 

 

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

 

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

Ссылка на сообщение
Поделиться на других сайтах

 

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

 

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

 

понял,

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

Ссылка на сообщение
Поделиться на других сайтах

 

 

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

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

Ссылка на сообщение
Поделиться на других сайтах

 

ну прикрутил я даминет к ядру 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"

 

 

Изменено пользователем kvirtu
Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.


×
×
  • Создать...