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

Архив за Ноябрь, 2009

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

Попала к нам материнская плата INTEL: Intel® Server Board S3420GP

На «мамке» две встроенные сетевые карты:

  • Integrated LAN Embedded Intel® 82574L Gigabit Ethernet Controller
  • Integrated LAN Embedded Intel® 82578DM Gigabit Ethernet Controller

Установили FreeBSD 7.2 (в нашем случае это RELEASE), но из сетевых карт FreeBSD сервер видит только одну и это 82574L, а вот 82578DM не видит…

Смотрим вывод команды и ищем класс «network»:

pciconf -lv

none@pci0:0:25:0:        class=0x020000 card=0x34ec8086 chip=0x10ef8086 rev=0x05 hdr=0x00
    vendor     = 'Intel Corporation'
    class      = network
    subclass   = ethernet

em0@pci0:2:0:0: class=0x020000 card=0x34ec8086 chip=0x10d38086 rev=0x00 hdr=0x00
    vendor     = 'Intel Corporation'
    class      = network
    subclass   = ethernet

Как говорится что и требовалось доказать…. Она есть, но стандартные драйвера от em не подошли, вот она и «висит» как none 🙁

Что с этим делать ? Ответ один: искать дрова.
«Гугл в руки» и вперед ! Дрова найдены. Вот они: em-6.9.20.tar.gz.

Теперь можно приступать к установке драйверов на FreeBSD сервер.

Распаковываем архив:

tar -xzf em-6.9.20.tar.gz

Переходим в папку с исходками:

cd em-6.9.20/src

Собираем это дело:
make

После окончания сборки в папке появится файл if_em.ko, вот он то нам и нужен.

Переносим его в /boot/modules:
mv if_em.ko /boot/modules

Далее ставим его на загрузку при буте сервера, добавляем строчку в /boot/loader.conf:

echo ‘if_em_load=»YES»‘ >> /boot/loader.conf

Затем, чтобы при пересборке ядра родной драйвер em не собирался добавим в /etc/make.conf:

echo ‘WITHOUT_MODULES=em’ >> /etc/make.conf

Теперь нужно пересобрать ядро без поддержки em, т.е. убрать или закоментарить в ядре строчку:

device         em              # Intel PRO/1000 Gigabit Ethernet Family

После пересборки ядра делаем серверу перезагрузку:

reboot

Сервер поднялся, посмотрим же снова:

pciconf -lv

em0@pci0:0:25:0:        class=0x020000 card=0x34ec8086 chip=0x10ef8086 rev=0x05 hdr=0x00
    vendor     = 'Intel Corporation'
    class      = network
    subclass   = ethernet

em1@pci0:2:0:0: class=0x020000 card=0x34ec8086 chip=0x10d38086 rev=0x00 hdr=0x00
    vendor     = 'Intel Corporation'
    class      = network
    subclass   = ethernet

А вот и наша вторая сетевая карта !

Теперь 82578DM это em0, а 82574L это em1.

Посмотрим вывод ifconfig:

ifconfig -a

em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST>metric 0 mtu 1500
        options=399b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,WOL_UCAST,WOL_MCAST,WOL_MAGIC>
        ether 00:15:17:ae:0c:d9
        media: Ethernet autoselect (1000baseTX )
        status: active
em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=399b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,WOL_UCAST,WOL_MCAST,WOL_MAGIC>
        ether 00:15:17:ae:0c:d8
        media: Ethernet autoselect (1000baseTX )
        status: active

Все, можно начинать юзание сервера и в хвост и в гриву 🙂

Ссылки:

Драйвер для em от Yandex: http://people.yandex-team.ru/~wawa/

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

Автор: Панфилов Алексей (lehis (at) subnets.ru)

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

Получил очередное письмо с вопросом о демоне pppoed.

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

Как известно на FreeBSD одну и ту же задачу можно решить несколькими способами.

Задача поднять PPPoE сервер никак не отрицает данного утверждения.

Это можно сделать как и на демоне mpd5, который находится в портах  /usr/ports/net/mpd5 и который придется собрать и установить , так и на уже встроенном во FreeBSD демоне pppoed:

pppoed — handle incoming PPP over Ethernet connections

который нужно только настроить и все.

Располагается файл pppoed тут:  /usr/libexec/pppoed

Упреждая вопросы:

  • Что такое PPPoE ?
  • Как работает протокол PPPoE ?
  • и т.д. и т.п.

Отвечаю: Читайте статью «PPPoE :: Теория вопроса»

Итак приступим к настройке.

1. Конфиг файлы

Располагаются в папке  /etc/ppp/

  • ppp.conf
  • ppp.secret

вот два основных файла, дальше я расскажу ещё о нескольких.

