ISP`s IT Аутсорсинг
Быстрый переход: Главная блога Главная сайта Форум
Если Вы чего то недопоняли или не нашли - задайте
вопрос на нашем форуме и мы попробуем Вам помочь.
Subnets.ru Регистрация IP и Автономных систем mega-net.ru

Добро пожаловать в блог! Надеемся, что Вы еще вернетесь.

Поддержку bridge во FreeBSD 7.3 можно включить двумя способами:

Интеграцией в ядро:

options BRIDGE

Загрузка модулем:

# bridge loadable module

kldload /boot/kernel/bridge.ko

Для загрузки при старте системы добавляем в /boot/loader.conf
bridge_load=»YES» # Ethernet bridging netgraph node type

Конфигурация бриджа:

Для работы при рестарте системы добавляем нужные парамы в
/etc/sysctl.conf

net.link.ether.bridge.enable
Установить в 1 для активации бриджа, в 0 — для отключения.

net.link.ether.bridge.ipfw
Установить в 1 для активации ipfw фильтрации бриджированных пакетов.

net.link.ether.bridge.ipf
Установить в 1 для активации ipf фильтрации бриджированных пакетов.

net.link.ether.bridge.config
Конфиг интерфейсов в бридже. Интерфейсы разделяются запятыми, пробелами или
знаком табуляции. Каждый интерфейс может опционально идти с номером кластера,
которому он принадлежит, указанным через двоеточие
(если номер кластера (cluster-ID) опущен, то интерфейс по умолчанию принадлежит
кластеру с ID=1);

в качестве примера конфига:
net.link.ether.bridge.config=fxp0:1,em1,vlan101:26,em2:26
помещает fxp0 и em1 в кластер номер 1, а vlan101 и em2 — в кластер номер 26.

Список интерфейсов перечитывается каждый раз, когда он модифицируется, либо когда
включается бриджирование или создаются/уничтожаются новые интерфейсы.
Чтобы заставить список обновляться явным образом (без ожидания изменений, описанных выше)
следует задать время обновления в следующей опции
net.link.ether.bridge.refresh (На практике эта опция не пригодилась)

Интерфейсы, которые находятся в списке конфига, но не могут участвовать в процессе бриджирования,
(не существуют, или не являются интерфейсами типа Ethernet или VLAN), не будут задействованы
в процессе бриджирования с выводом соответствующей ошибки.

Конфигурация с использованием VLAN’ов и транка:

В качестве примера, следующая конфигурация использует интерфейс fxp0 как
транк, который пропускает пакеты для 802.1q виланов 222 и 333 на физические
интерфейсы em1 и em2 соответствующим образом.
net.link.ether.bridge.config=vlan222:48,em1:48,vlan333:85,em2:85

ifconfig vlan222 vlan 222 vlandev fxp0 up
ifconfig vlan333 vlan 333 vlandev fxp0 up

Отметьте, что нет никакой связи между 802.1q VLAN идентификаторами (в нашем случае 222 и 333)
и номерами кластеров (cluster-ID — в нашем случае 48 и 85) используемых в конфиге бриджа.
Также, интерфейс trunk не появляется в конфиге бриджа, присоединением/удалением тагов
занимается девайс vlan (по kldstat’у видно, что при создании vlan на интерфейсе, должен
подгрузиться модуль if_vlan.ko).


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


Ссылки:

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор: MadMax
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 4, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту
    Не найдено

Предыстория

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

Для реализации этого проекта были куплены GSM модем Siemens MC35i и 1-портовый асинхронный сервер Moxa NPort-5110, обеспечивающий преобразование интерфейса RS-232 в Ethernet и конечно же сервер под FreeBSD 🙂

Moxa NPort-5110 был приобретен для цели отсылки SMS-сообщений из любого сегмента сети, а не только с машины, к которой подключен GSM-шлюз.

Теория с примерами

Итак, конфигурация схемы следующая:

GSM модем включен в Moxa NPort-5110 кабелем RS-232.

Moxa имеет адрес 10.100.0.2:4001. Для отправки сообщения на латинице нужно выполнить следующую последовательность команд на модеме:

telnet 10.100.0.2 4001
AT+CPIN=7256
OK
AT+CMGF=1
OK
AT+CMGS="+79101234567"
>test,test,testCTRL+Z
+CMGS 

где CTRL+Z — комбинация клавиш, нажатие которой означает конец сообщения.

С отправкой сообщения «Ахтунг!» на кириллице на номер +79101234567 все сильно сложнее, т.к. сообщение должно уходить пакетом в формате PDU в кодировке UCS2 (юникодная кодировка, поддерживающая в том числе кириллицу), а потому рассмотрим этот случай подробнее.

Пример:

telnet 10.100.0.2 4001
AT+CPIN=7256
OK
AT+CMGF=0
OK
AT+CMGS=28
>0011000B919701214365F70018C10E0410044504420443043D04330021CTRL+Z
+CMGS

Разберем поподробнее эту «кашу»:

AT+CMGF=0 - установка модема в PDU-режим
AT+CMGS=28 - длина строки пакета /2 -1
0011000B919701214365F70018C10E0410044504420443043D04330021 - сам PDU пакет

Формат PDU-пакета представляет собой 16-ричную последовательность, передающуюся человекочитаемой строкой (не ASCII-представления самих 16-ричных чисел). Оригинал описания (сохраненная копия) формата PDU пакета (на английском).

Перевод и коментарии:
00 Длина и номер SMS-центра провайдера. у нас — дефолтный из настроек GSM
11 Сообщение SMS-Submit (сохраненная копия)
0B Длина телефонного номера получателя (количество цифр в нем — в нашем случае 11)
91 Тип телефонного номера получателя (у нас получается «международный тип с планом нумерации Е.164/E.163) (сохраненная копия)
6 байт телефонный номер получателя (кодировка описана ниже)
00 Протокол (00 — SMS) (сохраненная копия)
18 Кодирование данных (08=UCS2,00-latin 7 bit etc. Старший байт — не сохранять в истории получателя) (сохраненная копия)
С1 Доставка актуальна 1 неделю (как рассчитывается) (сохраненная копия)
0E Длина сообщения («байт». длина символов кодированной UCS2-строки/2)
xx байт Кодированное сообщение (текст в UCS2, 16-ричное представление)

по-порядку подробней:

  • первый байт на некоторых телефонах передавать не следует (работа возможна только через SMS-центр провайдера, телефон другого не умеет)
  • номер получателя (алгоритм создавали наркаманы). кодируется «как есть» путем переставления местами соседних цифр, «добивается» до длины в 12 символов символами «F». например номер доблестной советской милиции (02 кто забыл) кодируется как 20FFFFFFFFFF, а номер из нашего примера (+79101234567) — как 9701214365F7. З.Ы. Не забывайте что длина SMS-сообщения ограничена, в кодировке UCS2 70-ю символами, на латинице — 160-ю символами.

Кодирование отправки SMS сообщений на PHP

<?

//Массив с параметрами GSM шлюза
$init=array('ip'=>"10.100.0.2",'port'=>'4001','pin'=>'7256'); 
// Отправка СМС :)
send_sms("Это тест","9101234567");
//Функция отсылки СМС
//$mess - сообщение
//$mob - номер мобильного в формате ХХХУУУУУУУ
//$debug - 1 - выводить отладочную инфу, 0 - нет
function send_sms($mess,$mob,$debug=0){
    global $init; 
    //Если сообщение и номер мобильника не пустые.
    //Проверку правильности формата мобильника возлагается на вас ;-) 
    if ($mess && $mob){
           $len=strlen($mess);
           $mob="7".$mob;
           $ooo="";
           if (preg_match('/^([x0Ax0Dx20-x7F]+)$/',$mess,$tmp)){
                if ($len<=160){
                      $len=0;
                      print "8-bit encoded SMS<br>";
                }else{
                      print "Длина сообщения в 8-битной кодировке [$len] больше 160 символов!<br>n";
                      return -1;
                }
           }else{
                if ($len<=70){
                     $mess=cp1251_2ucs2($mess);
                     $ret.="00";//it is only an indicator of the length of the SMSC information supplied (0)
                     $ret.="11"; //First octet of the SMS-SUBMIT message.
                     $ret.="00"; //TP-Message-Reference. The "00" value here lets the phone set the message reference number itself.
                     $ret.="0B"; // Address-Length. Length of phone number (11)
                     $ret.="91"; //Type-of-Address. (91 indicates international format of the phone number).
                     // Начало кодирования номера мобильного
                     if ((strlen($mob)/2)%2){
                           $mob.="F";
                     }
                     for ($i=0;$i<strlen($mob);$i+=2){
                              $ret.=$mob[$i+1].$mob[$i];
                     }
                     // Закончили взрывать мозг :)
                     $ret.="00"; //TP-PID. Protocol identifier
                     $ret.="18"; //TP-DCS. Data coding scheme. 18 - don't save at history, 08 - save
                     $ret.="C1"; //TP-Validity-Period. C1 means 1 week
                     $ret.=sprintf("%02X",strlen($mess)/2); //TP-User-Data-Length. Length of message.
                     $ret.=$mess; //TP-User-Data $ret.=chr(26); //end of TP-User-Data
                     $len=sprintf ("%s",(strlen($ret)-3)/2);
                     $mess=$ret;
                     print "16-bit encoded SMS<br>";
                }else{
                     print "Длина ссобщения в 16-битной кодировке [$len] больше 70 символов!<br>n";
                     return -1;
                }
           }
           // Создаем сокет
           $socket = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
           if (!$socket) {
                err($socket);
           }else{
                // Устанавливаем опцию таймаута в 5 секунд для сокета.
                // Проверка на удачную установку лежит на вас :)
                socket_set_option($socket,SOL_SOCKET,SO_SNDTIMEO,array("sec"=>5,"usec"=>0));
                // Устанавливаем соединение на сокет
                $result = @socket_connect($socket, $init['ip'], $init['port']);
                if (!$result) {
                     err($socket);
                } else {
                     // Инициализируем GSM шлюз
                     $out=sms_init($socket,$len,$debug);
                     if ($len){
                          // Сообщение на кириллице
                          $out.=raw($socket,"AT+CMGS=$len",">");
                     }else{
                          // Сообщение на латинице
                          $out.=raw($socket,sprintf("AT+CMGS="+%s"",$mob),">");
                          $mess.=chr(26);
                     }
                     $out.=raw($socket,$mess,"CMGS",$debug);
                     if ($debug){
                          printf ("<pre>[ %s ]</pre>",$out);
                     }
                }
                @socket_close($socket);
           }
     }
     return $out;
} 
// Функция начальной инициализации модема
// $socket - ресурс сокета
// $type - 0 - сообщение на латинице, 1 - на кириллице
// $debug - 1 - выводить отладочную инфу, 0 - нет
function sms_init($socket,$type,$debug=0){
    global $init;
    $out=raw($socket,"AT","OK",$debug);
    $out.=raw($socket,sprintf("AT+CPIN=%s",$init['pin']),'(ERROR)|(OK)',$debug);
    $out.=raw($socket,sprintf("AT+CMGF=%d",$type?0:1),"OK$",$debug);
    if ($debug){
         print "<pre><font color="green">$out</font></pre><br>";
    }
    return $out;
}

// Функция посылки комманды на GSM шлюз
// $socket - ресурс сокета
// $write - команда, передаваемая GSM шлюзу
// $delim - последовательность, означающая окончание чтения ответа с GSM шлюза
// $debug - 1 - выводить отладочную инфу, 0 - нет
function raw($socket,$write,$delim,$debug=0){
    $ooo='';
    $write.="\r\n";
    if (@socket_write($socket,$write,strlen($write))===false){
        err($socket);
    }else{
        while ($out = @socket_read($socket, 2, PHP_NORMAL_READ)) {
           if ($out===false){
               err($socket);
           }else{
               if ($debug){
                   print $out;
                   flush();
               }
               $ooo=sprintf("%s%s",$ooo,$out);
           }
           if (preg_match("/".$delim."/i",$ooo,$tmp)){
               if ($debug){
                   print_r($tmp);
                   flush();
               }
               break;
           }
        }
     }
     usleep(100000);
     return $ooo;
} 
// Функция вывода ошибки при работе с сокетом
// $soc - ресурс сокета
function err($soc){
    printf ("<script>alert ('Ошибка: %s');</script><font color=red><b>%s: [%s]</b></font><br>",
    socket_strerror(socket_last_error($soc)),"Ошибка",socket_strerror(socket_last_error($soc)));
} 
// Функция кодирования кириллицы из CP1251 в UCS2
// $str - строка для перекодирования
function cp1251_2ucs2($str){
    for ($i=0;$i<strlen($str);$i++){
        if (ord($str[$i]) < 127){
            $results = sprintf("%04X",ord($str[$i]));
        }elseif (ord($str[$i])==184){ //ё
            $results="0451";
        }elseif (ord($str[$i])==168){ //Ё
            $results="0401";
        }else{
            $results = sprintf("%04X",(ord($str[$i])-192+1040));
        }
        $ucs2 .= $results;
    }
    return $ucs2;
}
// Функция вывода отладочной инфы
function debug($array){
    ob_start("get_vars");
    print_r($array);
    ob_end_flush();
} 
// Функция output_callback для функции debug()
function get_vars($buffer){
    return sprintf ("<div style="padding: 3px; border: 2px #88bbbb solid; color: #00dd00; background-color: #bbffbb; font-weight: bold; text-align: left;"><pre>%s</pre></div>",
    htmlspecialchars($buffer));
}

?>

Декодирование принятых SMS сообщений на PHP

 Отлично, с отсылкой СМС разобрались, осталось чтение сообщений (как обычно, с 8-битной кодировкой проблем нет, есть только с нашей кириллицей).

Команды для чтения SMS с GSM модемов:

at+cmgf=1 — выводить сообщения в неупакованном (читабельном) виде
at+cmgl=»all» — вывести сообщения
at+cmgr=n — прочитать отдельное сообщение
at+cmgd=n — удалить сообщение с SIM-карты
Сам прием СМС сообщений с GSM шлюза не сильно отличается от передачи (на основе вышеприведенной отправки предлагается вам самостоятельно реализовать это. Опишу только функцию для преобразования сообщения с «тарабарского» на русский:
<?
function ucs2_2cp1251($str){
    for ($i=0;$i<strlen($str);$i+=4){
        $char=hexdec($str[$i].$str[$i+1].$str[$i+2].$str[$i+3]);
        if ($char>126){
            if ($char==1105){
                $char=184; //ё
            }elseif($char==1025){
                $char=168; //Ё
            }elseif ($char>=848){
                $char-=848;
            }
        }elseif(!$char){
            $char=32;
        }
        $ret.=chr($char);
    }
    return $ret;
}
?>
Источники:
1. О виджетах и гаджетах
2. SMS and PDU format
3. IXBT.ru
4. Связывание мобильника и FreeBSD через bluetooth (c п.1 по п.6 включительно)

Ссылки:
З.Ы. Этот материал можно использовать и при отсылке СМС через обычный мобильник. Разница в том,
что вместо сетевого сокета нужно использовать устройство FreeBSD /dev/ttyU0 (при подключении через USB
кабель) либо /dev/ttypf (выполнив перед этим команду rfcomm_sppd -a MAC_адрес_телефона -t /dev/ttypf &).
О связывании мобильника и FreeBSD через bluetooth смотри выше "Источники".

З.З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !
Автор: Панфилов Алексей (lehis (at) subnets.ru)
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 10, среднее: 4,60 из 5)
Загрузка...
Отправить на почту Отправить на почту
    Не найдено

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

PPPoE (Point-to-point protocol over Ethernet) — сетевой протокол передачи кадров PPP через Ethernet. Предоставляет дополнительные возможности (аутентификация, сжатие, шифрование).

PPPoE — это туннелирующий протокол (tunneling protocol), который позволяет настраивать (или инкапсулировать) IP, или другие протоколы, которые наслаиваются на PPP, через соединения Ethernet, но с программными возможностями PPP соединений, и поэтому используется для виртуальных «звонков» на соседнюю Ethernet-машину и устанавливает соединение точка-точка, которое используется для транспортировки IP-пакетов, работающее с возможностями PPP.

PPPoE – это метод передачи PPP поверх Ethernet. Пакеты PPP инкапсулируются (включаются) в Ethernet фреймы.

Действующими лицами являются с одной стороны Access Concentrator (AC) – это сервер доступа, а с другой клиент PPPoE. Клиент и сервер должны быть соединены с использованием любых Ethernet устройств (повторители, коммутаторы).

Для именования сервера доступа используется Access Concentrator Name. В свою очередь, Access Concentrator может предоставлять некоторое количество PPPoE сервисов, называемых Service Name.

Парадигма PPPoE включает две стадии: Discovery stage и PPP Session stage.

Клиент, желающий установить PPPoE соединение, сначала должен пройти Discovery stage. При этом между ним и сервером передаются Ethernet фреймы с Ether_type=0x8863.

Наблюдать можно следующим образом:

tcpdump –n –e -i fxp0 ether proto 0x8863

В свою очередь, Discovery stage подразделяется на: initiation, offer, request, and session confirmation.

Сначала клиент должен инициировать PPPoE сессию (initiation). Для этого он посылает специальный пакет Active Discovery Initiation (PADI). Данный пакет посылается на broadcast Ethernet адрес (ff:ff:ff:ff:ff:ff), что логично, так как клиент пока не знает адреса сервера доступа. Опционно пакет может содержать запрашиваемый клиентом Service Name (и только, хотя многие считают, что здесь может быть и Access Concentrator Name).

Пример PADI-пакета:

Frame 1 (44 bytes on wire, 44 bytes captured)
Ethernet II, Src: 00:50:da:42:d7:df, Dst: ff:ff:ff:ff:ff:ff
PPP-over-Ethernet Discovery
  Version: 1
  Type 1
  Code Active Discovery Initiation (PADI)
  Session ID: 0000
  Payload Length: 24
PPPoE Tags
  Tag: Service-Name
  Tag: Host-Uniq
    Binary Data: (16 bytes)

Src. (=source) представляет MAC-адрес машины, пославшей PADI.
Dst. (=destination) является широковещательным Ethernet-адресом.
PADI-пакет может быть получен более чем одним AC.

Сервер доступа отвечает пакетом Active Discovery Offer (PADO), в который включает свое название Access Concentrator Name и название предоставляемого сервиса Service Name. Данный пакет уже юникастовый и содержит мак адрес конкретного сервера.

Вот пример PADO-пакета:

Frame 2 (60 bytes on wire, 60 bytes captured)
Ethernet II, Src: 00:0e:40:7b:f3:8a, Dst: 00:50:da:42:d7:df
PPP-over-Ethernet Discovery
  Version: 1
  Type 1
  Code Active Discovery Offer (PADO)
  Session ID: 0000 Payload Length: 36
PPPoE Tags
  Tag: Service-Name
  Tag: AC-Name
    String Data: IpzbrOOl
  Tag: Host-Uniq
    Binary Data: (16 bytes)

AC-Name — String Data представляет строковое AC имя, в данном случае «Ipzbr001»
Src. представляет MAC-адрес AC.

Теперь клиент может выбрать нужное (Service Name и Access Concentrator Name) из возможно нескольких предложений (PADO пакетов) и ответить уже конкретному серверу пакетом Active Discovery Request (PADR).

Согласный на предоставление связи сервер посылает клиенту Active Discovery Session-confirmation (PADS) пакет, включающий уникальный идентификатор сессии (SID), необходимый для дальнейшего взаимодействия. На этом Discovery stage заканчивается и начинается PPP session stage.

PPP session stage начинается с использованием уже обозначенного идентификатора (SID) и Service Name и включает стандартные PPP процедуры: link control, network layer control, authentication. При этом согласуются различные параметры связи и, самое главное, происходит аутентификация.

На данном этапе (и далее, вплоть до отключения) между клиентом и сервером передаются Ethernet фреймы с Ether_type=0x8864.

Наблюдать можно следующим образом:

tcpdump –n –e -i fxp0 ether proto 0x8864

В итоге устанавливается PPPoE соединение и передаются данные.

Для окончания соединения PPPoE клиент (или сервер, что реже) посылает пакет Active Discovery Terminate (PADT).

Типичный обмен пакетами между участниками PPPoE выглядит так (mac сервера s:s:s:s:s:s, mac клиента c:c:c:c:c:c):

подключение клиента:

c:c:c:c:c:c ff:ff:ff:ff:ff:ff 8863 60: PPPoE PADI [Host-Uniq UTF8]
s:s:s:s:s:s c:c:c:c:c:c 8863 49: PPPoE PADO [AC-Name «Provider»] [Service-Name] [Host-Uniq UTF8] [AC-Cookie UTF8]

c:c:c:c:c:c s:s:s:s:s:s 8863 60: PPPoE PADR [Host-Uniq UTF8] [AC-Cookie UTF8] [AC-Name » Provider «]

s:s:s:s:s:s c:c:c:c:c:c 8863 49: PPPoE PADS [ses 0x15] [AC-Name » Provider «] [Service-Name] [Host-Uniq UTF8] [AC-Cookie UTF8]

обмен данными

отключение клиента

c:c:c:c:c:c s:s:s:s:s:s 8863 60: PPPoE PADT [ses 0x1a]

Более подробное описание PPPoE содержится в RFC 2516

Ссылки:

Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 4, среднее: 4,75 из 5)
Загрузка...
Отправить на почту Отправить на почту
    Не найдено

Может возникнуть ситуация когда пропускной способности одного гигабитного интерфейса не достаточно.

Решить эту проблему может ещё один интерфейс и агрегирование их в один логический.

В нашем примере мы используем гигабитные интерфейсы.

Juniper

Войдем в режим конфигурации:

root@juniper> configure

перейдем в раздел chassis

[edit]
root@juniper#
edit chassis

теперь необходимо задать количество агрегированных интерфейсов:

[edit chassis]
root@juniper#
set aggregated-devices ethernet device-count 1

Теперь нам нужно выбрать и настроить наши гигабитные интерфейсы:

[edit chassis]
root@juniper#
top

[edit]
root@juniper#
edit interfaces

[edit interfaces]
root@juniper#
set ge-0/1/0 gigether-options 802.3ad ae0

[edit interfaces]
root@juniper#
set ge-1/3/0 gigether-options 802.3ad ae0

теперь можно приступать к настройке агрегированного интерфейса, он имеет имя ae0 и с ним можно делать все тоже самое, что и с обычным интерфейсом, например поднимать вланы:

[edit interfaces]
root@juniper#
set ae0 vlan-tagging

[edit interfaces]
root@juniper#
set ae0 unit 11 vlan-id 11 family inet address 192.168.1.1/24 preferred

Посмотрим итог:

chassis {
     aggregated-devices {
           ethernet {
                device-count 1;
           }
     }
}
interfaces {
    ge-0/1/0 {
          gigether-options {
              802.3ad ae0;
          }
    }
    ge-1/3/0 {
          gigether-options {
              802.3ad ae0;
          }
    }
    ae0 {
          vlan-tagging;
          unit 11 {
                 vlan-id 11;
                family inet {
                       address 192.168.1.1/24 {
                            preferred;
                      }
                }
          }
    }
}

Cisco

Приступим к настройке Cisco Catalyst 3560G


Switch> enable
Switch# configure terminal
Switch(config)# interface GigabitEthernet0/1
Switch(config-if)# channel-group 1 mode on
Switch(config-if)# switchport trunk encapsulation dot1q
Switch(config-if)# switchport trunk allowed vlan 11
Switch(config-if)# switchport mode trunk
Switch(config-if)# interface GigabitEthernet0/2
Switch(config-if)# channel-group 1 mode on
Switch(config-if)# switchport trunk encapsulation dot1q
Switch(config-if)# switchport trunk allowed vlan 11
Switch(config-if)# switchport mode trunk
Switch(config-if)# interface Port-channel1
Switch(config-if)# switchport trunk encapsulation dot1q
Switch(config-if)# switchport trunk allowed vlan 11
Switch(config-if)# switchport mode trunk
Switch(config-if)# exit
Switch(config)# port-channel load-balance src-ip


Примечание:
При отладке канала EtherChannel, который не формируется по какой-либо причине, следует помнить, что все порты в группе должны иметь одинаковые атрибуты. Например, у всех портов должна быть одинаковая скорость, дуплексность, VLAN-сеть (или собственная VLAN-сеть для магистрального канала), магистральный режим и инкапсуляция, допустимый VLAN-диапазон и другие параметры.
Полезные команды show:


show etherchannel [channel-group]
<1-48> Channel group number
detail Detail information
load-balance Load-balance/frame-distribution scheme among ports in port-channel
port Port information
port-channel Port-channel information
protocol protocol enabled
summary One-line summary per channel-group

show pagp [group-number]
<1-48> Channel group number
counters Traffic information
internal Internal information
neighbor Neighbor information


Посмотрим итог:

port-channel load-balance src-ip
!
interface Port-channel1
 switchport trunk encapsulation dot1q
 switchport trunk allowed vlan 11
 switchport mode trunk
!
interface GigabitEthernet0/1
switchport trunk encapsulation dot1q
switchport trunk allowed vlan 11
switchport mode trunk
channel-group 1 mode on
!
interface GigabitEthernet0/2
switchport trunk encapsulation dot1q
switchport trunk allowed vlan 11
switchport mode trunk
channel-group 1 mode on
!

Таким образом мы объединили (агрегировали) по два порта на каждом устройстве (получили 2-х гигабитный интерфейс) и сделали между ними trunk в котором «ходит» vlan 11.

Ссылки:

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор: Николаев Дмитрий (virus (at) subnets.ru)
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 4, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту
    Не найдено

Многие новички в сетях и FreeBSD сталкиваются с вопросом:

«Как соединить две сети если сервер на FreeBSD имеет физическое подключение к обеим сетям ?»

Схема сети

Схема сети

Иными словами сервер FreeBSD должен выступать в роли router (маршрутизатор).

Итак, что мы имеем:

  • Ethernet сеть
  • Две подсети класса «С» (/24 — маска 255.255.255.0)
  • Сервер FreeBSD с двумя сетевыми картами
  • Клиенты в обеих подсетях

Наша задача, чтобы клиенты из подсети 192.168.1.0/24 могли обмениваться трафиком с клиентами из подсети 192.168.0.0/24.

Сначала настроим сервер FreeBSD и заставим его передавать (маршрутизировать) пакеты из одной подсети в другую.

За это отвечает параметр net.inet.ip.forwarding, посмотрим в какое значение он имеет:

[root@freebsd ~]# sysctl net.inet.ip.forwarding
net.inet.ip.forwarding: 0

На данный момент его значение «0», а это значит, что сервер FreeBSD не будет выполнять маршрутизации.

Включим эту функцию:

[root@freebsd ~]# sysctl net.inet.ip.forwarding=1
net.inet.ip.forwarding: 0 -> 1

Так мы изменили значение с «0» на «1». Теперь нужно сделать, так чтобы после ребута это значение всегда было 1-цой. Это можно сделать 2-мя способами:

  1. в файл /etc/rc.conf добавить строчку: gateway_enable=»YES»
  2. в файл /etc/sysctl.conf добавить строчку: net.inet.ip.forwarding=1

На сервере у нас есть две сетевые карты и соответственно два интерфейса: em0 и em1.

Пусть em0 «смотрит» в сеть слева, а em1 в сеть справа. Назначим IP-адреса для интерфейсов FreeBSD сервера:

[root@freebsd ~]# ifconfig em0 add 192.168.1.1/24
[root@freebsd ~]# ifconfig em1 add 192.168.0.1/24


Примечание:

Если на команду ifconfig вы получаете ответ:
command not found
воспользуйтесь командой

[root@virus ~]# whereis ifconfig
ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz /usr/src/sbin/ifconfig
которая укажет где именно располагается утилита ifconfig
как видно из результата выполнения команды whereis утилита ifconfig находится /sbin/ifconfig
вводите полный путь до утилиты ifconfig, тогда надпись command not found появляться не будет и команда будет выполняться


Посмотрим что получилось:

[root@freebsd ~]# ifconfig -a

em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
           ether 00:02:a5:4e:92:48
           inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255
           media: Ethernet autoselect (100baseTX <full-duplex>)
           status: active
em1: flags=8802<UP,BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
           ether 00:02:a5:4e:92:49
           inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
           media: Ethernet autoselect (100baseTX <full-duplex>)
           status: active

Рассмотрим что все это значит :

em0 и em1 — имена сетевых интерфейсов
флаг UP — означает что сетевая карта включена, если этого флага не будет, то пакеты не будут приниматься на этом интерфейсе (для включения воспользуйтесь командой: ifconfig ИМЯ_ИНТЕРФЕЙСА up)
ether — это mac-адрес этой сетевой карты
inet — назначенный IP-адрес для этого интерфейса и broadcast адрес для этой подсети
media — информация о скорости и дуплексе интерфейса
status — текущий статус интерфейса. Если status: no carrier, то это означает, что на сетевой карте нет линка.

Сохраним настройки, чтобы IP-адреса назначались интерфейсам после ребута сервера, для этого необходимо добавить в файл /etc/rc.conf следующие строчки:

ifconfig_em0=»inet 192.168.1.1 netmask 255.255.255.0″
ifconfig_em1=»inet 192.168.0.1 netmask 255.255.255.0″

Если на сервере вы используете firewall, например ipfw, то добавим правила разрешающие проход пакетов из одной сети в другую:

ipfw add 100 allow ip from 192.168.1.1/24 to 192.168.0.1/24
ipfw add 110 allow ip from 192.168.1.0/24 to 192.168.1.1/24

Теперь настройте клиентские компьютеры:

  • Выставить IP-адрес из нужной подсети: 192.168.1.ХХХ или 192.168.0.ХХХ
  • Выставить маску подсети 255.255.255.0
  • Выставить шлюз по умолчанию: для подсети 192.168.1.ХХХ это 192.168.1.1, а для подсети 192.168.0.ХХХ это 192.168.0.1 (именно эти IP-адреса на интерфейсах нашего FreeBSD сервера)

Наступило время проверить есть ли связь сервера и клиентов. Для этого возьмем заведомо рабочий клиентский компьютер из 2-х сетей, например это будут компьютеры с IP-адресами:

  • 192.168.1.11
  • 192.168.0.15

Воспользуемся утилитой ping на сервере:

[root@freebsd ~]# ping 192.168.1.11

Если результат будет таким:

PING 192.168.1.11 (192.168.1.11): 56 data bytes
64 bytes from 192.168.1.11: icmp_seq=0 ttl=64 time=0.466 ms
64 bytes from 192.168.1.11: icmp_seq=1 ttl=64 time=0.238 ms
64 bytes from 192.168.1.11: icmp_seq=2 ttl=64 time=0.272 ms
^C
— 192.168.1.11 ping statistics —
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.238/0.325/0.466/0.100 ms

Значит все хорошо и связь между сервером и клиентом есть. Проделайте тоже самое с 192.168.0.15.

Если результат ping отрицательный, то убедитесь что на клиентском компьютере правильно выставлен IP-адрес и маска подсети, а так же наличие линка на сетевой карте.

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

Так же воспользуемся утилитой ping, но уже на компьютере с IP-адресом 192.168.1.11:

ping 192.168.0.15

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

Если ответа нет, то воспользуемся утилитой tracert (для Windows) или traceroute (для FreeBSD):

tracert 192.168.0.15

Если сразу «идут звездочки»:

1 * * *

То проверьте правильность выставление шлюза по умолчанию.

Если трасса выглядит так:

1 192.168.1.1 (192.168.1.1) 0.421 ms 0.447 ms 0.485 ms
2 * * *

То пакет доходит до сервера, убедитесь что firewall сервера не блокирует пакеты и что клиентский компьютер с IP-адресом 192.168.0.15 правильно настроен и «видит» сервер (проверьте IP-адрес, маску подсети, шлюз по умолчанию и наличие ping до сервера)

Вы все проверили, но по прежнему ничего не работает ? Воспользуемся утилитой tcpdump на сервере, которая покажет пакеты проходящие через интерфейсы сервера:

[root@freebsd ~]# tcpdump -ni em0
и
[root@freebsd ~]# tcpdump -ni em1

Запустите пинг с одного клиентского компьютера из одной подсети на другой клиентский компьютер в другой подсети (как мы делали в примерах выше) и смотрите в вывод команды tcpdump на сервере, который будет примерно таким:

[root@freebsd ~]# tcpdump -ni em0

12:17:23.398376 IP 192.168.1.11 > 192.168.0.15: ICMP echo request, id 49222, seq 0, length 64
12:17:24.399906 IP 192.168.1.11 > 192.168.0.15: ICMP echo request, id 49222, seq 1, length 64

Т.е. компьютер 192.168.1.11 посылает пакет ICMP echo request до компьютера 192.168.0.15, но ответов мы не видим. Посмотри передает ли сервер эти пакеты на другую сетевую карту:

[root@freebsd ~]# tcpdump -ni em1

12:21:18.167017 IP 192.168.1.11 > 192.168.0.15: ICMP echo request, id 50246, seq 4, length 64
12:21:19.168022 IP 192.168.1.11 > 192.168.0.15: ICMP echo request, id 50246, seq 5, length 64

Видим, что запросы передаются на другой интерфейс сервера, но ответов по прежнему нет. Проверьте настройки компьютера 192.168.0.15 и отсутствие у него проблем с физическим подключением к сети.

Когда все работает вывод будет таким:

12:21:17.165998 IP 192.168.1.11 > 192.168.0.15: ICMP echo request, id 50246, seq 3, length 64
12:21:17.171199 IP 192.168.0.15 > 192.168.1.11: ICMP echo reply, id 50246, seq 3, length 64
12:21:18.167017 IP 192.168.1.11 > 192.168.0.15: ICMP echo request, id 50246, seq 4, length 64
12:21:18.171353 IP 192.168.0.15 > 192.168.1.11: ICMP echo reply, id 50246, seq 4, length 64

Мы видим стандартый вывод «запрос-ответ», когда на пакет ICMP echo request приходит ответ в виде пакета ICMP echo reply

Ссылки:

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор: Николаев Дмитрий (virus (at) subnets.ru)
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 7, среднее: 4,43 из 5)
Загрузка...
Отправить на почту Отправить на почту
    Не найдено