Программы и
компьютеры

Сетевые технологии
   Полезные советы  |   |  Наверх  

Полезные советы:

  1. Подключение локальной сети к нескольким провайдерам - альтернативный метод
2. "Условный" PING
3. Шлюз для Гигабитного внешнего канала
Наверх


1. Подключение локальной сети к нескольким провайдерам - альтернативный метод

  Как известно, существуют стандартные решения для подключения двух провайдеров к локальной сети с использованием, например, специальных маршрутизаторов с двумя портами WAN. При отказе канала, который обеспечивает в данный момент доступ в Интернет, вся локальная сеть за маршрутизатором автоматически переключается на канал альтернативного провайдера и весь трафик направляется через него. "Почему и когда" надо переключаться, обычно решает сам маршрутизатор, но, конечно, с пользовательскими настройками. Чаще всего, для определения работоспособности канала используется периодический ping какого-нибудь высоконадёжного сетевого ресурса, например, Google 8.8.8.8. При продолжительном отсутствии ответов считается, что проверяемый канал стал неработоспособным и надо переключаться на альтернативный. По такому же принципу обычно работают и шлюзы в Интернет, реализованные на компьютерах, у которых два сетевых интерфейса подключены к разным провайдерам, а третий к локальной сети. И в том, и в другом случаях, после смены канала сетевые настройки других компьютеров в локальной сети остаются неизменными так как IP адреса шлюза, кэширующего DNS и сервера DHCP в локальной сети не изменяются.

Однако, у такой схемы имеется серьёзный недостаток: несмотря на то, что оба канала обычно большую часть времени исправны, весь трафик идёт только через один из них, а альтернативный канал в это время не используется (простаивает). Это связано с тем, что в данной схеме используется только один фиксированный адрес шлюза в Интернет для всей локальной сети.

Если отказаться от идеи единственного фиксированного шлюза и разрешить выбор адреса шлюза на локальных компьютерах, мы получим более гибкую схему, в которой пользователи отдельных компьютеров смогут сами решать через какой канал им удобнее в данный момент выходить в Интернет и "на лету" переключаться с канала одного провайдера на канал другого. Это даст возможность более равномерно распределять нагрузку на каналы и использовать обоих провайдеров одновременно.

Как это сделать?

Для этого нужны 2 независимых устройства, выполняющие роли шлюзов, например:

- 2 обычных роутера с одиночными портами WAN
  или
- 1 роутер и 1 шлюз на виртуальной или физической машине
  или
- 2 шлюза на виртуальных или физических машинах (это решение является, конечно, самым бюджетным)

Каждый из шлюзов будет осуществлять сетевую трансляцию IP адресов (NAT), выданных каждым провайдером, в одну и ту же локальную сеть, например, 192.168.0.0/24 (сеть класса "С", маска 255.255.255.0), но, при этом, сами шлюзы в локальной сети будут иметь разные адреса. Например, шлюз 1-го провайдера - 192.168.0.1, а шлюз 2-го - 192.168.0.100.

Таким образом, если в сетевых настройках любого локального компьютера мы укажем шлюз (Gateway) 192.168.0.1, то этот компьютер будет выходить в Интернет через канал 1-го провайдера, а если 192.168.0.100, то через канал 2-го. Конечно, при этом мы предполагаем, что кабели, соединяющие все сетевые интерферсы в локальной сети, включены в общий коммутатор (switch), которым, в частности, может служить блок интерфейсов LAN одного из роутеров.

По сути это всё, что требуется сделать. За исключением того, что надо обеспечить быстрый и удобный способ установки и переключения IP адресов шлюзов на локальных компьютерах, так как менять их при помощи графического интерфейса Windows слишком долго. Для этого можно воспользоваться простым скриптом WinSetGate.cmd:

@echo off
echo Gateway is %1 %2
route -p change 0.0.0.0 mask 0.0.0.0 %1
pause

у которого параметром %1 задается IP адрес шлюза, а необязательным параметром %2 - имя провайдера.

