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

ipfw setfib 2 пров

Добавлено: 2010-02-18 12:55:00
baton4eg
Всем привет, подключил второго провайдера, с настройками ipfw возникли проблемы:
uname -a

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

FreeBSD router 7.2-RELEASE-p6 FreeBSD 7.2-RELEASE-p6 #0: Tue Feb  9 03:07:33 MSK 2010     baton@router:/usr/obj/usr/src/sys/ROUTER  i386
Интерфейсы:

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

em0 - ISP1
ng0 - ISP2
em1 - local network (segment1)
vlan55 -  local network (segment2)
настройки setfib

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

setfib 0 - ISP1
setfib 1 - ISP2
Для нарезки трафика использую ipfw dummynet pipe table
Правила где задействован только ISP1:

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

[root@router.net11.ru] /root/config/> less ipfw.sh 
fw="/sbin/ipfw -q"

${fw} -f flush
${fw} -f pipe flush
${fw} -f queue flush

#Тут секция pipe, пример
${fw} pipe 1024 config bw 4096Kbit/s mask src-ip 0xffffffff
${fw} pipe 1025 config bw 1024Kbit/s mask dst-ip 0xffffffff

${fw} add 10 allow ip from any to me
${fw} add 20 allow ip from me to any
#out segment 1
${fw} add 1110 pass ip from any to any out via em0
${fw} add 1120 pipe tablearg ip from "table(50)" to any in via em1
${fw} add 1130 pass ip from "table(50)" to any in via em1
#out segment 2
${fw} add 1131 pipe tablearg ip from "table(50)" to any in via vlan55
${fw} add 1132 pass ip from "table(50)" to any in via vlan55
#in segment 1
${fw} add 1210 pass ip from any to any in via em0
${fw} add 1220 pipe tablearg ip from any to "table(51)" out via em1
${fw} add 1230 pass ip from any to "table(51)" out via em1
# in segment 2
${fw} add 1231 pipe tablearg ip from any to "table(51)" out via vlan55
${fw} add 1232 pass ip from any to "table(51)" out via vlan55

${fw} add 1500 deny ip from any to any
В результате в таблице 50 и 51 есть юзеры, счётчики тикают:

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

00010  122563    9031346 allow ip from any to me
00020  262404  202261486 allow ip from me to any
01110 7354396 2864558022 allow ip from any to any out via em0
01120 7349165 2883636886 pipe tablearg ip from table(50) to any in via em1
01130       0          0 allow ip from table(50) to any in via em1
01131   40504    2813366 pipe tablearg ip from table(50) to any in via vlan55
01132       0          0 allow ip from table(50) to any in via vlan55
01210 7318628 5035582227 allow ip from any to any in via em0
01220 7279067 4974534392 pipe tablearg ip from any to table(51) out via em1
01230       0          0 allow ip from any to table(51) out via em1
01231   52479   72570186 pipe tablearg ip from any to table(51) out via vlan55
01232       0          0 allow ip from any to table(51) out via vlan55
01500   18408    1202822 deny ip from any to any
65535   82137   43058973 allow ip from any to any
Идём дальше, вносим второго провайдера в конфиг ipfw:

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

fw="/sbin/ipfw -q"
userip="10.1.1.1"

${fw} -f flush
${fw} -f pipe flush
${fw} -f queue flush
$

#Тут секция pipe, пример
${fw} pipe 1024 config bw 4096Kbit/s mask src-ip 0xffffffff
${fw} pipe 1025 config bw 1024Kbit/s mask dst-ip 0xffffffff

${fw} add 1000 skipto 1100 ip from ${userip} to any in recv em1
${fw} add 1001 setfib 0 ip from any to any in recv em1
${fw} add 1002 allow ip from any to any via em1
${fw} add 1100 setfib 1 ip from any to any in recv em1
${fw} add 1101 allow ip from any to any via em1

#OUT segment1
${fw} add 1110 pass ip from any to any out via em0
${fw} add 1120 pipe tablearg ip from "table(50)" to any in via em1
${fw} add 1130 pass ip from "table(50)" to any in via em1
#OUT segment 2
${fw} add 1131 pipe tablearg ip from "table(50)" to any in via vlan55
${fw} add 1132 pass ip from "table(50)" to any in via vlan55
#OUT userip
#${fw} add 1134 pass ip from any to any out via ng0
#${fw} add 1135 pipe tablearg ip from "table(50)" to any in via em1
#${fw} add 1136 pass ip from "table(50)" to any in via em1

