15 апреля 2010 г.

Два входящих канала DIR-320 (dd-wrt)



Имеем 2 канала в интернет:
WAN1: статический ip 10.1.1.7 netmask: 255.255.255.240 gw: 10.1.1.1;
WAN2: cтатический ip 192.168.137.14 netmask: 255.255.255.0 gw: 192.168.137.1.
Беспроводной маршрутизатор D-Link DIR-320, флешка на 1Gb.

Необходимо огранизовать отказоустойчивую систему.

Скачиваем последнюю версию прошивки DD-WRT для DIR-320 с поддержкой USB. Для меня это была dd-wrt.v24_usb_generic.bin;
Прошиваем роутер, согласно инструкциям;
Разбиваем флешку на 3 раздела (ext3, ext3, swap);
Подключаем флешку к маршрутизатору;Включаем поддержку JFFS2 (вкладка Тех. Обслуживание->Управление) и поддержку USB (вкладка Службы->USB). Все пункты, кроме поддержки USB 1.1 (UHCI) и поддержки USB 2.0, а также автомонтирования;
Заходим с помощью telnet или ssh на роутер и вводим:
dmesg
Ищем строки
/dev/scsi/host0/bus0/target0/lun0: p1 p2 p3
Через вебинтерфейс идём в Тех. Обслуживание->Команды и прописываем:
mount -o noatime /dev/scsi/host0/bus0/target0/lun0/part1 /jffs
mount -o noatime /dev/scsi/host0/bus0/target0/lun0/part2 /mnt
/opt/bin/busybox swapon /dev/scsi/host0/bus0/target0/lun0/part3
mount -o bind /jffs/opt /opt
Сохраняем в автозагрузку.
Перезагружаемся.

Заходим с помощью telnet или ssh на роутер и вводим:
mkdir /jffs/opt
mount -o bind /jffs/opt /opt
Даём команду скачивания скрипта роутеру через telnet:
wget http://www.3iii.dk/linux/optware/optware-install-ddwrt.sh -O - | tr -d "\r" > /tmp/optware-install.sh
Запускаем скаченый скрипт командой:
sh /tmp/optware-install.sh
Изменяем пути по умолчанию командами:
export PATH=/opt/bin:/opt/sbin:$PATH
unset LD_LIBRARY_PATH
Создаем папки для скриптов:
mkdir /jffs/etc
mkdir /jffs/etc/config
Cоздаем 4 скрипта:
wan2up.startup.sh
#!/bin/sh
WAN2_IFNAME=vlan2
WAN2_IPADDR=192.168.137.14
WAN2_GATEWAY=192.168.137.1
WAN2_NETMASK=255.255.255.0
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 commit
fi
ifconfig $(nvram get wan2_ifname) up $(nvram get wan2_ipaddr) netmask $(nvram get wan2_netmask)
# We will want to set masquerade on WAN2, otherwise after changing active WAN, we'll remain up in the air.
iptables -t nat -A POSTROUTING -o vlan2 -j MASQUERADE
failover.startup.sh
#!/bin/sh
INTERVAL=10
PACKETS=1
USINGWAN=0
WAN1=vlan1
WAN2=vlan2
WAN1GW=`nvram get wan_gateway`
WAN2GW=`nvram get wan2_gateway`

# We'll run this in the intervals given above
while sleep $INTERVAL
do
# Try to figure out the current route
TARGET=`ip route | awk '/default via/ {print $3}'`
# Set the variable, so let the script now which connection is it dealing with
if [ "$WAN1GW" = "$TARGET" ]; then
USINGWAN=1;
else if [ "$WAN2GW" = "$TARGET" ]; then
USINGWAN=2;
fi;
fi
# We'll ping as many times the $PACKETS variable tells, and test if we have connection:
RET=`ping -c $PACKETS $TARGET 2>/dev/null | awk '/packets received/ {print $4}'`
# If we don't have connection, change the active WAN port (If there is any loss with multiple packets, it should change either)
if [ "$RET" -ne "$PACKETS" ]; then
if [ "$USINGWAN" = "1" ]; then
/jffs/etc/config/wan2.up.sh
USINGWAN=2
echo "Changed active WAN port to 2!"
else
/jffs/etc/config/wan1.up.sh
USINGWAN=1
echo "Changed active WAN port to 1!"
fi
fi
done;
wan1.up.sh
#!/bin/sh
# WAN1

DEV=vlan1
GATEWAY=`nvram get wan_gateway`
DNS1=193.226.43.33
DNS2=193.230.175.1

