Pull to refresh

Comments 61

Как мне кажется, можно было обойтись и без контроллера. Можно установить переключатель между выводами rx и tx ft232, и проверять его состояние, посылая байты в порт. Если выключатель замкнут, байты будут возвращаться, если разомкнут — нет.
Как раз для таких случаев, чтобы не лепить контроллер, у FT232 есть 5 выводов CBUS, которые можно использовать как порты ввода-вывода. Но для варианта с одним тумблером, конечно проще замыкать rx-tx.
Про дополнительные выводы я знаю, но насколько сложно работать с ними под Linux?
Работа с портом очень проста — он видится как файл.
Элементарно работать. При помощи ioctl.
Я даже больше скажу, Драйверы от FTDI (и Linux и Windows) позволяют программно задавать минимум восьми ножкам микросхемы направление работы и переключать их произвольно.
То же самое умеют делать драйверы от SiLabs с чипами CP210x (под Windows — точно, там даже можно режим с push-pull на open drain менять)
Да, достаточно man tty_ioctl почитать, чтобы понять, как этими ногами управлять. Там и пример проверки состояния DTR есть в конце.
А руки не чесались сделать побрутальнее? Ну как-то так:

image

Мелочь, но для коллектива это бы стало событием и предметом для шуток — а вам профит в виде заработанной репутации. Людям же важно не только то, «чтобы работало», но и немножко шоу.
Типо, сразу шейпить? Тогда уж несколько вентилей, с бирками: «Руководство», «Бухгалтерия», «Склад».
И стрелочные индикаторы трафика от соответствующих отделов
И боссу на стол в виде индикатор, а под ним вентиль. Чтобы сразу можно было «прикрутить» инет особо шустрым.
Ага, и на вентиле «руководство» специальные пломбы…
А для чего внешние pull-up резисторы? Можно же включить на соответствующих ногах встроенные

Светодиоды в идеале лучше было бы зажигать программно — желаемый стейт и так виден по положению тумблера, а какой он на деле — от софта зависит, пинов под это хватает
Ясное дело, что не всегда есть смысл слишком заморачиваться с полной реализацией, но оставить такую возможность в железе было бы в тему, а в прошивке зажечь леды по текущей схеме
А так можно было бы в будущем добавить веселую индикацию типа мигания при каких-то неполадках, во время переключения и тп