Правим файл ppp.conf, простой пример:

default:
  set log Phase tun Chat Command Warning Error Alert Connect ipcp LQM

pppoe:
  allow mode direct
  set cd 5
  enable lqr echo chap chap81 MSCHAPv2 mssfixup
  disable pap deflate pred1 acfcomp protocomp
  deny deflate pred1 acfcomp
  set timeout 0
  set lqrperiod 10
  set echoperiod 10
  set mtu 1492
  set mru 1492
  set dns 10.1.1.1 10.1.2.254
  accept lqr dns

Внимание: Все строчки после «метка:» (label) начинаются с пробела ! (в данном случае метки (labels): default, pppoe)

Данного конфига вполне достаточно, чтобы принимать подключения.

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

man ppp

Смотрите раздел: «PPP COMMAND LIST»

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

Правим файл  ppp.secret:

user1 passwd1 10.255.254.158 * *

user2 passwd2 10.255.254.248 * *

и так далее. Первая «колонка» — логин, вторая — пароль, третья — IP-адрес, который будет выдан пользователю.

Если необходимо указать диапазон IP-адресов, то сделать это можно указав его в «колонке» IP-адресов, например гостевой вход:

guest guest 10.255.255.129-10.255.255.158 * *

2. Запуск

Синтаксис:

pppoed [-Fd] [-P pidfile] [-a name] [-e exec | -l label] [-n ngdebug] [-p provider] interface

Обеспечим запись логов, куда же без них:

Правим файл /etc/syslog.conf и добавляем в него:

!pppoed
*.*                             /var/log/pppoed.log

Создаем файл /var/log/pppoed.log:

touch  /var/log/pppoed.log

Перезапускаем демон syslogd чтобы применить изменения:

killall -1 syslogd

Готовимся к запуску.

Допустим, что:

  • наш PPPoE сервер имеет имя: vpn-01
  • имя нашей службы (Service Name): mycoolprovider
  • сетевой интерфейс для приема подключений: em1

Таким образом команда для запуска демона будет такой:

/usr/libexec/pppoed -a vpn-01 -p mycoolprovider -l pppoe em1

Обратите внимание что -l pppoe это метка из нашего ppp.conf.

Имя vpn-01 (с которым вы запустили демон, указано после ключа «-a») внесите в ваш файл  /etc/hosts, т.к. это влияет на то какой IP-адрес сервера будет отображаться у пользователя, пример:

127.0.0.1           localhost localhost.mydomain.ru
1.1.1.1             vpn-01 vpn-01.mydomain.ru

Таким образом когда пользователь (например Windows), после установки соединения, нажмет «свойства соединения» то в колонке «IP-адрес» сервера он будет видеть именно этот адрес 1.1.1.1

Каким вы сделаете IP-адрес сервера абсолютно по барабану, т.е. его физически может и не присутствовать на этом сервере, т.к. это P2P соединение между сервером и клиентом и пакеты все равно дойдут до конца туннеля.

После подключения клиента к серверу, вы увидите, что на сервере поднимется новый интерфейс и называться он будет tunX (где Х это число от нуля и далее по кол-ву туннелей):

tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1492
        inet 1.1.1.1 --> 10.255.254.158 netmask 0xffffffff
        Opened by PID 66176

Если пользователь не может подключиться, то смотрите в лог /var/log/pppoed.log, например возможно, что пользователь не правильно написал логин или пароль.

Если в логах о нем вы ничего не нашли, то «послушайте» что приходит от MAC-адреса пользователя (допустим он 00:14:2a:b6:92:2c) на сетевом интерфейсе (в нашем примере это em1 c МАС-адресом 00:15:17:61:d0:a9):

tcpdump -ni em1 ether host 00:14:2a:b6:92:2c

Возможно, что пользователь не правильно указал имя службы (Service Name), какое имя он указал вы сразу увидите в tcpdump`е.

Запрос от пользователя:

14:15:09.379885 00:14:2a:b6:92:2c > ff:ff:ff:ff:ff:ff, ethertype PPPoE D (0x8863), length 60: PPPoE PADI [Service-Name "coolprovider"] [Host-Uniq 0x0100000001000000]

Видим что пользователь указал в кач-ве имени службы (Service Name): coolprovider

Если оно не соответствует тому, что указано при запуске демона pppoed (ключ -p) на сервере, а в нашем примере оно не соответствует, то сервер PPPoE ничего не ответит данному пользователю и соответственно подключения не состоится.

Существует возможность «избавиться» от имени службы (Service Name) вообще. Точнее будет сказать, что будет абсолютно все равно что пользователь указал в кач-ве имени службы (Service Name).

Для этого нужно при запуске демона в кач-ве имени службы (Service Name) указать символ *:

/usr/libexec/pppoed -a vpn-01 -p «*» -l pppoe em1

Если сервер запущен с «*», то вернувшись к примеру выше, в tcpdump`е мы увидим следующую картину:

