2 выделеных канала и 2 WAN

Post new topic   Reply to topic    DD-WRT Forum Index -> Использование и установка DD-WRT
Author Message
sadim
DD-WRT Novice


Joined: 05 Jul 2006
Posts: 37

PostPosted: Tue Apr 06, 2010 19:25    Post subject: 2 выделеных канала и 2 WAN Reply with quote
Что имеем:
Две штуки 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. И тут потеря на самих роутерах чуть ли не фатальная Sad.
Другими словами резервный канал сам себя не оправдывает, так как вся эта затея строилась для получения основного канала и резервного.
главный роут:
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

то есть следующего хопа нет Sad. (vlan3 имя второго WAN-а).

Иеперь собсно вопрос/пожелание/прошение:
1. Кто подсоветует лучше решение - достаточно ткнуть носом в что рыть.
2. Кто подсоветует прошивочку с поддержкой в ядре iproute2 под DIR-320 ( но так чтоб место для jffs2 осталось Smile ).
3. Любые советы ( даже бесполезные, могут подтолкнуть на мысль ).


Спасибо тем кто откликнется на проблемму.

PS:
второй* WAN сидит на 4 порту.
первый* WAN сидит на 0 порту. ( то есть на положенном месте вана )
Sponsor
stylus
DD-WRT User


Joined: 08 Dec 2008
Posts: 198

PostPosted: Wed Apr 07, 2010 6:04    Post subject: Reply with quote
С iproute2 можно собрать OpenWRT но там много других заморочек будет и насчет места для jffs я очень сомневаюсь Very Happy если только немного.
_________________
Oleg firmware > DD-WRT > OpenWRT Kamikaze
sadim
DD-WRT Novice


Joined: 05 Jul 2006
Posts: 37

PostPosted: Wed Apr 07, 2010 6:34    Post subject: Reply with quote
stylus wrote:
...

Линукса машинки под рукой нет и не предвидится в ближайшие несколько месяцев. Если у Вас есть возможность не могли бы вы подсобить в этом не легком деле ??

Самое необходимое:
iproute2
iptables
iptables-extra (тут описание неких -m random --average 50)
jffs2
под DIR-320 (беру прошивы c others/eko/24_TNG/...)
stylus
DD-WRT User


Joined: 08 Dec 2008
Posts: 198

PostPosted: Wed Apr 07, 2010 10:44    Post subject: Reply with quote
Хм ну если время будет на выходных соберу Smile но не обещаю а pptp и web морда нужны?или как гуру в консоле все будем делать?просто место же не резиновое в прошивке.Да и лучше вобще написать что конкретно надо в составе прошивки.
_________________
Oleg firmware > DD-WRT > OpenWRT Kamikaze
sadim
DD-WRT Novice


Joined: 05 Jul 2006
Posts: 37

PostPosted: Thu Apr 08, 2010 14:51    Post subject: Reply with quote
stylus wrote:
Хм ну если время будет на выходных соберу Smile но не обещаю а 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
sadim
DD-WRT Novice


Joined: 05 Jul 2006
Posts: 37

PostPosted: Thu Apr 08, 2010 14:56    Post subject: Reply with quote
вобщем на том что было, прикинул логику собрал вроде то что надо... криво косо... но все же.

зная когда есть 1-ый канал - default route уходит в него,
когда оба - складывает оба.
собсно когда только второй жив - уходит в него.

теперь на пердмет переключения, стоит тупо по крону
*/1 * * * * root /jffs/scripts/switchroutes.script
сам скрипт кидает в канал 1 пакет по ICMP (ping 0 длины)
и по эффекту чувствует есть канал или его нет.
отсюда и прыжки с бубном.

тоесть на переключение резерва требуется до полторы минуты 1 мин - это кроновский делай и сек 30 работает скрипт....