Вместо пустого цикла имхо лучше уводить мк в idle — таймеры и прерывания в нем останутся, а потребление меньше и в целом красивее
Душевно. Вопрос — а нельзя ли было просто ключ-переключатель на линии витой пары поставить? Правда в этом варианте нельзя разместить где угодно переключатель
Если Вы о физическом ключе — баловался я как-то с такой штукой в студенчестве. Пришел добрый препод армянского происхождения, указал пальцем на сертификатор и сказал «ПрАвЭрЪ». Вобщем не комильфо. Прям так сразу результат не выдам — больше десяти лет прошло, помню только что удивился очень. Правда переключатель был сделань такой себе медной «гребенкой» которая елозила от одного набора контактов на другой.
А через web-интерфейс почему не сделали?
Веб-интерфейс удобно, но тут главное было чтобы «мозг не включать». А щелкуть тумблером, чего уж проще?
UFO just landed and posted this here
Или же одной FT232 в режиме BitBang
Про V-USB узнал уже когда платы были заказаны. Отличная библиотека, сейчас изучаю.
А что будет с офисным интернетом, если кто-нибудь догадается скрестить ваш переключатель
с двумя такими штуками с двух сторон?
image
Можно было упростить, скрестив с devd.
Следующий этап — setfib, часть клиентов перекидываем в запасной канал.
Ну, и еще корректный шейпер для приоритезации типа и назначения траффика.
Ожидал сложное устройство с тремя разъёмами Ethernet (два входа и «выход) и, по сути, с функциями MultiWAN-роутера. Но тоже вполне зачётно.
а смысл? у автора полноценный маршрутизатор на фряхе. переключать каналы как минимум можно автоматом по cron… единственный плюс в роутерборде — малый размер. К тому же не известно что на этом компе еще крутится
Автоматом нельзя. Ибо критерий переключения, субъективное мнение человека: «Что-то инет подтормаживает». Каналы могут работать стабильно несколько дней, а потом начаться «тормоза».
Для полноценной статистики нужно такое же устройство только не подключенное к роутеру. Главное чтоб лампочка при переключении загоралась и «тормоза» сразу уходят!
Более того, можно пойти дальше и провести в офис третий виртуальный интернет канал с синей лампочкой, на котором вообще «всё всегда летать будет» :)
Полуавтоматический режим — когда инет ломается, он должен сам переключить в то же время можно переключить переключателем. Но для этого надо иметь возможность управлять светодиодами чтобы знать когда сработал автомат.
Ну тогда я вообще ничего не понимаю. Если у него полноценный биэсди почему просто нельзя вставить в него вторую сетевуху завести туда второй канал и балансить/переключать маршруты/отслеживать длину очереди отправки на канале и т.д. И т.п. Зачем этот «понт» с переключателем? Кто за него отвечает? Какова стратегия переключения если админ заболел и один канал отвалился?
А суть в том, что один канал быстрый но лимитированый по трафику, т.е. дорогой. А второй безлимитный, но иногда бывает падает скорость. Балансировать между ними не нужно. Если дешевый не лагает — работаем через него, иначе переключаемся на дорогой. Переключение силами ближайшего сотрудника, которому достаточно просто щелкнуть тумблером. При этом все видят, что сейчас инет по дорогому каналу и лишнего не качать.
А как же SLA?
я про то, что если канал упал и ваш комп-роутер перекинет канал на рабочий самостоятельно — лампочка-то останется прежней…
а судя по описанию, система тут же вернётся на использование дохлого канала из-за положения тумблера.
На сколько понял из статьи, то аплинк переключается только вручную. никакой автоматики
А чем он в данном случае поможет? Тут просто два канала в инет, не факт что вообще с белыми адресами.
Фейковые AS еще никто не отменял! Да и BGP это еще и автоматическое переключение без головной боли.
А какой провайдер пустит к себе ваш BGP?
На моей практике все без исключения провайдеры шли на диалог и всячески помогали в настройке BGP, я еще раз повторяю, BGP фейковый, он ни к чему никого не обязывает!
Здесь же о качестве, а не о падении. Бижипи ни чем не поможет.
А по-моему, забавно и симпатично.
Реализовать то можно многими способами, просто человеку захотелось и «смоглось» именно так.
Хм. У меня расклад похожий с каналами но я поступил по другому. Переключает таки автомат, на основе пингования инетовских серверов. Постоянно пингуется гугль, яндекс, и провайдер почты, с невысокой частотой. Проверяется сколько пакетов вернулось за последние полчаса.
Если оба канала примерно равны — то трафик идет по обоим, но на более слабый канал идет только 20% трафика. Если на одном из них потерь за последние полчаса примерно на 1% больше, то этот канал исключается. Плюс правится dns на внешнем серваке, чтобы люди до нас добирались по другому ip. Плюс почту шлёт, что переключился.
Иногда, когда на обоих каналах проблемы, то автомат может чудить, ибо у него лаг в полчаса. Но в остальном надежность инета стала радикально выше, чем на одном канале. И никаких BGP и AS просто не надо. Такую схему можно хоть для домашнего инета развернуть. Правда роутер — полноценный писюк на линухе — убунте.
Расскажите, пожалуйста, более подробно о реализации переключении?
тупой скрипт на баше.
#!/bin/bash
to="name@gmail.com"
log=/var/log/autoreroute.log
datadir=/tmp/ardd
aa="ya.ru google.com cas.dtln.ru"
host=`hostname`
if [ "$host" == "router1" ]; then
 nhost=0
 ia=( 11.11.11.1 22.22.22.1 )
 gwa=( 11.11.11.2 22.22.22.2 )
else
 if [ "$host" == "router2" ]; then
  nhost=1
  ia=( 11.11.12.1 22.22.23.1 )
  gwa=( 11.11.12.2 22.22.23.2 )
 else
  exit
 fi
