Jump to content
Калькуляторы

НАТ + ipfw (Linux)

Коллеги,

повеля на простоту ipfw шейпинга,

у кого-то работает на одном линукс-боксе порт ipfw + нат? нат - обычный, iptables.

 

попробовал совсем в лоб.. 1 пайп и одно правило для заворота траффика.

 

PS

Очень tableargs хочется что бы упростить себе жизнь в простых инсталляциях.

 

Share this post


Link to post
Share on other sites

а какая версия ipfw?

 

я использую версию от 20110124(скачать можно здесь).

установлена на убунте 10.10 для шейпинга(тестового) виртуальных машин и на роутере под управлениєм openwrt(тоже нат чере иптаблы)

скорость режет примерно 95-99% от заданой в пайпе

 

Баг: "me" в правилах не работает

возможно ближе к лету он будет исправлен, а также возможно будет добавлен нат в сам ipfw(инфо от автора)

 

насчет tableargs незнаю - ищо не нужно было использовать

но так как таблици работают то можно предположить что и tableargs должны работать

 

будет время - сделаю тесты - отпишусь

Share this post


Link to post
Share on other sites

было время(ну и нужда) сделать правила ipfw попроще и разборчевей

решил всетаки использовать таблици для всего етого

все ето дело проводил в роутере d`link dir-300 под управлением ос OpenWrt собственной сборки(покачто с hz=100, на неделе буду заливать версию с hz=1000) и ipfw от матры карбоне(ссылка в прежнем посте)

сами правила вынесены в отдельный скрипт который загружается при старте системы. также кроме таблиц использую пайпы и очереди.

 

мой пример использования(примерноє содержимое скрипта):

#!/bin/ash
#Здесь задаю главные переменные(путь в исполняемому файлу, интерфейсы, сети провайдера, юзеров , которые будут ходить чере етот роутер и т.д. и т.п.)
ipfw="/usr/sbin/ipfw -q"

if_wan="входящий интерфейс"
if_loc="локальный интерфейс"

local="моя локальная сеть"

loc_isp1="первая локальная сеть провайдера"
loc_isp2="вторая локальная сеть провайдера"

#Ну и пара-тройка особенных юзеров
router="локальная ип адресса роутера"
user1="ip1"
user2="ip2"

#Чистим все что нам нужно
$ipfw -q flush
$ipfw -q pipe flush
$ipfw -q queue flush
$ipfw -q table all flush

#далее добавляем таблици пайпы и очереди
$ipfw pipe 1 config bw 100Mbit\/s #главный канал на прова

#ну и для юзеров исходящий и входящий
#Общий канал
$ipfw pipe 10 config bw 2Mbit\/s
$ipfw pipe 20 config bw 2Mbit\/s
#для особых
$ipfw pipe 11 config bw 200Kbits\/s
$ipfw pipe 21 config bw 200Kbits\/s

$ipfw pipe 12 config bw 128Kbits\/s
$ipfw pipe 22 config bw 128Kbits\/s

#и очереди
#для локалки прова
$ipfw queue 1 config pipe 1 queue 40 weight 40 mask src-ip 0xffffffff
$ipfw queue 2 config pipe 1 queue 40 weight 40 mask dst-ip 0xffffffff

#и для инету
$ipfw queue 10 config pipe 10 queue 25 weight 50 mask src-ip 0xffffffff
$ipfw queue 20 config pipe 20 queue 25 weight 50 mask dst-ip 0xffffffff

$ipfw queue 11 config pipe 11 queue 20 weight 75
$ipfw queue 21 config pipe 21 queue 20 weight 75

$ipfw queue 12 config pipe 12 queue 15 weight 75
$ipfw queue 22 config pipe 22 queue 15 weight 75

#и таблици
#исходящая
$ipfw table 1 add $router 10
$ipfw table 1 add $local 10
$ipfw table 1 add $user1 11
$ipfw table 1 add $user2 12

#входящая
$ipfw table 2 add $router 20
$ipfw table 2 add $local 20
$ipfw table 2 add $user1 21
$ipfw table 2 add $user2 22

#пров
$ipfw table 3 add $loc_isp1
$ipfw table 3 add $loc_isp2

#разрешаем локальный трафик
$ipfw add allow all from $local to 10.168.1.1 via $if_loc
$ipfw add allow all from 10.168.1.1 to $local via $if_loc

#И 4 главных правила
#доступ к сети прова
$ipfw add queue 1 all from $local to table\(3\) via $if_loc
$ipfw add queue 2 all from table\(3\) to $local via $if_wan

#И доступ к инету
$ipfw add queue tablearg all from table\(1\) to any via $if_loc
$ipfw add queue tablearg all from any to table\(2\) via $if_wan

прошу не пинать за возможную кривость в использовании ipfw

пример рабочий и шейпит около 60Мбит/с(было бы больше, еслиб openwrt позволял)

берите кому надо, допиливайте под себя

если будете использовать на linux то можна много что в загнать в array и потом обрабатывать циклами, а также вычислять обем queue по етой статье.

но ето лиш кому надо, мне итак хорошо.

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
Sign in to follow this