#IN segment1
${fw} add 1210 pass ip from any to any in via em0
${fw} add 1220 pipe tablearg ip from any to "table(51)" out via em1
${fw} add 1230 pass ip from any to "table(51)" out via em1
#IN segment2
${fw} add 1231 pipe tablearg ip from any to "table(51)" out via vlan55
${fw} add 1232 pass ip from any to "table(51)" out via vlan55
#OUT userip
${fw} add 1233 pass ip from any to any in via ng0
${fw} add 1234 pipe tablearg ip from any to "table(51)" out via em1
${fw} add 1235 pass ip from any to "table(51)" out via em1

${fw} add 1500 deny ip from any to any
В результате в таблицы ниего не заходит, кроме сегмента 2:

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

00010   1347   103624 allow ip from any to me
00020   2644  2113172 allow ip from me to any
01000      7    10500 skipto 1100 ip from 10.20.254.1 to any in recv em1
01001  69633 30623765 setfib 0 ip from any to any in recv em1
01002 149839 76642829 allow ip from any to any via em1
01100      7    10500 setfib 1 ip from any to any in recv em1
01101      7    10500 allow ip from any to any via em1
01110  69620 30604856 allow ip from any to any out via em0
01120      0        0 pipe tablearg ip from table(50) to any in via em1
01130      0        0 allow ip from table(50) to any in via em1
01131    127    16517 pipe tablearg ip from table(50) to any in via vlan55
01132      0        0 allow ip from table(50) to any in via vlan55
01134      0        0 allow ip from any to any out via ng0
01135      0        0 pipe tablearg ip from table(50) to any in via em1
01136      0        0 allow ip from table(50) to any in via em1
01210  80131 46000893 allow ip from any to any in via em0
01220      0        0 pipe tablearg ip from any to table(51) out via em1
01230      0        0 allow ip from any to table(51) out via em1
01231    129   135150 pipe tablearg ip from any to table(51) out via vlan55
01232      0        0 allow ip from any to table(51) out via vlan55
01233      0        0 allow ip from any to any in via ng0
01234      0        0 pipe tablearg ip from any to table(51) out via em1
01235      0        0 allow ip from any to table(51) out via em1
01500      0        0 deny ip from any to any
65535  87062 45583770 allow ip from any to any
Не могу понять с чем может быть связано что сегмент vlan55 попадает в таблицы, остальные нет

Re: ipfw setfib 2 пров

Добавлено: 2010-02-18 17:23:56
FilosofBeer
Круто. Я тоже с этим мучаюсь уже месяц, настрою, а у меня все зависает. А если работать через таблицу 1 то работает, а если работать через таблицу 2, то сервак зависает намертво, причем всегда через разный промежуток времени.
Ты статью прочитал по примерной настройке ?

Re: ipfw setfib 2 пров

Добавлено: 2010-02-18 17:39:02
baton4eg
Статью читал, у меня ничего не виснет, в рассылке нашёл по этому поводу:
http://www.mail-archive.com/freebsd-que ... 13019.html

Вот не понимаю почему vlan55 в таблицу попадает, а другие нет =(

Re: ipfw setfib 2 пров

Добавлено: 2010-02-18 17:44:55
FilosofBeer
Вот,вот, когда попадать начнут, тогда и начнется.
У меня вторая таблица пуская, то есть никого туда не записываю, все работает, как только записываю хоть одного работать через вторую таблицу, сразу начинает зависать.
:(

Re: ipfw setfib 2 пров

Добавлено: 2010-02-18 17:50:16
baton4eg
я записал в таблицу, но почему то сегмент один, там 15 человек, работали не зависало ничего, а другим 2 канала разделялись на всех, без пайпов, т.к в таблицу не попадают

Re: ipfw setfib 2 пров

Добавлено: 2010-02-19 2:06:35
baton4eg
проблема решeна, позже выложу конфиг ipfw

Re: ipfw setfib 2 пров

Добавлено: 2010-02-19 2:36:43
baton4eg
Ещё раз повторюсь, что имею:
FreeBSD 7.2-p6
em0 - ISP1 (ethernet)
ng0 - ISP2 (pppoe)
em1 - lan (ethernet 10.20.0.0/16)

ядро собрано с поддержкой pf,ROUTETABLES,DUMMYNET
setfib 0 -> ISP1
setfib 1 -> ISP2

Задачи были:
1) Часть пользователей 10.20.0.0/24 (255 юзеров) пускать через ISP2, остальных через ISP1
2) Любителей торрентов кидать на 2-ой канал (делается так же как и 1-ая задача)
3) Балансировка (мог бы сделать, не было AS, были бы проблемы у юзеров, если они ходили каждый раз через разных провов)