Запрос пользователя  -> «ищу PPPoE службу coolprovider«:

14:15:09.379885 00:14:2a:b6:92:2c > ff:ff:ff:ff:ff:ff, ethertype PPPoE D (0x8863), length 60: PPPoE PADI [Service-Name "coolprovider"] [Host-Uniq 0x0100000001000000]

Ответ сервера пользователю -> «я vpn-01 готов принять запрос на данную службу, т.к. мне все равно, я принимаю любой service name«:

14:15:09.383270 00:15:17:61:d0:a9 > 00:14:2a:b6:92:2c, ethertype PPPoE D (0x8863), length 58: PPPoE PADO [AC-Name "vpn-01"] [Service-Name] [Service-Name "*"] [Host-Uniq 0x0100000001000000] [AC-Cookie 0x004606CB]

Надеюсь теперь вам с подключением все понятно.

Далее рассмотрим ещё два конфигурационных файла:

  • ppp.linkup
  • ppp.linkdown

Как и следует из названия файлов их содержимое читается при каждом подключении (поднятие линка (интерфейса tunX)) и при отключении (падение линка (интерфейса tunX))

Для чего они вам могут пригодится ? Область применения этих файлов очень широка. Начиная от сбора какой либо статистики, заканчивая выполнением какой либо команды на сервере.

В мануале вы сможете найти названия переменных, которые можно использовать в этих файлах.

Приведу примеры содержимого файлов  ppp.linkup и ppp.linkdown.

Файл ppp.linkup:

pppoe:
  ! sh -c "/etc/ppp/up.pl USER HISADDR &"

Файл ppp.linkdown:

pppoe:
  ! sh -c "/etc/ppp/down.pl USER HISADDR UPTIME"

Как вы видите, все опять начинается со строки название метки (label), которая идентифицирует метку в ppp.conf из которой и идет поднятие соединения.

Далее идет строка с выполнением скрипта PERL и передача ему некоторых параметров.

/etc/ppp/up.pl и /etc/ppp/down.pl — скрипты на PERL

USER, HISADDR, UPTIME — параметры

USER — это логин указанный пользователем при подключении

HISADDR — IP-адрес присвоенный пользователю

UPTIME — время, которое интерфейс провел online (был подключен)

Соответственно переданные PERL скрипту параметры помещаются в массив @ARGV. Первый переданный параметр будет @ARGV[0], второй @ARGV[1] и т.д.

Дальше вы в скрипте можете делать с этими данными что угодно.

Вот список всех возможных параметров (все они перечислены в мануале):

         AUTHNAME         This is replaced with the local authname value.  See
                          the ``set authname'' command below.
         COMPILATIONDATE  This is replaced with the date on which ppp was compiled.
         DNS0 & DNS1      These are replaced with the primary and secondary
                          nameserver IP numbers.  If nameservers are negotiated by IPCP, the values of these macros will change.
         ENDDISC          This is replaced with the local endpoint discriminator value.  See the ``set enddisc'' command below.
         HISADDR          This is replaced with the peers IP number.
         HISADDR6         This is replaced with the peers IPv6 number.
         INTERFACE        This is replaced with the name of the interface that is in use.
         IPOCTETSIN       This is replaced with the number of IP bytes received since the connection was established.
         IPOCTETSOUT      This is replaced with the number of IP bytes sent since the connection was established.
         IPPACKETSIN      This is replaced with the number of IP packets received since the connection was established.
         IPPACKETSOUT     This is replaced with the number of IP packets sent since the connection was established.
         IPV6OCTETSIN     This is replaced with the number of IPv6 bytes received since the connection was established.
         IPV6OCTETSOUT    This is replaced with the number of IPv6 bytes sent since the connection was established.
         IPV6PACKETSIN    This is replaced with the number of IPv6 packets received since the connection was established.
         IPV6PACKETSOUT   This is replaced with the number of IPv6 packets sent since the connection was established.
         LABEL            This is replaced with the last label name used.  A label may be specified on the ppp command line, via
                          the ``load'' or ``dial'' commands and in the ppp.secret file.
         MYADDR           This is replaced with the IP number assigned to the local interface.
         MYADDR6          This is replaced with the IPv6 number assigned to the local interface.
         OCTETSIN         This is replaced with the number of bytes received since the connection was established.
         OCTETSOUT        This is replaced with the number of bytes sent since the connection was established.
         PACKETSIN        This is replaced with the number of packets received since the connection was established.
         PACKETSOUT       This is replaced with the number of packets sent since the connection was established.
         PEER_ENDDISC     This is replaced with the value of the peers endpoint discriminator.
         PROCESSID        This is replaced with the current process id.
         SOCKNAME         This is replaced with the name of the diagnostic socket.
         UPTIME           This is replaced with the bundle uptime in HH:MM:SS format.
         USER             This is replaced with the username that has been authenticated with PAP or CHAP.  Normally, this
                          variable is assigned only in -direct mode.  This value is available irrespective of whether utmp logging is enabled.
         VERSION          This is replaced with the current version number of ppp.

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

  • Подведем итог. Итак с помощью файлов  ppp.linkup и ppp.linkdown вы можете анализировать параметры подключения и на их основе выполнять какие либо действия:

    добавлять статичный роутинг

  • запускать какой либо процесс (например natd)
  • добавлять правила в firewall
  • и т.д. и т.п.