fi
mkdir -p $datadir
cd $datadir || exit
rm *_*_*.log
ns=60
n=60
s=100
while true
do
 n=$[$n+1]
 if [ $n -ge $ns ] ; then
  n=0
 fi
 for a in $aa
  do
  for i in ${ia[*]}
  do
   ping -c 6 -i 6 -n -I $i $a > ${n}_${a}_${i}.log &
  done
 done
 for a in $aa
  do
  for i in ${ia[*]}
  do
   wait
  done
 done
 for t in ${!ia[*]}
 do
  i=${ia[$t]}
  v[$t]=`cat *_${i}.log | grep -F " bytes from " | wc -l`
 done
 so=$s
 dif=$[${v[0]}-${v[1]}]
 lim1=15
 lim2=15
 if [ $s -eq 1 ]; then
  lim1=2
 fi
 if [ $s -eq 2 ]; then
  lim2=2
 fi
 if [ $dif -gt -$lim1 -a $dif -lt $lim2 ] ; then
  s=0
 else
  if [ ${v[0]} -lt ${v[1]} ] ; then
   s=1
  else
   s=2
  fi
 fi
 if [ $so -ne $s ] ; then
  dt=`date --rfc-3339=seconds`
  ip route flush table 100
  ip route flush table 150
  ip route flush cache
  if [ $s -eq 0 ] ; then
   ip route add default table 150 nexthop via ${gwa[0]} weight 3 nexthop via ${gwa[1]} weight 1
   dt="$dt Both chanel up ${v[0]} ${v[1]}"
   dnsi=1
  else
   if [ $s -eq 1 ] ; then
    ip route add default via ${gwa[1]} table 100
    conntrack -D -n ${ia[0]} > /dev/null 2>&1
    dt="$dt Provider 2 down ${v[0]} ${v[1]}"
    dnsi=0
   else
    ip route add default via ${gwa[0]} table 100
    conntrack -D -n ${ia[1]} > /dev/null 2>&1
    dt="$dt Provider 1 down ${v[0]} ${v[1]}"
    dnsi=1
   fi
  fi
  echo "$dt" >> $log
  ip route flush cache
  conntrack -D -s 10.0.1.6 > /dev/null 2>&1
  conntrack -D -g 10.0.1.6 > /dev/null 2>&1
  tst=5
  while [ $tst -gt 0 ]; do
   sleep 5
   ssh dnseditor@ns.ourdomen.ru sudo /root/ed-dns.sh $nhost $dnsi >> $log && tst=1
   tst=$[$tst-1]
  done
  tst=5
  while [ $tst -gt 0 ]; do
   sleep 5
   ( echo "To: $to" ; echo Subject: auto-reroute on $host ; echo ; echo "$dt" ) | sendmail -t >> $log 2>&1 && tst=1
   tst=$[$tst-1]
  done
 fi
done


Естественно, кроме него надо прописать двух провайдеров в той части где описываются интерфейсы.
Плюс требуются таблицы правил. Плюс требуется настройка iptables в части nat и mangle, но это статические настройки. Они не меняются в процессе переключения провайдера.
Думал то что мне нужно. Но вчитавшись понял, что мне нужна «обратная» реализация. На основе каких-то «умозаключений», чтобы тумблер сам двигался.
В таком случае зачем «тумблер»? Если «умозаключения» могут переключить канал напрямую на сервере.
Да всё верно, но нужно что бы «железно» переключалось. Грозозащиту хочу.
Тогда управляемое реле — самое то.
получается 8 штук реле? ethernet
Есть реле с двумя группами контактов, так что 4 :)
А можно ссылочку, не встречал
Например вот такое. Но на самом деле их достаточно много разновидностей.
Два реле с двумя группами контактов — редко когда используется все 4 пары кабеля. Но не так всё просто, туда нужны высокочастотные реле, иначе работать нифига не будет из-за огромных потерь на контактах и межконтактных емкостей.
Да, реле грозозащиту не обеспечивают — большинство из них рассчитано на напряжения не более 100 вольт на контактах а высокочастотные и того меньше.
Если нужна грозозащита именно на контактах то расстояние между разомкнутыми контактами должно быть сантиметров 5 и отключенные контакты надо заземлять
Тоесть связка ардуина, датчик грозы+ реле, не сработает?
Если только в качестве реле не ставить контактор от электровоза — он на 25кВ рассчитан. И то, от прямого попадания — не убережет.
Контакты реле прошибёт. нужна защита от грозы — изолирующий трансформатор и супрессоры до трансформатора. И супрессоры от линейного напряжения — с проводов на заземление, иначе и трансформатор прошибёт.
Есть вариант дороже — выполните часть линии оптикой. Медь — конвертер — метр оптики — конвертер — медь.
Да уже кинули телефонный кабель в частный дом.
Хороший и весёлый девайс.
Можно было бы сделать не менее брутальную, но более полезную штуку.
На стороне софтверного раутера настроить source based routing. А железку в виде диммера на распбери или микроконтролере. Который управляет раутером и перебрасывает определенный процент маршрутов с одного канала на другой. Так и балансировка нагрузки происходит, и внешний вид крут.
Я для этого делал простую веб страничку с авторизацией, чтобы определенные люди, которым это разрешено, могли переключаться на нужный канал, когда меня нет на месте и чтобы меня не дергать. Роутер тоже был на базе компа с FreeBSD, делать железный вариант, как-то не пришло в голову :)
Sign up to leave a comment.

Articles