nvram set wan_dns="$DNS1 $DNS2"
ip route delete default
#ip route delete default
ip route add default via $GATEWAY dev $DEV
echo "nameserver $DNS1" >/tmp/resolv.dnsmasq
echo "nameserver $DNS2" >>/tmp/resolv.dnsmasq
pr="$(ps|awk '/dnsmasq/ {print $1}')"
kill -9 $pr
dnsmasq --conf-file=/tmp/dnsmasq.conf
wan2.up.sh
#!/bin/sh
# WAN2

DEV=vlan2
GATEWAY=`nvram get wan2_gateway`
DNS1=193.226.43.33
DNS2=193.230.175.1

nvram set wan_dns="$DNS1 $DNS2"
ip route delete default
#ip route delete default
ip route add default via $GATEWAY dev $DEV
echo "nameserver $DNS1" >/tmp/resolv.dnsmasq
echo "nameserver $DNS2" >>/tmp/resolv.dnsmasq
pr="$(ps|awk '/dnsmasq/ {print $1}')"
kill -9 $pr
dnsmasq --conf-file=/tmp/dnsmasq.conf
Перемещаем их в только что созданную папку /jffs/etc/config и делаем исполняемыми:
chmod +x /jffs/etc/config/*
Снова идём в Тех. Обслуживание->Команды и дописываем в автозагрузку:
/jffs/etc/config/wan2up.startup.sh
/jffs/etc/config/failover.startup.sh
А также прописываем в скрипты на выключение:
umount /mnt &
umount /opt &
umount /jffs &
sleep 2
С помощью веб-интерфейса, идём в Настройки - Виртуальные сети и создаем vlan2 на основе 4 порта:

Применяем настройки и перезагружаемся.

UPD: Комплект файлов для второго WAN - DHCP.

12 комментариев:

  1. А если на втором влане нет статики? а адрес выдает dhcp?

    ОтветитьУдалить
  2. тут можно подсмотреть скрипт для dhcp http://roadrunnerguide.com/dualwan.html

    ОтветитьУдалить
  3. а можно ли как то сделать подобное на wrt320n без флешки?

    ОтветитьУдалить
  4. можно сделать похожее http://www.dd-wrt.com/wiki/index.php/Dual-WAN_for_simple_round-robin_load_equalization

    ОтветитьУдалить
  5. По ссылке http://roadrunnerguide.com/dualwan.html сайт не доступен

    ОтветитьУдалить
  6. Добавил необходимые файлы, качайте по ссылке http://files.mail.ru/XYU75C

    ОтветитьУдалить
  7. Hitman help me!!!
    Прошил DIR320 прошивкой DD-WRT v24-sp2 (10/10/09) mini-usb-ftp подцепил внешний HDD через USB инициализировал ftp server.
    Есть необходимость сделать доступ из инета на созданый ftp сервер.
    Подключение к провайдеру идет с привязкой по MAC
    и провайдер выдает 2 статические IP
    1) 10.1.8.20 mask 255.255.240.0 gate 10.1.0.5
    2) 91.203.6.237 mask 255.255.255.192 gate 91.203.6.193
    Как возможно назначить на один WAN порт два IP адреса маски и шлюзы?
    Из телнете задал команду на роутере Code:
    ifconfig vlan1:0 91.203.6.237 netmask 255.255.255.192


    выполнилась отлично.
    ping на 91.203.6.237 из локальной сети проходит нормально из инета пинг не проходит.

    ОтветитьУдалить
  8. какие еще настройки выдал провайдер? в том виде который представлен тут тяжело представить полную картину.

    настраивай по умолчанию маршрутизатор исходя из
    91.203.6.237 mask 255.255.255.192 gate 91.203.6.193, т.к. именно данные адреса являются реальными.

    ОтветитьУдалить
  9. Данные от провайдера два статических адреса 1) 10.1.8.20 mask 255.255.240.0 gate 10.1.0.5
    2) 91.203.6.237 mask 255.255.255.192 gate 91.203.6.193
    DNS 10.1.0.2;10.1.0.4

    моя домашняя локалка 10.0.0.0 mask 255.255.255.0

    ОтветитьУдалить
  10. Есть dir-320 , 2 провайдера со статическим ip(без инета) , и 1 ppoe подключение(инет) , как свести всё это в всою локалку и раздачу по wi-fi.

    ОтветитьУдалить
  11. На опенврт всё двумя телодвижениями делается
    Не майтесь ерундой

    ОтветитьУдалить