быстрее ну никак :(

PS: Скрипты кину позже, как приеду с командировки.....
sadim
DD-WRT Novice


Joined: 05 Jul 2006
Posts: 37

PostPosted: Tue Apr 20, 2010 7:33    Post subject: Reply with quote
а вот и собсно я Smile. Как я соеденил по двум каналам два оффиса.
значится таки первое:
в Setup->VLANs выбираем соответствие вланам портов,
рисунков пардон нет Sad, (снимаем галочку с 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

WAN2_IFNAME=vlan3
WAN2_IPADDR=10.1.2.101
WAN2_BROADCAST=10.1.2.255
WAN2_GATEWAY=10.1.2.1
WAN2_NETMASK=255.255.255.0
WAN2_HWADDR=00:91:4C:C0:00:07


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

########## end routes.script ###################

# touch firewall.script
# chmod 755 firewall.script

#########begin firewall.script ##################
#!/bin/sh
insmod ipt_CONNMARK
insmod ipt_mark
echo "`date` Flushing and adding new firewall rules" >> /var/log/messages
IPTABLES="/jffs/sbin/iptables"

for RULE in $(nvram get forward_spec)
do
   FROM=`echo $RULE | cut -d '>' -f 1`
   TO=`echo $RULE | cut -d '>' -f 2`
   STATE=`echo $FROM | cut -d ':' -f 2`
   PROTO=`echo $FROM | cut -d ':' -f 3`
   SPORT=`echo $FROM | cut -d ':' -f 4`
   DEST=`echo $TO | cut -d ':' -f 1`
   DPORT=`echo $TO | cut -d ':' -f 2`

   if [ "$STATE" = "on" ]; then
      if [ "$PROTO" = "both" ]; then
        $IPTABLES -A PREROUTING -t nat -p udp -d $(nvram get wan2_ipaddr) --dport $SPORT -j DNAT --to $DEST:$DPORT
        $IPTABLES -A PREROUTING -t nat -p tcp -d $(nvram get wan2_ipaddr) --dport $SPORT -j DNAT --to $DEST:$DPORT
      else
        $IPTABLES -A PREROUTING -t nat -p $PROTO -d $(nvram get wan2_ipaddr) --dport $SPORT -j DNAT --to $DEST:$DPORT
      fi
   fi
done

for RULE in $(nvram get forward_port)
do
  FROM=`echo $RULE | cut -d '>' -f 1`
  TO=`echo $RULE | cut -d '>' -f 2`
  STATE=`echo $FROM | cut -d ':' -f 2`
  PROTO=`echo $FROM | cut -d ':' -f 3`
  SPORT=`echo $FROM | cut -d ':' -f 4`
  EPORT=`echo $FROM | cut -d ':' -f 5`

  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 -F PREROUTING
$IPTABLES -t mangle -F OUTPUT
$IPTABLES -t nat -F POSTROUTING

$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

$IPTABLES -t nat -N SPOOF_ETH1
$IPTABLES -t nat -F SPOOF_ETH1
$IPTABLES -t nat -A SPOOF_ETH1 -j SNAT --to $(nvram get wan_ipaddr)

$IPTABLES -t nat -N SPOOF_ETH2
$IPTABLES -t nat -F SPOOF_ETH2
$IPTABLES -t nat -A SPOOF_ETH2 -j SNAT --to $(nvram get wan2_ipaddr)

$IPTABLES -t filter -N keep_state
$IPTABLES -t filter -A keep_state -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -t filter -A keep_state -j RETURN

$IPTABLES -t nat -N keep_state
$IPTABLES -t nat -A keep_state -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -t nat -A keep_state -j RETURN

$IPTABLES -t nat -I PREROUTING -j keep_state
$IPTABLES -t nat -I OUTPUT -j keep_state
$IPTABLES -t filter -I INPUT -j keep_state
$IPTABLES -t filter -I FORWARD -s $( nvram get lan_ipaddr | sed -r 's/[0-9]+$/0/' )/24 -j ACCEPT
$IPTABLES -t filter -I FORWARD -d $( nvram get lan_ipaddr | sed -r 's/[0-9]+$/0/' )/24 -j ACCEPT
$IPTABLES -t filter -I FORWARD -j keep_state
$IPTABLES -t filter -I OUTPUT -j keep_state

$IPTABLES -t nat -I POSTROUTING -j keep_state

#$IPTABLES -t nat -A POSTROUTING -o $(nvram get wan_ifname) -j SPOOF_ETH1
#$IPTABLES -t nat -A POSTROUTING -o $(nvram get wan2_ifname) -j SPOOF_ETH2

$IPTABLES -t mangle -A PREROUTING -i br0 -p tcp -m state --state ESTABLISHED -j CONNMARK --restore-mark
$IPTABLES -t mangle -A PREROUTING -i $(nvram get wan_ifname) -j ETH1
$IPTABLES -t mangle -A PREROUTING -i $(nvram get wan2_ifname) -j ETH2
$IPTABLES -t mangle -A PREROUTING -m mark --mark 0x100 -j ACCEPT
$IPTABLES -t mangle -A PREROUTING -m mark --mark 0x200 -j ACCEPT
$IPTABLES -t mangle -A PREROUTING -m mark --mark 0x300 -j ACCEPT


$IPTABLES -t mangle -A PREROUTING -i br0 -m state --state NEW -j RANDOM

$IPTABLES -t mangle -A FORWARD -i $(nvram get wan_ifname) -j ETH1
$IPTABLES -t mangle -A FORWARD -i $(nvram get wan2_ifname) -j ETH2
$IPTABLES -t mangle -A FORWARD -j CONNMARK --restore-mark

# Rate Limit
$IPTABLES -N rate_limit
$IPTABLES -F rate_limit
$IPTABLES -A rate_limit -p tcp --dport 22 -m limit --limit 3/min --limit-burst 3 -j ACCEPT
$IPTABLES -A rate_limit -p udp --dport 1194 -m limit --limit 3/min --limit-burst 3 -j ACCEPT
$IPTABLES -A rate_limit -p ICMP --icmp-type echo-request -m limit --limit 3/sec -j ACCEPT
$IPTABLES -A rate_limit -p ! ICMP -j LOG --log-prefix " Connection dropped!! "
$IPTABLES -A rate_limit -p tcp -j REJECT --reject-with tcp-reset
$IPTABLES -A rate_limit -p udp -j REJECT --reject-with icmp-port-unreachable
$IPTABLES -A rate_limit -j DROP

# Add Limits
$IPTABLES -I INPUT -p ICMP --icmp-type echo-request -j rate_limit
$IPTABLES -I INPUT -p tcp --dport 22 -m state --state NEW -j rate_limit

RP_PATH=/proc/sys/net/ipv4/conf
for IFACE in `ls $RP_PATH`; do
    echo 0 > $RP_PATH/$IFACE/rp_filter
done

echo "`date` firewall.script is now completed" >> /var/log/messages
######## END firewall.script #######################

конец первой части Smile (работа зовет)
Display posts from previous:    Page 1 of 1
Post new topic   Reply to topic    DD-WRT Forum Index -> Использование и установка DD-WRT All times are GMT

Navigation

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You cannot download files in this forum