Для организации канала связи на удаленной точке берем роутер tp-link mr3420. Это роутер хорош тем, что позволяет зарезервировать канал выхода в интернет по 3g модему, подключаемому в USB порт роутера. И даже заводская прошивка позволяет такое делать. Но! - почему-то на заводской прошивке решили что падение канала по WAN порту означает или отключение кабеля от порта или обесточивание устройства, подключенному к порту.
Хвала opensource - существуют альтернативные прошивки для данного роутера. Идем на сайт www.openwrt.org , ищем наше устройство, качаем прошивку, внимательно читаем инструкцию, прошиваем устройство. Далее берем 3g модем (в моем случае это AnyData 500/510 от МТС) и подключаем к роутеру. В принципе он уже готов к работе. Можно зайти по ssh на роутер(читайте инструкцию по прошивке роутера - там все расписано) и в консоли скомандовать :
ifup 3g
и посмотреть состояние маршрутов:
route -n
если соединение по модему установилось, мы увидим, что шлюз по-умолчанию поменялся на точку доступа провайдера 3g связи.
Отлично, теперь чтобы вернуться на основной канал (WAN-интерфейс) необходимо выключить мобильный интерфейс :
ifdown 3g
и вернуть маршрут по-умочанию через WAN интерфейс:
route add -net 0.0.0.0 gw 192.168.0.1 (здесь предполагается, что "основной" провайдер, заходит в порт WAN нашего роутера и предоставляет шлюз с адресом 192.168.0.1)
Для автоматизации всей этой рутины напишем скриптик :
vi /etc/config/test
#!/bin/sh
/bin/ping -w 2 -c 3 -q -I eth0 8.8.8.8 |/bin/grep "100% packet loss"
if [ $? -ne "0" ]; then
echo "WLAN is worked."
/sbin/route -n | grep "3g-3g"
if [ $? -ne "0" ] ; then
echo "Interface 3g is down"
else
#shutdown 3g modem and return default routing
/sbin/ifdown 3g
/sbin/route add -net 0.0.0.0 gw 192.168.0.1
fi
else
echo "WLAN is aborted!"
/sbin/route -n | grep "3g-3g"
if [ $? -ne "0" ] ; then
echo "Interface 3g is down"
/sbin/ifup 3g
else
echo "Interface 3g is up"
fi
fi
сделаем его исполняемым, и посадим в crontab:
crontab -e
*/1 * * * * /etc/config/test > /dev/null
Еще добавим в файлик /etc/rc.local строку маршрута по умолчанию для гугловского сервера( с его помощью мы будем проверять его доступность интернета через WAN интерфейс):
route add -host 8.8.8.8 gw 192.168.0.1
Чтобы можно было управлять роутером из-вне , но при этом не светить открытые порты наружу можно ограничить подключение к роутеру только с конкретного IP , запретив всем остальным. Для этого в файлике /etc/config/firewall необходимо установить в секциях zone интерфейсов wan и 3g :
option input 'DROP'
создать секции rule:
config rule
option name 'Allow-my-pc'
option src 'wan'
option src_ip 'xxx.yyy.zzz.vvv'
option target ACCEPT
config rule
option name 'Allow-my-pc-3g'
option src '3g'
option src_ip 'xxx.yyy.zzz.vvv'
option target ACCEPT
и перезапустить firewall.
!Внимание! Если у вас уже всё работает, и вы вносите правку в правила firewall, настоятельно рекомендуется сохранить работающую конфигурацию, например командой
iptables-save > /etc/iptables-rule
Перед применением измененных правил firewall можно провести пробное тестирование новых правил, с возможностью отката к сохраненной конфигурации:
/etc/init.d/firewall stop; /etc/init.d/firewall start; sleep 300; iptables-restore < /etc/iptables-rule
если в течение 300 секунд новая конфигурация работает как надо, то мы её потом применим , в противномм случае через 300 секунд вернется в работу сохраненная конфигурация - и вам ен нужно будет ехать через дождь/ночь/метель чтобы с консоли вернуть работоспособное состояние :)
Хвала opensource - существуют альтернативные прошивки для данного роутера. Идем на сайт www.openwrt.org , ищем наше устройство, качаем прошивку, внимательно читаем инструкцию, прошиваем устройство. Далее берем 3g модем (в моем случае это AnyData 500/510 от МТС) и подключаем к роутеру. В принципе он уже готов к работе. Можно зайти по ssh на роутер(читайте инструкцию по прошивке роутера - там все расписано) и в консоли скомандовать :
ifup 3g
и посмотреть состояние маршрутов:
route -n
если соединение по модему установилось, мы увидим, что шлюз по-умолчанию поменялся на точку доступа провайдера 3g связи.
Отлично, теперь чтобы вернуться на основной канал (WAN-интерфейс) необходимо выключить мобильный интерфейс :
ifdown 3g
и вернуть маршрут по-умочанию через WAN интерфейс:
route add -net 0.0.0.0 gw 192.168.0.1 (здесь предполагается, что "основной" провайдер, заходит в порт WAN нашего роутера и предоставляет шлюз с адресом 192.168.0.1)
Для автоматизации всей этой рутины напишем скриптик :
vi /etc/config/test
#!/bin/sh
/bin/ping -w 2 -c 3 -q -I eth0 8.8.8.8 |/bin/grep "100% packet loss"
if [ $? -ne "0" ]; then
echo "WLAN is worked."
/sbin/route -n | grep "3g-3g"
if [ $? -ne "0" ] ; then
echo "Interface 3g is down"
else
#shutdown 3g modem and return default routing
/sbin/ifdown 3g
/sbin/route add -net 0.0.0.0 gw 192.168.0.1
fi
else
echo "WLAN is aborted!"
/sbin/route -n | grep "3g-3g"
if [ $? -ne "0" ] ; then
echo "Interface 3g is down"
/sbin/ifup 3g
else
echo "Interface 3g is up"
fi
fi
сделаем его исполняемым, и посадим в crontab:
crontab -e
*/1 * * * * /etc/config/test > /dev/null
Еще добавим в файлик /etc/rc.local строку маршрута по умолчанию для гугловского сервера( с его помощью мы будем проверять его доступность интернета через WAN интерфейс):
route add -host 8.8.8.8 gw 192.168.0.1
Чтобы можно было управлять роутером из-вне , но при этом не светить открытые порты наружу можно ограничить подключение к роутеру только с конкретного IP , запретив всем остальным. Для этого в файлике /etc/config/firewall необходимо установить в секциях zone интерфейсов wan и 3g :
option input 'DROP'
создать секции rule:
config rule
option name 'Allow-my-pc'
option src 'wan'
option src_ip 'xxx.yyy.zzz.vvv'
option target ACCEPT
config rule
option name 'Allow-my-pc-3g'
option src '3g'
option src_ip 'xxx.yyy.zzz.vvv'
option target ACCEPT
и перезапустить firewall.
!Внимание! Если у вас уже всё работает, и вы вносите правку в правила firewall, настоятельно рекомендуется сохранить работающую конфигурацию, например командой
iptables-save > /etc/iptables-rule
Перед применением измененных правил firewall можно провести пробное тестирование новых правил, с возможностью отката к сохраненной конфигурации:
/etc/init.d/firewall stop; /etc/init.d/firewall start; sleep 300; iptables-restore < /etc/iptables-rule
если в течение 300 секунд новая конфигурация работает как надо, то мы её потом применим , в противномм случае через 300 секунд вернется в работу сохраненная конфигурация - и вам ен нужно будет ехать через дождь/ночь/метель чтобы с консоли вернуть работоспособное состояние :)
Комментариев нет:
Отправить комментарий