Покажу применение ppp.linkup на одном жизненном примере, с которым сам столкнулся, а именно баг с роутингом.

( freebsd 7.2 routing problem, freebsd ppppoe routing problem, wrong route set by ppppoed)

Если у вас установлена FreeBSD версия 7.2-RELEASE (в этой версии баг точно есть) вы сможете заметить такую штуку, что после подключения пользователей к серверу по PPPoE и соответственно поднятия интерфейсов tunX у некоторых клиентов все равно отсутствует соединение с сетью (или доступ в Интернет) несмотря на то, что туннель успешно устанавливается и в логах нет никаких ошибок. Вы можете подумать, что вы что-то не так настроили, но это не так. Рассмотрим ситуацию подробнее.

Допустим есть 3 клиента, они подключаются к серверу и он выдает им IP-адреса:

  • 10.255.255.130
  • 10.255.255.131
  • 10.255.255.132

На сервере их туннели присутствуют, убедимся в этом выполнив команду:

ifconfig -a

что мы видим:

tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1492
        inet 1.1.1.1 --> 10.255.255.130 netmask 0xffffffff
        Opened by PID 4238
tun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1492
        inet 1.1.1.1 --> 10.255.255.131 netmask 0xffffffff
        Opened by PID 4377
tun2: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1492
        inet 1.1.1.1 --> 10.255.255.132 netmask 0xffffffff
        Opened by PID 6674

Вроде бы все хорошо, но пользователи с IP-адресами 10.255.255.131 и 10.255.255.132 жалуются, что у них ничего не работает. Почему ? А вот почему:

Смотрим в таблицу роутинга (выполняем команду netstat) и наблюдаем примерно такую картину:

netstat -rn | grep 10.255.255.131

Destination       Gateway            Flags    Refs      Use  Netif Expire
10.255.255.131    tun0               US          0   0       tun0

netstat -rn | grep 10.255.255.132

Destination       Gateway            Flags    Refs      Use  Netif Expire
10.255.255.132    tun0               US          0   0       tun0

Обратите внимание на колонки Gateway и Netif,  если вы были внимательны, то сразу заметите разницу в «показаниях» вывода команды ifconfig и netstat.

А именно, что по ifconfig IP-адрес 10.255.255.131 находится за интерфейсом tun1, а 10.255.255.132 за интерфейсом tun2, но вывод netstat утверждает, что все эти адреса находятся за интерфейсом tun0!

А за tun0 должен быть только один IP-адрес и это 10.255.255.130 !

netstat -rn | grep tun0

Destination       Gateway            Flags    Refs      Use  Netif Expire
10.255.255.130    tun0               US          0   0       tun0
10.255.255.131    tun0               US          0   0       tun0
10.255.255.132    tun0               US          0   0       tun0

Вот это и есть «корень» проблемы. Т.к. получается исходя из таблицы роутинга все пакеты для IP-адресов 10.255.255.131 и 10.255.255.132 отправляются в туннель tun0, а самт то IP-адреса надохятся за tun1 и tun2, поэтому то у этих клиентов ничего и не работает.

Как решить эту проблему ?

Опять же двумя способами:

  • порыться в инете на тему патча (я встречал где то при поиске через гугл)
  • или воспользоваться конфигурационным файлом ppp.linkup

Я выбрал второй вариант, т.к. уже пользуюсь возможности файла ppp.linkup. Способ моего решения такой:

в файл /etc/ppp/ppp.linkup пишем:

pppoe:
  ! sh -c "/etc/ppp/fix_route.sh INTERFACE &"

в моем случае полная «версия» файла /etc/ppp/ppp.linkup выглядит так:

pppoe:
  ! sh -c "/etc/ppp/up.pl USER HISADDR &"
  ! sh -c "/etc/ppp/fix_route.sh INTERFACE &"

