RuCable
Маршрутизация трафика через FreeBSD trunking Cisco
Создание маршрутизации через FreeBSD

Настройка по данной статье добавляет Вам следующие возможности:

  • 1. Полный роутинг и разделения сети (к примеру возьмем 192.168.1.0/24) на ВЛАНы и защита сети фаерволом.
  • 2. Маршрутизация пакетов из трансферной сети провайдера в сеть выделенную, через транкинг настроенный на Cisco Catlyst 3550.
  • 3. Мониторинг трафика на портах через net-snmp (опционально потребуется установить порт /usr/ports/net-mgmt/net-snmp ) и настроить даемон.
  • 4. Возможность управлять трафиком и даже резать его на килобиты или килобайта через DUMMYNET на FreeBSD.
Что нужно для того чтобы все это заработало:
  • 1. ОС FreeBSD 7/x + Машина желательно с двумя БП(для удержания машины в бесперебойном питании) не хуже Celeron 1 Ghz , 256Mb RAM
  • 2. Cisco Catalyst 3550-SMI или другие, которые поддерживают транкинг(trunking)
  • 3. Сетевые карты которые поддерживают создание и управеление VLAN(на FreeBSD).
  • 4. Терпение и желание.
  •  

    1. Создаем на БСД ВЛАНы. но для начала, добавляем нужные нам опции в ядро БСД

    #
    options         HZ=1000 #Увеличивает резистентность ОС.
    options         DUMMYNET#Добавляет нам возможность установки настройки "резать канал" на килобиты, килобайты и т.д.
    options         IPSTEALTH # this does not increment the TTL counter, making the VLAN machine seem transparent
    # Возможность фаервола
    options         IPFIREWALL
    options         IPFIREWALL_VERBOSE
    options         IPFIREWALL_VERBOSE_LIMIT=100
    options         IPFIREWALL_FORWARD
    
    Создаем ядро
    #cd /sys/i386/conf
    #config vlan
    Kernel build directory is ../compile/vlan
    Don't forget to do ``make cleandepend && make depend''
    #make cleandepend && make depend
    #make
    #make install
    #
    
    либо
    #cd /usr/src && make buildkernel KERNCONF=vlan (put your config file from step one here)
    Как только все отбарабанило
    #make installkernel KERNCONF=vlan 
    

    Шаг 2. Перезагружаемся, и настраиваем сеть

    Начинаем: Добавляем в /etc/c.conf

    defaultrouter="1.2.3.4" #Выход на провайдера
    ifconfig_em0="inet 1.2.3.5  netmask 255.255.255.252 media 100BaseTX" #Это наш IP выданный провайдером для трансфера сети.
    
    ifconfig_em1="up mtu 1504" #Поднимаем порт с MTU 1504
    
    cloned_interfaces="vlan2 vlan3" #Добавляем клонированне ВЛАНы
    ifconfig_vlan2="inet 192.168.1.1  netmask 255.255.255.192 vlan 2 vlandev em1"
    ifconfig_vlan3="inet 192.168.1.65  netmask 255.255.255.248 vlan 3 vlandev em1"
    
    firewall_enable="YES"           # Set to YES to enable firewall functionality
    firewall_script="/etc/rc.firewall" # Which script to run to set up the firewall
    firewall_type="OPEN"           # Firewall type (see /etc/rc.firewall)
    #firewall_type="CLIENT"          # Firewall type (see /etc/rc.firewall)
    firewall_quiet="YES"            # Set to YES to suppress rule display
    firewall_logging="YES"          # Set to YES to enable events logging
    firewall_client_net="192.168.1.0/24" # Наша сетка для "client" firewall.
    
    

    теперь, когда все создано, можно перезагрузить сеть:
    #/etc/netstart
    или, если Вы будете в будущем добавлять ВЛАНы и перезагрузка не самое лучшая идея, просто делайте так:
    #ifconfig vlan4 create
    #ifconfig vlan4 inet 192.168.1.162 netmask 255.255.255.252 Vlan 4 vlandev em1
    Проверим
    #ifconfig vlan4
    # ifconfig vlan4
    vlan4: flags=8843 metric 0 mtu 1504
            options=3
            ether 00:30:48:30:dd:17
            inet 192.168.1.162 netmask 0xfffffff8 broadcast 192.168.1.163
            media: Ethernet autoselect (100baseTX )
            status: active
            vlan: 4 parent interface: em1
    #
    

    Шаг 4. настраиваем далее наш Каталист/Cisco.

    Порт Fa0/48 будет приемником ВЛАНов и на нем настроим trunk

    switch# config t
    switch(config)# int fa0/48
    switch(config-if)# description 802.1Q Trunk to FreeBSD Machine
    switch(config-if)# speed 100
    switch(config-if)# switchport trunk encapsulation dot1q
    switch(config-if)# switchport trunk allowed vlan 2-4
    switch(config-if)# exit
    switch(config)# exit
    switch# wr mem 
    

    Теперь аплинк отредатирован и можно подключить тестовую машину к порту Fa0/1
    switch# config t
    switch(config)# vtp mode transparent
    switch(config)# system mtu 1504
    Changes to the System MTU will not take effect until the next reload is done.
    switch(config)# ip subnet-zero
    switch(config)# ip routing
    switch(config)# int fa0/1
    switch(config-if)# description Port 1 VLAN 2
    switch(config-if)# switchport access vlan 2
    switch(config-if)# no cdp enable
    switch(config-if)# exit
    switch(config)# exit
    switch# wr mem
    switch# reload
    

    Шаг 5. Сверка настроек и тестирование.

    Пока каталист перезагружается с новым MTU, подключаем и настраиваем на подключенной к порту 1 машине-клиенте адрес:

    IP: 192.168.1.2
    Gateway: 192.168.1.1
    Mask: 255.255.255.192
    DNS: провайдера
    и пингуем с нее гатевай и проверям, все ли сработало.

    Данная статья была создана в процессе тестирования и настройки следующей сборки: FreeBSD 7.2 i386 [em0, em1] , Cisco catalyst 3550SMI

    Настройка траф-шейпера (ограничения пользователей по скорости подключения)

    Как только все заработало, можно добавить возможность урезания канала для тех, кто хочет ограничить скорость скачивани/закачивания у подключенных клиентов. Для этого нужно настроить /etc/rc.firewall - открываем его для редактирования. Добавляем правило:

    ${ipfw} pipe 1 config bw 128Kbit/s queue 25
    ${ipfw} pipe 2 config bw 56Kbit/s queue 25
    ${ipfw} add 100 pipe 1 ip from 192.168.1.65:255.255.255.248 to any via em1
    ${ipfw} add 101 pipe 2 ip from any to 192.168.1.65:255.255.255.248 via em1
    
    Тем самым ограничиваем скорость потока закачивания на 128Kbit/s и исходящего трафика на 56Kbit/s для всей сети 192.168.1.65:255.255.255.248
    Так же можно ограничить скорость и для отдельного адреса. Установка и выдача адресов так же возможна через Catalyst.