Каждого пользователя я загоняю в 2 таблицы (вход/выход)

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

table 50 add 10.20.0.1/32 1
table 51 add 10.20.0.1/32 2
Сами пайпы имеют вид:

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

${fw} pipe 1024 config bw 1024Kbit/s mask src-ip 0xffffffff
${fw} pipe 1025 config bw 1024Kbit/s mask dst-ip 0xffffffff
листинг конфига:

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

fw="/sbin/ipfw -q"
${fw} -f flush
${fw} -f pipe flush
${fw} -f queue flush

# Megabit
${fw} pipe 1 config bw 1024Kbit/s mask src-ip 0xffffffff
${fw} pipe 2 config bw 1024Kbit/s mask dst-ip 0xffffffff
# 2 Megabita
${fw} pipe 3 config bw 2048Kbit/s mask src-ip 0xffffffff
${fw} pipe 4 config bw 2048Kbit/s mask dst-ip 0xffffffff

# ALLOW FROM ALL
${fw} add 10 allow ip from any to me
${fw} add 20 allow ip from me to any

# Obhod shape
${fw} add 23 allow ip from 10.21.0.0/16 to 10.20.254.5/32
${fw} add 24 allow ip from 10.20.254.5/32 to 10.21.0.0/16

# USLOVIE
${fw} add 1000 skipto 1100 all from 10.20.0.0/24 to any in recv em1

# SETFIB 0
#${fw} add 1001 setfib 0 ip from any to any in recv em1
${fw} add 1001 setfib 0 all from 10.20.0.0/16 to any in recv em1
${fw} add 1002 skipto 1200 all from any to any in recv em1

# SKIPTO SETFIB 1
${fw} add 1100 setfib 1 all from 10.20.0.0/24 to any in recv em1
# IN
${fw} add 1101 pass ip from any to any out via ng0
${fw} add 1102 pipe tablearg ip from "table(50)" to any in via em1
${fw} add 1103 pass ip from "table(50)" to any in via em1
# OUT
${fw} add 1104 pass ip from any to any in via ng0
${fw} add 1105 pipe tablearg ip from any to "table(51)" out via em1
${fw} add 1106 pass ip from any to "table(51)" out via em1

# SKIPTO SETFIB 0
# IN
${fw} add 1200 pass ip from any to any out via em0
${fw} add 1201 pipe tablearg ip from "table(50)" to any in via em1
${fw} add 1202 pass ip from "table(50)" to any in via em1
# OUT
${fw} add 1203 pass ip from any to any in via em0
${fw} add 1204 pipe tablearg ip from any to "table(51)" out via em1
${fw} add 1205 pass ip from any to "table(51)" out via em1

# DENY ALL
${fw} add 1500 deny ip from any to any
pf-nat:

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

#!/bin/sh

#External network (Internet)
eif="ng0"
eiff="em0"

#Internal network (LAN)
iif="em1"
itonet="10.20.0.0/24"
itonett="10.20.0.0/16"
me="{" $eif $iif $eiff "}"

#options
#set block-policy return
set limit states 200000 
set limit table-entries 200000
set skip on lo

# scrub
#scrub in all

#######
# NAT #
#######
nat on $eif from {$itonet} -> ($eif)
nat on $eiff from  {$itonett} -> ($eif)

##################
# FIREWALL RULES #
##################
#antispoof quick for $eif
#antispoof quick for $iif
#pass all no state
#ssh bruteforce
table <sshguard> persist
block drop quick on $eif proto tcp from <sshguard> to any port 322


Re: ipfw setfib 2 пров

Добавлено: 2014-05-31 15:23:52
ich
блядво лагерное, а иде названия файлов? вы что совсем страх потеряли, копипастом пользоваться разучились?