содержимое файла /etc/ppp/fix_route.sh:

#!/bin/sh
sleep 3

`/etc/ppp/kill_route_tun0.pl`
iface=${1}
ip=`/sbin/ifconfig $iface | /usr/bin/grep inet | /usr/bin/cut -f 4 -d " " -`
/sbin/route delete $ip
/sbin/route add $ip/32 -iface $iface

Что делает fix_route.sh:

  • запускает PERL скрипт kill_route_tun0.pl
  • присваевает переменной iface переданный скрипту параметр имя интерфейса на который подключен клиент
  • узнает IP-адрес присвоенный клиенту на интерфейсе (переменная ip)
  • удаляет из таблицы роутинга IP-адрес клиента
  • добавляет в таблицу роутинга IP-адрес клиента (ip) через интерфейс (iface)

Посмотрим скрипт /etc/ppp/kill_route_tun0.pl:

#!/usr/bin/perl

my $tun="tun0";
my $ip;
my $trash;
open TUN, "/sbin/ifconfig -a | /usr/bin/grep -A2 '\\\(^".$tun.":\\\)' |" or die "Can't find tunnel";
while (){
        if (/^\s+inet\s+\d+\.\d+\.\d+\.\d+\s+\-\-\>\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+netmask\s+0xffffffff\s+\n$/){
                $ip=$1;
        }
}
close (TUN);

open NET, "/usr/bin/netstat -rn | /usr/bin/grep $tun |" or die "Can't open netstat";
while (){
        if (/^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/){
            $trash=$1;
            if ($ip ne $trash){
#               print "tun0 has $ip but trash route for $trash found on it... delete...\n";
                `/sbin/route delete $trash`;
            }
        }
}
close (NET);

Что делает kill_route_tun0.pl:

  • смотрит вывод команды и запоминает какой IP-адрес висит на интерфейсе tun0
  • смотрит вывод команды netstat -rn | grep tun0 и запоминает все строки роутинга через интерфейс tun0
  • если IP-адрес на tun0 не совпадает с адресом полученным из таблицы роутинга, то такой маршрут (строка с роутингом) убивается

Таким образом мы избавляемся от этого бага и у каждого пользователя в таблице роутинга появляется правильная строчка:

netstat -rn | grep 10.255.255.130

Destination       Gateway            Flags    Refs      Use  Netif Expire
10.255.255.130/32    tun0               US          0   0       tun0

netstat -rn | grep 10.255.255.131

Destination       Gateway            Flags    Refs      Use  Netif Expire
10.255.255.131/32    tun1               US          0   0       tun1

netstat -rn | grep 10.255.255.132

Destination       Gateway            Flags    Refs      Use  Netif Expire
10.255.255.132/32    tun2               US          0   0       tun2

После того как вы создали скрипты fix_route.sh и kill_route_tun0.pl на забудьте сделать их исполняемыми:

chmod a+x fix_route.sh

chmod a+x kill_route_tun0.pl

Вот такой вот пример области применения файла ppp.linkup

Что ещё можно рассказать.

I. Патч (patch) для демона pppoed

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

Для того, что бы применить патч, в системе должны присутствовать исходные коды (sources), т.е. папка /usr/src/ не должна быть пустой.

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

sysinstall

После запуска передвигаемся по меню:

Configure Do post-install configuration of FreeBSD

Distributions Install additional distribution sets

Далее отмечаем «крестиком» (жмем пробел) на пункте:

[Х] src Sources for everything

Затем жмем:

All Select all of the below

и два раза

<<< X Exit Exit this menu (returning to previous)

Потом вам предложат выбрать откуда брать выбранное в меню, соответственно выберите нужное, например:

1 CD/DVD Install from a FreeBSD CD/DVD

или

2 FTP Install from an FTP server

или любой другой подходящий вам вариант

и соответственно ждем пока исходные коды перенесутся на HDD

Скачать патч можно тут: http://subnets.ru/saved/pppoed_patch.tar.gz

Распакуйте архив в папку /usr/local/sbin, получится /usr/local/sbin/pppoed

В /usr/local/sbin/pppoed находится файл patch.sh, запустив который вы тем самым пропатчите демон pppoed

Либо после рапаковки архива вы сами можете последовательно выполнить команды:

cd /usr/local/sbin/pppoed

mv /usr/libexec/pppoed /usr/libexec/pppoed_orig

mv /usr/src/libexec/pppoed/pppoed.c /usr/src/libexec/pppoed/pppoed.c_orig

cp /usr/local/sbin/pppoed/pppoed.c /usr/src/libexec/pppoed/

cd /usr/src/libexec/pppoed/

