Обсуждение статьи тематического каталога: Разделение трафика по разным каналам с помощью IPFW и NAT в связке с MPD (vpn balance ipfw freebsd)Ссылка на текст статьи: http://www.opennet.me/base/net/vpn_balance.txt.html
>/scripts/ipfwua.sh # Данный скрипт добавляет в 1 таблицу список Украинских сетейА можно это скрипт показать?
Можно, но он не совсем правильный, хотя меня и устраивает. Всё дело в том, что на пару секунд таблица полностью очищается и трафик пойдёт через Мировой канал.#!/bin/sh
UA_SRC=ua-list.txt
UA_DST=dst.lstrm $UA_SRC
rm $UA_DST
wget http://noc.ua-ix.net.ua/ua-list.txtfor ip in `cat $UA_SRC | grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" | grep -v / `; do
echo $ip/24 >> $UA_DST
donefor ip in `cat $UA_SRC | grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" | grep / `; do
echo $ip >> $UA_DST
doneipfw table 1 flush
for ip in `cat $UA_DST`; do
ipfw table 1 add $ip
done
я делаю так:
#!/bin/sh
/usr/local/bin/wget -q -O - http://noc.ix.net.ua/ua-list.txt | \
/usr/bin/sed s%"\.0$"%"\.0/24"%g > /etc/ua-list.txt && \
for SUBNET in `\
/sbin/ipfw table 0 list | /usr/bin/cut -f 1 -d " " | /usr/bin/diff /etc/ua-list.txt - | \
/usr/bin/grep -v [a-z] | /usr/bin/grep ">" | /usr/bin/cut -f 2 -d " " ` ; do
/sbin/ipfw -q table 0 delete $SUBNET
done && \
for SUBNET in `\
/sbin/ipfw table 0 list | /usr/bin/cut -f 1 -d " " | /usr/bin/diff /etc/ua-list.txt - | \
/usr/bin/grep -v [a-z] | /usr/bin/grep "<" | /usr/bin/cut -f 2 -d " "` ; do
/sbin/ipfw -q table 0 add $SUBNET
doneи по крону хоть каждые 10 минут.
Вот варант который работает и очень хорошо
http://uanic.kiev.ua/UA_networks.html
>Вот варант который работает и очень хорошо
>http://uanic.kiev.ua/UA_networks.htmlСсылка не работает :( Обнови пожалуйста.
Selidora:Спасибо за скрипт. Хоть он уменя и не заработал, но дал логику для переделки своего. Его и выкладываю.#!/bin/sh
wget -q -O - http://noc.ix.net.ua/ua-list.txt | sed 's/\.0$/.0\/24/g' > /etc/ua-list.txt
for SUBNET in `ipfw table 0 list | cut -f 1 -d " " | diff /etc/ua-list.txt - | grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" | grep ">" | cut -f 2 -d " " ` ; do
ipfw -q table 0 delete $SUBNET
donefor SUBNET in `ipfw table 0 list | cut -f 1 -d " " | diff /etc/ua-list.txt - | grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" | grep "<" | cut -f 2 -d " " ` ; do
ipfw -q table 0 add $SUBNET
done
У меня парочку вопросов.
Сколько времени занимает выполнение этого скрипта?
Есть задержки в выполнении правил ipfw, потому, как допустим для pf поиск в таблице состоящей из 10 или 10000 записей нет никакой?Я, когда создавал первый раз таблицу из ~700 сетей в ipfw то у меня на это уходило 30-40 секунд, затем уменьшил, оптимизировав скрипт до 3-4 секунд. Но всё равно как-то не нравилось.
Заранее спасибо.
Последний у меня выполняется секунд 5, основное время уходит, на сравнение таблиц
ощутимых задержек замечено небыло, ведь таблица сидит в памяти.