Для этого создадим папку \Scripts в любом удобном нам месте (например, в корне диска С:) и разместим в ней вышеприведенный скрипт WinSetGate.cmd, сделав к нему 2 ярлыка WinSetGate1 и WinSetGate100.
Открыв свойства обоих ярлыков, добавим в строки вызова скриптов адреса шлюзов в качестве параметров:

192.168.0.1 для ярлыка WinSetGate1



и 192.168.0.100 для ярлыка WinSetGate100 соответственно


(для экономии места здесь показана только одна строка из окна Свойств второго ярлыка)

Теперь можно выбрать для каждого из ярлыков запоминающийся значок и скопировать оба ярлыка в какое-нибудь удобное место, например, на панель задач, на рабочий стол, в кнопку Пуск или куда-либо еще. После этого станет возможным менять шлюз одним щелчком мыши. Рекомендуется также в настройках соответствующих консольных окон задать в явном виде цвет, размеры и положение окон на рабочем столе. Тогда их можно будет оставлять незакрытыми на экране в качестве удобных индикаторов выбранного шлюза. Выглядеть это может, например, так:




Если же это окно закрыто, то для того, чтобы посмотреть через какой шлюз сейчас работает компьютер, можно использовать другой очень простой скрипт WinIPconfig.cmd:

@ipconfig | find "Default Gateway"
@pause

Этот скрипт покажет в консольном окне актуальный IP адрес шлюза. Конечно, ему тоже рекомендуется сделать ярлык (но уже без параметров) и точно также скопировать этот ярлык в какое-нибудь удобное место. Консольное окно этого скрипта на экране это может выглядеть, например, так:


(вторая строчка Default Gateway с пустым адресом относится к протоколу IPv6, который в данной системе был отключен)

И, наконец, последний Универсальный скрипт, который можно использовать вместо всех 3-х вышеприведённых, выглядит так:

@Echo off
rem ****************************************************
rem * Workstation Gateway Switcher v1.01 from 05.12.13 *
rem * Author: Andy Rodionov, mailto:andy@rodionov.info *
rem ****************************************************
Set GateWay=""
rem --- Uncomment one of 2 next lines for destinated start: ---
rem Goto :YAOL
rem Goto :NLINE
rem
rem Show old Gateway name for 1-st start of the script:
:ShowOld
@CLS
ipconfig | find "192.168.0.100" > nul
if ERRORLEVEL 1 (echo -YAOL-) ELSE (echo -NLINE-)
:ShowGW
ipconfig | find "Default Gateway"
Set GateWay=""
Set /p GateWay="> Enter Y (YAOL), N (nLine) or Q for quit: "
rem --- Check for Quit: ---
if %GateWay% == q Goto :quit
if %GateWay% == Q Goto :quit
rem --- Switch for YAOL: ---
If %GateWay% == y Goto :YAOL
If %GateWay% == Y Goto :YAOL
If %GateWay% == 1 (
:YAOL
  @CLS
  echo -YAOL-
  route -p change 0.0.0.0 mask 0.0.0.0 192.168.0.1
  goto :ShowGW
)
rem --- Switch for NLINE: ---
if %GateWay% == n Goto :NLINE
if %GateWay% == N Goto :NLINE
if %GateWay% == 100 (
:NLINE
  @CLS
  echo -NLINE-
  route -p change 0.0.0.0 mask 0.0.0.0 192.168.0.100
  goto :ShowGW
)
rem --- loop back for unsupported characters: ---
goto :ShowOld
:quit
rem pause


Этот скрипт автор использует для переключения своих рабочих станций между двумя провайдерами YAOL и nLine, имена и адреса которых при необходимости могут быть легко изменены. Консольное окно этого скрипта запускается автоматически при старте системы и постоянно присутствует на заднем плане, ожидая ввода с клавиатуры:



В случае необходимости, окно переносится на передний план одним щелчком мыши, оказывается в фокусе и в него вводятся буквы "n" или "y", которые приводят к переключению всего трафика на канал соответствующего провайдера.

Замечания