make

make install

make clean

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

Например я выставляю задержку флуда на 20 секунд:

/usr/libexec/pppoed -a vpn-01 -p * -l pppoe -c 20 em1

II. Обламываем домашние роутеры 🙂

Многие провайдеры озадачиваются вопросом как бы сделать так, чтобы пользователь не «раздавал» Интернет соседям через домашний роутер.

Т.е. подключается один пользователь, который покупает себе домашний роутер (например тот же Dlink) и «раздает» подключение к Интернету своим соседям.

В процессе пользования демоном pppoed мной случайно была обнаружена следующая фишка.

Если при запуске pppoed демона вы в ключе «-a» указали имя, но в файле /etc/hosts не опишите соответствие этого имени к IP-адресу, то в кач-ве IP-адреса сервера у клиента будет IP-адрес 127.0.0.1 (localhost).

Не поняли ? Покажу на примере.

запускаем демон pppoed с именем сервера vpn-01: /usr/libexec/pppoed -a vpn-01 -p * -l pppoe -c 20 em1

пример файла /etc/hosts:

127.0.0.1       localhost localhost.mydomain.ru
10.0.0.1        my-cool-gw my-cool-gw.mydomain.ru

Иными словами в /etc/hosts может содержаться сколько угодно хостов главное, чтобы там не было соответствия имени vpn-01 (с которым вы запустили демон, указано после ключа «-a») к какому либо IP-адресу.

После установки подлючения по PPPoE к серверу мы увидим на сервере такую картину, смотрим вывод команды:

ifconfig -a

tun171: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1492
        inet 127.0.0.1 --> 10.255.255.132 netmask 0xffffffff
        Opened by PID 11017

127.0.0.1 — адрес сервера

10.255.255.132 — адрес выданный клиенту

Если подключается обычный компьютер, то он нормально «проглатывает» IP-адрес 127.0.0.1 в кач-ве IP-адреса сервера, а вот если это домашний роутер…. то у роутера сносит крышу и он отказывается выполнять свою прямую работу, а именно «раздавать» Интернет подключение :).

Сказать что все роутеры подвержены этому багу-фиче я не могу, как и назвать точные модели роутеров, но точно могу сказать что многие. Почему я так уверен ?

Ну как я говорил выше я обнаружил баг случайно, когда однажды, мой клиент попросил меня настроить PPPoE сервер для общежития, чтобы там предоставлять услуги доступа в Интернет.

Я настроил, но вот в файлик hosts забыл внести имя 🙂 Ну с кем не бывает.

Так вот посыпались звонки из общежития на тему того, что Интернет не работает. Все звонившие «сидели» за домашними роутерами. Вот так я и обнаружил эту баг-фичу 🙂

Может кому нить и пригодится данная информация 😉

III. Как подключить свой комп под FreeBSD к PPPoE серверу ?

Ну и напоследок рассморим как самому, с компа-клиента под ОС FreeBSD установить PPPoE туннель до сервера.

Делается это с помощью того же ppp.conf, добавим «метку» (label) pppoe-client:

pppoe-client:
  set log Phase Chat LCP IPCP CCP tun command

  set device PPPoE:IFACE:SERVICE-NAME
  set authname login
  set authkey password
  enable lqr

  set dial
  set login
  set ifaddr 0.0.0.0/0 0.0.0.0/0
  add default HISADDR

Помним, что все строчки после «метка:» (label) начинаются с пробела! (в данном случае «метка» это pppoe-client)

Вам необходимо заменить IFACE на Ваше имя интерфейса в сторону провайдера (например, rl0), а SERVICE-NAME заменить на service-name вашего провайдера

Запуск подключения:

ppp -ddial pppoe-client

Остановка подключения:

killall -9 ppp

ifconfig delete tun0

Для запуска подключения при загрузке необходимо добавить в /etc/rc.conf:

ppp_enable="YES"
ppp_mode="ddial"
ppp_profile="pppoe"
ppp_nat="NO"
ppp_user="root"

Так же на эту тему можно почитать хендбук: http://www.freebsd.org/doc/ru/books/handbook/pppoe.html

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

Автор: Николаев Дмитрий (virus (at) subnets.ru)

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

Дано:

  • маршрутизатор Cisco 2801, IOS 12.4(13)
  • приходит два канала Интернет от двух разных ISP

Необходимо организовать резервирование Интернет канала. Если живы оба провайдера, то выпускаем через ISP#1, соответственно, если ISP#1 упал, выходим через IPS#2.

Схема:

схема #1

Затем появилась ещё одна задача:

  • Выпустить в Интернет офис №2 и учесть резервирование

Новая схема:

схема #2

Конфигурация Cisco 1841:

