Posted: Tue Apr 06, 2010 19:25 Post subject: 2 выделеных канала и 2 WAN
Что имеем:
Две штуки DIR-320.
на обоих прошивочка: dd-wrt.v24-13491_NEWD_std-nokaid_nohotspot_nostor.bin
Есть 2 офиса, между ними худенькие две выделенки ( не бродкастовые, иначе транк мне в зубы ), а по некоторым путям маршрутов где полноправно режутся мои тэги.
Вобщем имеем на одной стороне 2 независимых ИП (к примеру
Оффис1:
WAN IP1=162.10.1.224 GateWay 162.10.1.254
WAN IP2=10.10.1.12 GateWay 10.10.1.254
LAN1 = 192.168.1.254/24
Оффис2:
WAN IP1=162.19.1.113 GateWay 162.19.1.254
WAN IP2=10.46.1.34 GateWay 10.46.1.254
LAN2=192.168.2.254/24
)
скриптами пользовался из знаменитого топика топика Dual WAN/Triple WAN
http://www.dd-wrt.com/phpBB2/viewtopic.php?t=13869&highlight=triple+wan
Теперь что имеем:
когда оба канала работают - вопросов не возникает.
Выдераем шнурок со второго* WAN-а минут 10 свич в потерях пинга c 192.168.1.254 на 192.168.2.254 ( аока что о рабочих сетях не говорим, интересуют в первую очередь хождения пакетов из одного лана в другой.) потом с грем пополам находит.
Вставляем 2 кабеля - опять все отлично. выдергимаем первый* WAN. И тут потеря на самих роутерах чуть ли не фатальная .
Другими словами резервный канал сам себя не оправдывает, так как вся эта затея строилась для получения основного канала и резервного.
главный роут:
Code:
ip route add default \
proto static \ # proto kernel
scope global \
equalize \ # с ним и без негомне счас выравнивание не шибко интересует
nexthop $(nvram get wan_ipaddr) via $(nvram get wan_ifname) \
weight 1 \ # пока пусть будет поровну вес пакетов
nexthop $(nvram get wan2_ipaddr) via $(nvram get wan2_ifname) \
weight 1
Теперяче, структура ip route ... nexthop ... nexthop является структурой iproute2, она вроде бы как работает. Но если теперь поглядеть на компьютеры в сети то там наблюдается картина что шлюзики раздают роут как по iproute(1)
Другими словами если жмакнуть на такую схему
route
то увидим
0.0.0.0 162.10.1.224 0.0.0.0 UG 0 0 vlan3
то есть следующего хопа нет . (vlan3 имя второго WAN-а).
Иеперь собсно вопрос/пожелание/прошение:
1. Кто подсоветует лучше решение - достаточно ткнуть носом в что рыть.
2. Кто подсоветует прошивочку с поддержкой в ядре iproute2 под DIR-320 ( но так чтоб место для jffs2 осталось ).
3. Любые советы ( даже бесполезные, могут подтолкнуть на мысль ).
Спасибо тем кто откликнется на проблемму.
PS:
второй* WAN сидит на 4 порту.
первый* WAN сидит на 0 порту. ( то есть на положенном месте вана )
С iproute2 можно собрать OpenWRT но там много других заморочек будет и насчет места для jffs я очень сомневаюсь если только немного. _________________ Oleg firmware > DD-WRT > OpenWRT Kamikaze
Линукса машинки под рукой нет и не предвидится в ближайшие несколько месяцев. Если у Вас есть возможность не могли бы вы подсобить в этом не легком деле ??
Самое необходимое:
iproute2
iptables
iptables-extra (тут описание неких -m random --average 50)
jffs2
под DIR-320 (беру прошивы c others/eko/24_TNG/...)
Хм ну если время будет на выходных соберу но не обещаю а pptp и web морда нужны?или как гуру в консоле все будем делать?просто место же не резиновое в прошивке.Да и лучше вобще написать что конкретно надо в составе прошивки. _________________ Oleg firmware > DD-WRT > OpenWRT Kamikaze
Хм ну если время будет на выходных соберу но не обещаю а pptp и web морда нужны?или как гуру в консоле все будем делать?просто место же не резиновое в прошивке.Да и лучше вобще написать что конкретно надо в составе прошивки.
морду вебовскую нафиг, с ssh справлюсь =)
телнет тож можно вырезать к чертям, всякие вайфаи тож нафиг.
а вот PPPoE надо, можно и с PPTPD + PPTP =)
место надо не много... 200-300Кб для скриптов и конфигов с головой думаю хватит.
да еще cron надо.
syslogd - тож надо, а то и не поймешь что чугунка делает....
Last edited by sadim on Thu Apr 08, 2010 15:01; edited 1 time in total
вобщем на том что было, прикинул логику собрал вроде то что надо... криво косо... но все же.
зная когда есть 1-ый канал - default route уходит в него,
когда оба - складывает оба.
собсно когда только второй жив - уходит в него.
теперь на пердмет переключения, стоит тупо по крону
*/1 * * * * root /jffs/scripts/switchroutes.script
сам скрипт кидает в канал 1 пакет по ICMP (ping 0 длины)
и по эффекту чувствует есть канал или его нет.
отсюда и прыжки с бубном.
тоесть на переключение резерва требуется до полторы минуты 1 мин - это кроновский делай и сек 30 работает скрипт....
быстрее ну никак :(
PS: Скрипты кину позже, как приеду с командировки.....
а вот и собсно я . Как я соеденил по двум каналам два оффиса.
значится таки первое:
в Setup->VLANs выбираем соответствие вланам портов,
рисунков пардон нет , (снимаем галочку с vlan0 -> ставим галочку vlan3;vlan2 наверняка висит под вайрлесом и так просто не дается).
Code:
# nvram set vlan0ports="1 2 3 5*"
# nvram set vlan3ports="4 5"
# nvram set vlan3hwname=et0
# nvram commit
теперь мы задали соответствие портам вланов.
Сразу хочу заметить что у vlan3 создается такой же HWAddr как и у vlan0 !!!(я его заменяю чтоб не создать бродкастового шторма при форварде с ван2 на ван0)
посему вот скриптик параметров влана3:
Code:
# cd /jffs
# mkdir scripts
# cd scripts
# touch wan2.script
# chmod 755 wan2.script
################# wan2.script begin ################
#!/bin/sh
if [ "$(nvram get wan2_ipaddr)" != "$WAN2_IPADDR" ]; then
nvram set wan2_ifname=$WAN2_IFNAME
nvram set wan2_ipaddr=$WAN2_IPADDR
nvram set wan2_gateway=$WAN2_GATEWAY
nvram set wan2_netmask=$WAN2_NETMASK
nvram set wan2_broadcast=$WAN2_BROADCAST
nvram set wan2_hwaddr=$WAN2_HWADDR
nvram commit
fi
ifconfig $(nvram get wan2_ifname) $(nvram get wan2_ipaddr) netmask $(nvram get wan2_netmask) broadcast $(nvram get wan2_broadcast) up
ifconfig $(nvram get wan2_ifname) down
ifconfig $(nvram get wan2_ifname) hw ether $(nvram get wan2_hwaddr)
ifconfig $(nvram get wan2_ifname) up
echo "`date` WAN2 is Wake UP" >> /var/log/messages
################## wan2.script end ##############
touch routes.script
chmod 755 routes.script
############# routes.script begin #################
#!/bin/sh
echo "`date` Flushing rules" >> /var/log/messages
ip rule flush
echo "Rebuilding rules and tables" >> /var/log/messages
ip rule add lookup main prio 32766
ip rule add lookup default prio 32767
ip rule add from $(nvram get wan_ipaddr) table 100 prio 100
ip rule add fwmark 0x100 table 100 prio 101
ip rule add from $(nvram get wan2_ipaddr) table 200 prio 200
ip rule add fwmark 0x200 table 200 prio 201
ip route flush table 100
ip route flush table 200
for TABLE in 100 200
do
ip route | grep link | while read ROUTE
do
ip route add table $TABLE to $ROUTE
done
done
ip route add table 100 default via $(nvram get wan_gateway)
ip route add table 200 default via $(nvram get wan2_gateway)
echo "`date` Deleting default route" >> /var/log/messages
ip route delete default
echo "`date` Adding in equalized route" >> /var/log/messages
ip route add default scope global proto static \
nexthop via $(nvram get wan_gateway) dev $(nvram get wan_ifname) \
nexthop via $(nvram get wan2_gateway) dev $(nvram get wan2_ifname)
nvram set routes_status=3
nvram commit
echo "`date` routes.script completed" >> /var/log/messages
## у меня крон запускался но не брал джобы посему гада перепихиваю
echo "`date` Cron ReKicking" >>/var/log/messages
/usr/bin/killall cron
/usr/sbin/cron
if [ "$STATE" = "on" ]; then
if [ "$PROTO" = "both" ]; then
$IPTABLES -A PREROUTING -t nat -p udp -d $(nvram get wan2_ipaddr) --dport $SPORT:$EPORT -j DNAT --to $TO
$IPTABLES -A PREROUTING -t nat -p tcp -d $(nvram get wan2_ipaddr) --dport $SPORT:$EPORT -j DNAT --to $TO
else
$IPTABLES -A PREROUTING -t nat -p $PROTO -d $(nvram get wan2_ipaddr) --dport $SPORT:$EPORT -j DNAT --to $TO
fi
fi
done
$IPTABLES -A PREROUTING -t nat -p icmp -d $(nvram get wan2_ipaddr) -j DNAT --to $(nvram get lan_ipaddr)
if [ $(nvram get remote_management) -eq 1 ]; then
$IPTABLES -A PREROUTING -t nat -p tcp -d $(nvram get wan2_ipaddr) --dport $(nvram get http_wanport) \
-j DNAT --to $(nvram get wan_ipaddr):$(nvram get http_lanport)
fi
if [ $(nvram get dmz_enable) -eq 1 ]; then
DMZ_IP=$(nvram get lan_ipaddr | sed -r 's/[0-9]+$//')$(nvram get dmz_ipaddr)
iptables -A PREROUTING -t nat -d $(nvram get wan2_ipaddr) -j DNAT --to $DMZ_IP
fi
$IPTABLES -t nat -A PREROUTING --dest $(nvram get wan2_ipaddr) -j TRIGGER --trigger-type dnat
$IPTABLES -t filter -I FORWARD -i $(nvram get wan2_ifname) -o $(nvram get lan_ifname) -j TRIGGER --trigger-type in
$IPTABLES -t mangle -N BR0
$IPTABLES -t mangle -F BR0
$IPTABLES -t mangle -A BR0 -j MARK --set-mark 0x300
$IPTABLES -t mangle -A BR0 -j CONNMARK --save-mark
$IPTABLES -t mangle -N ETH1
$IPTABLES -t mangle -F ETH1
$IPTABLES -t mangle -A ETH1 -j MARK --set-mark 0x100
$IPTABLES -t mangle -A ETH1 -j CONNMARK --save-mark
$IPTABLES -t mangle -N ETH2
$IPTABLES -t mangle -F ETH2
$IPTABLES -t mangle -A ETH2 -j MARK --set-mark 0x200
$IPTABLES -t mangle -A ETH2 -j CONNMARK --save-mark
$IPTABLES -t mangle -N RANDOM
$IPTABLES -t mangle -F RANDOM
$IPTABLES -t mangle -A RANDOM -m random --average 50 -j ETH1
$IPTABLES -t mangle -A RANDOM -m random --average 50 -j ETH2