1. Данная технология может быть легко масштабирована на большее число провайдеров, подключаемых к одной локальной сети. Это потребует использования дополнительных маршрутизаторов, которым надо будет дать другие IP адреса в локальной сети, а также соответствующих им простых скриптов выбора каналов и/или дописывания новых блоков выбора провайдеров в Универсальном скрипте.

2. При наличии в локальной сети более, чем одного активного шлюза, становится возможным разделять трафик разных приложений, запускаемых даже на одном компьютере, если эти приложения допускают в явном виде задавать адрес шлюза, с которым они работают. Таким образом можно объединять трафик из разных шлюзов, что эквивалентно увеличению общей пропускной способности канала.

3. Следует обратить внимание на то, что большинство маршрутизаторов имеют свой собственный включенный по умолчанию DHCP сервер для автоматической раздачи клиентам IP адресов и других реквизитов соединений. Чтобы избежать конфликтов между этими DHCP серверами, рекомендуется оставлять в работающем состоянии только один из них, отключая остальные в настройках маршрутизаторов, или в явном виде задавать для разных DHCP не пересекающиеся диапазоны адресов.

Полезные советы:

  1. Подключение локальной сети к нескольким провайдерам - альтернативный метод
2. "Условный" PING
3. Шлюз для Гигабитного внешнего канала
Наверх


2. "Условный" PING

  При написании скриптов, анализирующих работоспособность сетей и доступность различных сетевых ресурсов, часто бывает необходимо оценить результат выполнения команды ping, т.е. наличие или отсутствие ответа от пингуемого ресурса. Но сама команда ping в Windows, к сожалению, не выдает кодов возврата. Однако, эту проблему можно решить: ниже приведен пример простого скрипта, анализирующего строки, выдаваемые командой ping, и формирующего код возврата. Этот скрипт проверяет наличие ключевого слова "TTL=", появляющегося в выдаче команды ping, только при успешном получении ответа от проверяемого сетевого ресурса. Таким образом, в ниже приведенном скрипте значение переменной %ERRORLEVEL% формируется не при помощи команды ping, а дополнительной командой find:

@Echo off
ping %1 -n 2 | find "TTL=" > nul
if %ERRORLEVEL% NEQ 0 (
  echo %1 is not responding
) else (
  echo %1 is Ok
)
rem pause

Следует отметить, что если использовать приведенный выше метод в скриптах для переключения каналов и провайдеров, то можно организовать автоматическое переключение каналов при обнаружениях неисправностей.


Полезные советы:

  1. Подключение локальной сети к нескольким провайдерам - альтернативный метод
2. "Условный" PING
3. Шлюз для Гигабитного внешнего канала
Наверх


3. Шлюз для Гигабитного внешнего канала

  В связи с появлением у автора оптоволоконной линии с пропускной способностью 1 Гбит/сек, возник вопрос оценки производительности и пропускной способности шлюзов разнличых видов, выполняющих функции файрволла и NAT. Ранее этот вопрос автором не рассматривался, так как на используемых до этого двух каналах разных провайдеров по 100 Мбит/сек, имевшиеся шлюзы на роутере TP-Link TL-WR2543ND и шлюз на базе виртуального сервера Windows 2003 под VMware обеспечивали необходимую скорость.

Относительно недорогой роутер TP-Link TL-WR2543ND, имеющий 4 порта по 1 Гбит для локальной сети (LAN) и порт 1 Гбит для выхода в Интернет (WAN), подразумевал высокую скорость не только его собственного внутреннего коммутатора для LAN (что неоднократно проверялось и подтверждалось), но предполагал и достаточно высокую скорость сквозной передачи данных между WAN и LAN. Однако, это необходимо было проверить.

С другой стороны, в качестве второго шлюза использовался виртуальный сервер 2003, который был гостевой машиной на хосте с двухядерным процессором Core Duo 3 ГГц, где в качестве хостовой ОС использовалась Windows 7.

По результатам тестирования при помощи сайтов Speedtest, самым скоростным и удобным из которых оказался Speedtest AlloIncognito, а также по комплексным тестам загрузки канала торрентами при помощи µTorrent, было выяснено следующее:

1. Роутер TP-Link TL-WR2543ND обеспечивал сквозной канал WAN-LAN с полосой пропускания не более 130 Мбит/сек. Очевидно, полоса пропускания этого недорогого роутера ограничивалась производительностью его собственного внутреннего процессора, занимающегося анализом пакетов, роутингом, NAT, функциями файрволла и пр.

2. Виртуальный шлюз на сервере Windows 2003 обеспечивал канал WAN-LAN с полосой пропускания не более 300 Мбит/сек. При этом, загрузка процессора (CPU) не поднималась выше 50-60%, что говорило о том, что "тормоза" возникали не из-за недостатка производительности CPU, а где-то на стыке логики виртуальных и физических сетевых интерфейсов виртуальной машины, несмотря на то, что штатные виртуальные сетевые интерфейсы VMware специфицированы как "10 Гбит". Этот вывод также косвенно подтвердился третьим тестом.

3. Из-за неудоволетворительных результатов тестов 1 и 2, было принято решение подключить один из 4-х ядерных компьютеров к кабелю провайдера напрямую и, таким образом, оценить максимальную скорость соединения. При таком тестировании скорость достигала 700-800 Мбит/сек при относительно небольшой загрузке CPU (15-30%), что было уже вполне приемлимо, учитывая реальную загрузку внешних каналов и наличие в них служебного трафика. Поэтому шлюз был перенесён с виртуального сервера 2003 на хост с Windows 7 для того чтобы обеспечить шлюзу доступ к сетевым интерфейсам без участия виртуальной машины. Виртуальный сервер 2003 при этом не останавливался, присутствуя в локальной сети и продолжая выполнять функции HTTP и FTP серверов, а также сервера печати. В результате переконфигурации хоста и придания ему дополнительных функций шлюза, скорость передачи данных WAN-LAN возросла примерно до тех же значений, что и при предыдущем прямом подключении. Максимальная зафиксированная скорость Speedtest составила 750 Мбит/сек во время загрузки (download) и 700 Мбит/сек во время выгрузки (upload). Комплексный тест скорости работы с торрентами также показал скорость входящего трафика, доходящую до 85 МБайт/сек. При этом загрузка CPU 2-х ядерной машины 3 ГГц достигала, порой, 70-80%, что, впрочем, практически не сказывалось на работе виртуальной машины 2003, гостящей на этом же хосте.

Важно также отметить, что те же значения скорости приёма и передачи были получены не только при тестировании внешнего интерфейса на самом хосте, но и на других компьютерах локальной сети, соединенных с локальным сетевым интерфейсом хоста через 8-ми портовый коммутатор 1 Гбит. То есть любая из машин в локальной сети, выходящая в Интернет через этот шлюз, могла получить в свое распоряжение практически всю полосу пропускания внешнего канала за счет большой сквозной пропускной способности такого шлюза.

Выводы

Если необходимо подключить локальную сеть к каналу 1 Гбит не приобретая для этого дополнительное дорогостоящее оборудование (например, высокоскоростной маршрутизатор), то можно использовать имеющуюся подходящую физическую (не виртуальную!) машину средней производительности с двумя сетевыми интерфейсами по 1 Гбит/сек, организовав на ней программный шлюз под управлением, в том числе, ОС Windows.

Единственным минусом этого решения является то, что если эта же машина будет использоваться и для каких-либо других целей, то на ней невозможно будет реализовать переключение между разными провайдерами средствами самой ОС (как это описано в Полезном совете 1), так как "гейтвей по умолчанию" должен быть единственным и в даннои случае он будет жестко привязан к сетевому интерфейсу, подключенному к провайдеру. Поэтому менять адрес гейтвея на интерфейсе, подключенном к локальной сети, будет невозможно. Однако, в программах, использующих, например, Proxy, можно явно указывать через какой из шлюзов выходить в Интернет и это может быть решением данной проблемы.





Программы и
компьютеры

Рейтинг@Mail.ru

Версия 3.46 от 08.12.2017
(сайт адаптирован для прослушивания и просмотра на смартфонах без флэш-плеера)