!
track 123 ip sla 1 reachability
!
interface FastEthernet0/0
description ISP#1
ip address 85.0.0.242 255.255.255.248
ip nat outside
!
interface FastEthernet0/1
description ISP#2
ip address 84.0.0.242 255.255.255.248
ip nat outside
!
interface FastEthernet0/3/0
description OFFICE#1
switchport access vlan 10
!
interface FastEthernet0/3/1
switchport access vlan 20
!
interface FastEthernet0/3/2
switchport access vlan 30
!
!
interface Vlan10
description OFFICE#1
ip address 192.168.168.29 255.255.255.0
ip nat inside
!
interface Vlan20
description Link-to-Office#2-primary
ip address 192.168.0.2 255.255.255.248
ip nat inside
!
interface Vlan30
description Link-to-Office#2-backup
ip address 10.10.10.2 255.255.255.248
ip nat inside
!
ip local policy route-map LocalPolicy
ip route 0.0.0.0 0.0.0.0 85.0.0.241 track 123
ip route 0.0.0.0 0.0.0.0 84.0.0.241 254
!
ip nat inside source route-map ISP#1 interface FastEthernet0/0 overload
ip nat inside source route-map ISP#2 interface FastEthernet0/1 overload
!
ip sla 1
icmp-echo 85.0.0.241 source-interface FastEthernet0/0
timeout 1000
threshold 40
frequency 3
ip sla schedule 1 life forever start-time now
!
ip access-list extended PingISP#1
permit icmp host 85.0.0.242 host 85.0.0.241
!
access-list 104 remark OFFICE#1
access-list 104 permit ip 192.168.168.0 0.0.0.255 any
access-list 104 permit ip host 192.168.0.2 any
access-list 104 permit ip host 10.10.10.2 any
access-list 104 deny ip any any
!
route-map ISP#1 permit 10
match ip address 104
match interface FastEthernet0/0
!
route-map ISP#2 permit 10
match ip address 104
match interface FastEthernet0/1
!
route-map LocalPolicy permit 10
match ip address PingISP#1
set ip next-hop 85.0.0.241
set interface FastEthernet0/0
!

Конфигирация Cisco 870:

!
ip sla 1
icmp-echo 192.168.0.2 source-ip 192.168.0.4
timeout 1000
threshold 40
frequency 3
ip sla schedule 1 life forever start-time now
!
track 123 rtr 1 reachability
!
interface FastEthernet0
description Link-to-Office#1-primary
switchport access vlan 20
!
interface FastEthernet1
description Link-to-Office#1-backup
switchport access vlan 30
!
interface FastEthernet3
switchport access vlan 10
!
interface Vlan10
description OFFICE#2
ip address 192.168.123.29 255.255.255.0
!
interface Vlan20
ip address 192.168.0.4 255.255.255.248
!
interface Vlan30
ip address 10.10.10.4 255.255.255.248
!
ip route 0.0.0.0 0.0.0.0 192.168.0.2 track 123
ip route 0.0.0.0 0.0.0.0 10.10.10.2 254
!

Обсуждалось тут: subnets.ru/forum

Автор:  msergey

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

Иногда требуется читать и писать на раздел HDD, который форматирован под NTFS.

Что потребовалось для решения данной задачи:

1. Установить

  • /usr/ports/sysutils/fusefs-ntfs
  • /usr/ports/sysutils/ntfsprogs

2. Добавить

а) в /etc/rc.conf

fusefs_enable=»YES»

б) в /etc/sysctl.conf

sysctl vfs.usermount=1

3. Запустить fusefs

/usr/local/etc/rc.d/fusefs start

4. Смонтировать диск

ntfs-3g /dev/da1s1 /mnt/usb_hdd

для монтирования после ребута сервера добавим в /etc/fstab

/dev/da1s1 /mnt/usb_hdd ntfs-3g rw 0 0

так пока не пробовал, т.к. сервер удаленный и есть сомнение что будет работать.

Посему поставил монтирование через файл /etc/rc.local строчкой:

/usr/local/bin/ntfs-3g /dev/da1s1 /mnt/usb_hdd

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

Автор:  madmax

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

Коммутатор и Access Lists

Для фильтрации трафика коммутатор может использовать следующие типы ACL:

  • Router ACL
  • Port ACL
  • VLAN ACL
  • MAC ACL

Router ACL

Как и подразумевается в названии, Router ACL подобны на IOS ACL и используются для фильтрации сетевого трафика на SVI (интерфейсы SVI это Layer 3 на VLAN, физические Layer 3 интерфейсы и Layer 3 интерфейсы EtherChannel). Поддерживаются как стандартные, так и расширенные ACL. Для получения более детальной информации по Router ACL, обратитесь к соответствующей документации.

Port ACL

Port ACL подобны Router ACL, но работают на физических интерфейсах и интерфейсах Layer 2 коммутатора. Port ACL поддерживают фильтрацию только входящего трафика. Port ACL могут быть расширенного, стандартного и MAC-extended типа.

Обработка Port ACL подобна Router ACL: коммутатор проверяет ACL, назначенный данному интерфейсу и разрешает или блокирует пакет.

Когда ACL наложен на транковый порт, проверяется трафик всех проходящих через транк VLAN-ов — как данные, так и голос.

Основная прелесть Port ACL состоит в том, что может фильтроваться как IP трафик (используя IP access lists) так и non-IP трафик (используя MAC access list).

Внимание: Port ACLs не поддерживается на интерфейсах EtherChannel.

VLAN ACL (VACL)

VLAN ACL (так же известные как VLAN map) осуществляют пакетную фильтрацию всех типов трафика внутри VLAN или входящих/выходящих из него. В отличие от Router ACL, VACL не определяет направление трафика (input или output). Все пакеты находящиеся в VLAN (маршрутизируемые или внутренние) проверяются VACL. Для пакетной фильтрации в зависимости от направления трафика есть возможность использовать комбинацию VACL и Private VLAN.

VACL обрабатываются на аппаратном уровне, не оказывая влияния на производительность коммутатора. Производительность так же не зависит от объема VACL. Поэтому они упоминаются также как wire-speed ACL.

VACL на порту Layer 2

На рисунке ниже показана работа VACL на briged интерфейсе для Host A в VLAN 5 передающего данные на Host B в VLAN 10.

ns080402

VACL маршрутизируемом порту

На рисунке ниже показана работа IOS ACL и VACL на маршрутизируемом интерфейсе. Порядок выполнения определяется следующим образом:

1. VACL для input VLAN
2. Input IOS ACL
3. Output IOS AC
4. VACL для output VLAN

ns080403

Конфигурирование VACL

Для конфигурирования VACL (VLAN access map) необходимо выполнить следующие действия:

1. Определить стандартный или расширенный ACL, который будет использоваться на VACL.
2. Определить VLAN access map.
3. Описать критерий попадания
4. Описать выполняемое действие при попадании
5. Наложить VLAN access map на соответствующий VLAN.
6. Посмотреть, а что же у нас получилось?

В данном примере мы определяем и накладываем VACL, который будет отбрасывать пакеты, попадающие в access list 1 из сети 192.168.1.0/24, при этом все остальные пакеты, попадающие в access list 2 будут переданы. VACL применяется к VLAN-ам с 5 по 10.

Switch(config)#access-list 1 permit 192.168.1.0 0.0.0.255
Switch(config)#access-list 2 permit any
Switch(config)#vlan access-map mymap 10
Switch(config-access-map)#match ip address 1
Switch(config-access-map)#action drop
Switch(config-access-map)#exit
Switch(config)#vlan access-map mymap 20
Switch(config-access-map)#match ip address 2
Switch(config-access-map)#action forward
Switch(config-access-map)#exit
Switch(config)# vlan filter mymap vlan-list 5-10
Switch(config-access-map)#end

Switch# show vlan access-map
Vlan access-map «mymap» 10
Match clauses:
ip address: 1
Action:
drop
Vlan access-map «mymap» 20
Match clauses:
ip address: 2
Action:
Forward

Switch# show vlan filter
VLAN Map mymap is filtering VLANs:
5-10

MAC ACL

MAC ACL, также известный как Ethernet ACL предназначен для фильтрации non-IP трафика на VLAN или физических интерфейсах Layer 2 используя MAC адреса в именованном расширенном MAC extended ACL.

Шаги по конфигурации MAC ACL подобны обычным именованным расширенным ACL. MAC ACL могут применяться только для фильтрации входящего трафика.

Для определения MAC Extended ACL используется команда mac access-list extended.

После того, как MAC ACL будет создан, его необходимо наложить на интерфейс Layer 2 используя команду mac access-group [acl-name] in

В примере ниже мы покажем, как создать и применить MAC ACL для блокировки всех пакетов AppleTalk Address Resolution Protocol (AARP), пропуская отсальной трафик

Switch(config)# mac access-list extended my-mac-acl
Switch(config-ext-macl)# deny any any aarp
Switch(config-ext-macl)# permit any any
Switch(config-ext-macl)# exit
Switch(config)# interface Fastethernet0/10
Switch(config-if)# mac access-group my-mac-acl in
Switch(config-if)# end
Switch#

Оригинал:   http://dreamcatcher.ru/cisco/003_switches.html

Ссылки:

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