RSS slacknews.org

  • drop_caches
    Задаването на стойности на /proc/sys/vm/drop_caches кара ядрото да освободи кешовете, dirty страниците и inodes от паметта. За да освободим кешовете: echo 1 > /proc/sys/vm/drop_caches За да освободим dirty страниците и inodes от паметта: echo 2 > /proc/sys/vm/drop_caches За да освободим кешовете, dirty страниците и inodes от паметта: echo 3 > /proc/ […]
  • Конфигуриране на ядрото: Поддръжка на мрежови протоколи
    Менюто с мрежовите настройки съдържа опции за настройване на мрежовите протоколи. Може да включвате или да изключвате поддръжка на цели протоколи, или да настроите финно ядрото за определена роле, като рутер или пакетен филтър. Packet and Socket Options На много ниско ниво ядрото работи като позволява на дадени приложения да приемат или изпращат порции с дан […]
  • Конфигуриране на ядрото
    За да конфигурирате ядрото, трябва да притежавате сорс кода. В Slackware той може да се инсталира заедно с ядрото. Може би бихте искали да започнете със страндартно ядро и да си го пачнете и конфигурирате по ваше желание. Проверете  http://www.kernel.org/ за последна верися на сорс кода на ядрото. Сорс кода на ядрото обикновено се намира в [...] […]
  • Ограничаване на достъпа до команда в Линукс
    Как да огранича достъпа до /usr/local/bin/start само за определени потребители на системата ? Отговорът на върпроса е, че трбва да използвате стандартните Линукс групи. Стъпка 1: Създайте група за всички оторизирани потребители Създайте групата: #groupadd restrictedapp Добавете потребители в тази група: #usermod -aG {име_на_група} {потребителско_име} #usermo […]
  • Взимане на част от текст с bash
    Можем да вземем само част от даден текст много лесно с Bash. Нека да кажем, че имаме 1234567890 или abcdefghij. Може да го направим така : num="1234567890"; echo ${num:5:7} 5 указва началото, а 7 колко символа да вземе. Possibly Related Posts: drop_caches Конфигуриране на ядрото: Поддръжка на мрежови протоколи Конфигуриране на ядрото Ограничаване н […]
  • Когато rm се оплаква, че не може да трие
    Има ограничение на командата rm, когато се опитате да триете много файлове с *. Например: rm -rf something* Ако има много файлове, които започват с something, rm няма да може да ги изтрие и ще изведе: /bin/rm: Argument list too long. Решението на проблема е да ползвате find, xargs и rm. find . -name 'something*' -print0 | xargs -0 rm [...] […]
  • umask: създаване на нови файлове с определени права
    Замисляли ли сте се, че всеки път като създаваме файлове в Линукс те се създават с определени права ? Нека да пробвам: Lets see this: touch testing ls -l testing -rw-r--r-- 1 test test 0 2008-03-08 01:14 testing Файла не би трбвало да се създаде с права за изпълнение, както виждаме изхода от ls. Нека да дадем права за изпълненеи [...] […]
  • Права за достъп до файлове
    chmod (change mode) е доста често използвана команда за администрация. Обикновено я ползваме, за да направим даден скрипт, написан на bash, python, perl изпълним. За да на правил файл изпълним: chmod +x myscript.sh По подразбиране това ще промени атрибута за всички. Файловите атрибути са 3 вида: u ( user – собственик на файла) g ( групата, в която е потребит […]
  • Къде се намират програмите ми и техните конфигурационни файлове ?
    Когато искаме да намерим пълния път до дадена програма, обиконовенно използваме which. Например, ако искаме да видим къде се намира mplayer, може да направим това: which mplayer Има още една команда, която освен, че ви показва пътя до бинарките, ви показва и пътя до сорс файловете, конфигурационите файлове и man страниците. whereis mplayer Ще върне това: mpl […]
  • Как да покажем споделените библиотеки, от които се нуждае програма ?
    Почти всяка програма в Линукс използва споделени библиотеки, дори тези които са компилирани на ръка със gcc. Може да се окаже, че дадена програма компилирана на дадена дистрибуция може да не работи под друга или по-стара версия на същата, на която е била компилирана. Всичко това може да се дължи на липсващи споделени библиотеки. Можем да [...] […]
  • Slackware news: 4 Октомври 2009
    Има две важни промени днес PHP и Samba. Промените са направени едновременно в -Stable и в -Current. В -Current, обаче има и доста други промени като MySQL, Amarok, QT, Perl, както и GCC 4.4.1. Това е последното от -Current changelog-а: Sun Oct 4 00:17:50 CDT 2009 ap/mysql-5.1.39-i486-1.txz: Upgraded. This bumps the version of the shared libraries to .so.16.0 […]
  • GoblinX 3.0
    Flavio Pereira de Oliveira представи днес последната версия на неговата популярна Slackware-базирана жива дистрибуция, GoblinX, още позната като G:Standard. GoblinX 3.0 имаше пет десктоп мениджъра, но явно Flavio е решил да запази само един KDE. С KDE4, тази дистрибуция включва стабилност и добър външен вид в един ISO имидж. В новата версия на GoblinX 3.0: · […]
  • Slackware по лесния начин
    Дайте на човек Ubuntu, и той ще научи Ubuntu. Дайте на човек SUSE, и той ще научи SUSE. Ако дадете на човек Slackware, той ще научи Linux. Това гласи старата максима, обикновено използвана с насмешка, но все още важеща. Ако някога сте се чудили какво прави Slackware толкова популярен сред Линукс ветераните ви представям малко съвети [...] […]
  • Основи на Линукс автоматизацията
    Тази статия описва начина, по който могат да се изпълняват команди в определено време без да се налага на потребителя да ги въвежда. Програмите отговорни за това в линукс са cron и at. Изпълняване на команди в точно определено време: Ако нямате нужда командата да се изпълнява редовно може да използвате. Например може да ползвате : at midnight След [...] […]
  • Facebook пуска свободен високопроизводителен сървър
    Facebook пуска фреймуорк, Tornado, която е написана на питон и е написана специално за обработване на големи обеми информация едновременно. Торнадо е фокусирана върху скоростта на обработка на данните и едновременното обработването на огромни количества трафик. Технологията се разпространява под Apache 2.0 лиценз. Цялата новина може да научите тук. Possibly […]
  • Linux 2.6.31
    Тази версия на ядрото добавя USB 3.0 поддръжка, еквивалент на FUSE за подаване на звук от OSS към ALSA, някой подобрения в управлението на паметта, добавена е поддръжка за ATI Radeon Modesetting, както и за Intel Wireless Multicomm 3200 Wifi устройства. Добавена е поддръжка и за броячите за производителност, поддръжка за gcov, проверка за не [...] […]
  • Как да конфигурираме Squid да ползва refresh patterns
    Squid може да бъде конфигуриран така че да удовлетворява дори най-взискателните конфигурации. При последните версии могат да се конфигурират поне 250 отделни параметъра. Стандартния конфигурационен файл се намира в /etc/squid.conf и заедно с коментарите достига 4600 реда. Конфигурирането на приложението може да се окаже предизвикателство дори за напреднали а […]
  • Преглед на ext3 и ext4 файловите системи
    Има доста въпроси, които се повдигат при създаването на ext3 файлова система. Административни съображения Доста въпроси изникват, когато трябва да се реши как да бъде разделено мястото на хард диска и как трябва това място да се разпредели между различните партишъни и файлови системи. Някои от въпросите, които може би си задавате са: Как бихте искали да план […]
  • Как да търсим файлове в Линукс
    Как да търсим с ‘locate’ Най-лесния начин да търсим файлове в Линукс е с програмата locate. Когато пуснете за пръв път програмата може да ви изпише съобщение за грешка. Проблема е че е нужна база с всички файлове на на компютъра за да може locate да ви покаже резултат. Съобщението за грешка ще би подкани да [...] […]
  • Как да правим всичко с dd ?
    Синтаксиса на командата е : dd if= of= bs=(обикновено степен на 2, но не по-малко от 512 байта) skip= seek= conv=. Source са входните данни. Target е мястото, където се записва информацията. Ако направите грешка и им размените местата, може да затриете много информация. Примери : Копиране партишън от един хард диск на друг : dd if=/dev/sda2 of=/dev/sdb2 bs=4 […]

Slacknews.org етикети

attributeschangelogcopy fileext4filefile access modesfirefoxgcckdekde4.2.0kdelibskernelkernel configurationlinuxmozillamozilla firefoxopensshproxyreleasesecuresecure brosingsecuritysecurity fixsecurity upgradeslackwareslackware changelogslackware kde 4.2.4slamd64slamd64 12.2socks proxysshtortunnelupgradexdg-utilsконфигурация на ядролинукснова версияпроксисигурностсигурно сърфиранесламдтунелъпгрейдядро

Етернет мостове с линукс

февруари 24th, 2009

Какво е мост ?

Мостът свързва два мрежови сегмента, за да могат пакетите да преминават от единия сегмент в другия все едно са в една мрежа. Този процес се извършва на втория слой от OSI модела и не за виси от протокола, който се използва в мрежата. Обикновено, когато не използваме мостове, компютър с две мрежови карти би бил свързан към две различни мрежи. Въпреки че компютърът не маршрутизира пакети между двете мрежи, на всеки интерфейс би имало различен мрежов адрес и маска в зависимост от мрежата, в която е свързан. Когато ползваме мостове, и двата мрежови интерфейса са част от един и същ логически мрежов сегмент. Двата интерфейса могат да бъдат представени като един мостов интерфейс, а устройствата, свързани към двата мрежови сегмента ще получат адреси от една и съща мрежа.

Само пакетите, които трябва да минат от един сегмент в друг ще преминават физически от единия интерфейс към другия. Мостът ще научи MAC адресите на устройствата от двата сегмента, за да знае кои пакети трябва да се препредават към другия мрежов сегмент. Това прави мостовете полезни за намаляването на трафика като сегментираме мрежата по такъв начин, че в един сегмент е намират устройства, между които се предава голям обем данни. Днес почти всяка мрежа съдържа поне един суич. Суичът може да се разгледа като устройство, което има мост на всеки порт. Това означава, че когато се пренасят данни от един порт на друг данните не се предават и на всички останали портове.

Защо да използваме мостове?

Няма особено голям смисъл да използваме Линукс машина за мост или за суич при положение, че последните са доста по-евтини, тихи и ефективни. Освен това всеки интерфейс, които е конфигуриран на Линукс машина като мост трябва да работи в безразборен режим за да може да получава пакети, които не са предвидени за него. Това би повишило натоварването на машината. За това е добре да се ползва отделна машина като мост, а не такава която изпълнява и други функции.  Има работи които могат да се направят с линукс мостове, които не могат да се направят с обикновени суичове. Например мост между една мрежа и ppp интерфейс или мост между няколко частни мрежи.

Поддръжка на мостове в линукс

Поддръжка за мостове в линукс има във всички ядра след 2.4.0.

Конфигурация на ядрото

Ако използвате ядро, което е инсталирано с дистрибуцията която ползвате и не сте си го компилирали вие, има шанс да имате вече поддръжка за мостове в него. Много вероятно поддръжката да е включена като модул. В този случай трябва да заредите модула по този начин:


# modprobe bridge

Ако се налага да прекомпилирате ядрото уверете се че променливата ‘CONFIG_BRIDGE’  има присвоена стойност ‘y’ или ‘m’ по време на конфигурацията. Как да си компилирате ядро, не е част от обхвата на тази статия.

Допълнителни инструменти

Повечето дистрибуции имат пакет, които се казва ‘bridge-utils’. Пакетът съдържа командата ‘brctl’. Ако вашата дистрибуция няма такава команда можете да свалите сорса от тук.

Компилирането и инсталирането е доста лесно

# tar xzf bridge-utils-1.4.tar.gz
# cd bridge-utils-1.4
# ./configure --prefix=/usr/local
# make
# su
# make install

Създаване и използване на мостове

Като пример, нека си представим, че имаме два физически мрежови сегмента и искаме да ги обединим в една логическа мрежа. Имаме една машина, която е мостът, с два мрежови интерфейса eth0 и eth1. Освен това в двата сегмента имаме други машини.

bridge01

Преди да създадем моста, трябва да сме сигурни, че и двата интерфейса не са вдигнати и нямат мрежови адреси.


# ifconfig eth0 0 down
# ifconfig eth1 0 down

След това може да създадем мрежовия интерфейс. Използваме командата brctl ‘addbr’, която създава мостов интерфейс с име ‘br0′.


# brctl addbr br0

Няма ограничения за името на мостовия интерфейс, стига да няма вече такъв интерфейс със същото име. По принцип, обаче е добре да се  именуват br0, br1 и т.н.

След като сме създали мостовия интерфейс, към него трябва да добавим и реалните интерфейси като портове.


# brctl addif br0 eth0
# brctl addif br0 eth1

От тук нататък може да използваме мостовия интерфейс като всеки друг интерфейс в Линукс. Първото нещо което  трябва да направим е да му дадем мрежов адрес и да го вдигнем.


# ifconfig br0 10.1.9.1 netmask 255.255.255.0 broadcast 10.1.9.255 up

# ifconfig br0
br0 Link encap:Ethernet HWaddr 10:00:01:04:71:06
inet addr:10.1.9.1 Bcast:10.1.9.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:49 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:9442 (9.2 KiB)

Командата brctl има опция ’show’ function, чрез която можем да видим състоянието на мостовите интерфейси на машината.


# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.100001047106 yes eth0 eth1

Нека да отбележим, че “bridge id” се използва от Spanning Tree протокола, който е обяснен по-нататък.

В този момент би трябвало да имате ping от моста до клиенти от двата сегмента на мрежата.


bridge01:/# ping -c 1 -n 10.1.9.2
PING 10.1.9.2 (10.1.9.2) 56(84) bytes of data.
64 bytes from 10.1.9.2: icmp_seq=1 ttl=64 time=20.6 ms

bridge01:/# ping -c 1 -n 10.1.9.4
PING 10.1.9.4 (10.1.9.4) 56(84) bytes of data.
64 bytes from 10.1.9.4: icmp_seq=1 ttl=64 time=20.6 ms

Би трябвало също да имате връзка от единия сегмент до другия през моста.


linux01:/# ping -c 1 -n 10.1.9.5
PING 10.1.9.5 (10.1.9.5) 56(84) bytes of data.
64 bytes from 10.1.9.5: icmp_seq=1 ttl=64 time=20.6 ms

По-важното е, че трябва да се вижда като трафик между две усторйства в един мрежов сегмент. Това може да се провери по следния начин. Пускаме tcpdump на една машина и пращаме ICMP от втора машина към трета. Първата машина е в единия сегмент а другите две са в другия сегмент.


linux03:/# tcpdump -n -i eth0 icmp

linux01:/# ping -n 10.1.9.3
PING 10.1.9.3 (10.1.9.3) 56(84) bytes of data.
64 bytes from 10.1.9.3: icmp_seq=1 ttl=64 time=20.6 ms

Ако мостът работи правилно машината, на която сме пуснали tcpdump, не трябва да вижда трафика между другите две, въпреки че се намират в един и същ логическа мрежа.

От друга страна ако пратим ICMP пакет на broadcast адреса на мрежата, моста трябва да до предаде и във другия сегмент.


linux01:/# ping -c 1 -b 10.1.9.255
WARNING: pinging broadcast address
PING 10.1.9.255 (10.1.9.255) 56(84) bytes of data.
64 bytes from 10.1.9.2: icmp_seq=1 ttl=64 time=0.251 ms

linux03:/# tcpdump -n -i eth0 icmp
tcpdump: listening on eth0
19:39:48.273806 10.1.9.2 > 10.1.9.255: icmp: echo request (DF)
19:39:48.273965 10.1.9.4 > 10.1.9.2: icmp: echo reply
19:39:48.274582 10.1.9.5 > 10.1.9.2: icmp: echo reply

Важно е да се спомене, че ако не бяхме дали мрежов адрес на моста, той пак щеше да работи, но нямаше да може да участва в комуникацията от по-високо ниво от layer 2.

С командата ’showmacs’ можем да видим MAC адресите на устройствата в мрежата и на кой порт са свързани.


bridge01:/# brctl showmacs br0
port no mac addr is local? ageing timer
2 10:00:01:02:24:04 no 0.49
1 10:00:01:02:95:35 no 0.98
1 10:00:01:02:34:56 no 3.84
2 10:00:01:03:26:02 no 9.19
1 10:00:01:03:73:03 yes 0.00
2 10:00:01:04:71:06 yes 0.00

Този списък показва MAC адресите на шест устройства свързани в мрежата. Периода откакто мостът е видял пакет от определен MAC адрес се нарича Ageing Time. След определено време мостът ще премахне адреса от своя списък. Това осигурява актуална таблица ако има устройства, които се местят от един порт на друг.

Времето, което мостът да държи записа за адреса в таблицата си, може да се конфигурира с ’setageingtime’ командата:


# brctl setageingtime br0 40

Това ще накара мостът да премахва адреси от таблицата си след 40 секунди.

Премахване на мостови портове и мостови интерфейси

Ако ви се налага да пременете порт от моста, можете да го направите така :


# brctl delif br0 eth1

Ако искате да премахнете мостът изцяло трябва да използвате ‘delbr’, но трябва да свалите интерфейса преди да направите това.


# ifconfig br0 down
# brctl delbr br0

Spanning Tree протоколът

Spanning Tree Protocol (STP) се използва от суичове, когато в мрежата между тях има повече от един път. По принцип ако суича или моста, които направихме по-горе може да представлява сериозна проблем за нашата мрежа. Например, ако има повреда в устройството, двете части на сегмента няма да могат да комуникират помежду си. Това може коригира когато се добави втори мост. STP позволява тези два моста да комуникират и да се “разберат”, кой да е активен и кок пасивен. Активния мост пренасочва всички пакети, докато пасивния не прави нищо докато няма проблем с активния.

STP е доста сложен протокол и не може да бъде покрит в такава статия затова ще разгледаме само основите на протокола.

Както се уверихме по-рано всеки мост има уникален осем битов номер. Първите два байта представляват приоритета на моста, които могат да се променят ръчно, а следващите шест са MAC адреса на моста. Под Линукс приоритета по подразбиране е 32768. MAC адреса на моста се избира да е този с най-малка стойност от всички MAC адреси на машината. Например 8000.100001037303 е номера на моста с приоритет 32768 (8000 hex) и MAC адрес 10:00:01:03:73:03.

В мрежа с много мостове мостът с най-малък номер се избира да бъде главен(root bridge). Главния мост определя приоритета за всеки дублиращ се път в мрежата. Когато се получат зацикяния между мостове с дублиращи се връзки, някои от портовете трябва да преминато в “blocking” режим. Това означава, че тези портове няма да предават повече пакети.

По принцип под линукс STP протоколът е изключен по подразбиране. Може да проверите дали е включен или изключен с командата “brctl show br0″, а режима може да се сменя така :


# brctl stp br0 on

или


# brctl stp br0 off

За да получите повече информация за настройките на STP на моста може да ползвате командата “showstp”:


bridge01# brctl showstp br0
br0
bridge id 8000.100001037303
designated root 8000.100001037303
root port 0 path cost 0
max age 20.00 bridge max age 20.00
hello time 2.00 bridge hello time 2.00
forward delay 15.00 bridge forward delay 15.00
ageing time 300.00
hello timer 0.17 tcn timer 0.00
topology change timer 0.00 gc timer 0.00
flags

eth0 (1)
port id 8001 state forwarding
designated root 8000.100001037303 path cost 100
designated bridge 8000.100001037303 message age timer 0.00
designated port 8001 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags

eth1 (2)
port id 8002 state forwarding
designated root 8000.100001037303 path cost 100
designated bridge 8000.100001037303 message age timer 0.00
designated port 8002 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags

Това, което виждаме е че моста е главен мост за мрежата(погледнете “bridge id” и “designated root”) и освен това и двата му интерфейса предават пакети. Ако пуснем същата команда на втория мост, ще видим някой различия:


bridge02# brctl showstp br0
br0
bridge id 8000.100001087423
designated root 8000.100001037303
root port 1 path cost 100
max age 20.00 bridge max age 20.00
hello time 2.00 bridge hello time 2.00
forward delay 15.00 bridge forward delay 15.00
ageing time 300.00
hello timer 0.00 tcn timer 0.00
topology change timer 0.00 gc timer 238.59
flags

eth1 (1)
port id 8001 state forwarding
designated root 8000.100001037303 path cost 100
designated bridge 8000.100001037303 message age timer 18.63
designated port 8001 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags

eth2 (2)
port id 8002 state blocking
designated root 8000.100001037303 path cost 100
designated bridge 8000.100001037303 message age timer 18.63
designated port 8002 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags

Моста има номер 8000.100001087423, но полето designated root показва номера на другия мост. Това е така понеже само един мост може да бъде главен в една мрежа. Освен това виждаме, че единия от портовете му не предава пакети. Това е смисъла на STP протокола. Той предпазва мрежата от зацикляне на пакети междъ мостове. Ако мостът получи пакети, които трябва да бъдат предадени на друд мрежов сегмент, той ще ги игнорира понеже дргуя мост ще ги обработи.

Ако, по някаква причина, искате да смените приоритета на мост, можете да го направите с ’setbridgeprio’ командатаcommand. Тук сменяме приоритета на 4096 (1000 hex).


# brctl setbridgeprio br0 4096

Сега можем да се уверим, че номера на моста се е сменил.


# brctl show
bridge name bridge id STP enabled interfaces
br0 1000.100001047106 yes eth0
eth1

Възможно е да се слага приоритет и на порт. Това може да е нужно, когато по-бавния порт е избран за главен вместо по-бързия и искате да промените това.


# brctl setportprio br0 eth1 50

В зависимост от топологията на мрежата някой мостови портове може да си сменят режима от “forwarding” в “blocking”. Това се случва когато чсто от мрежата е недостижима, но би трябвало бързо да се стабилизира.

За повече информация относно Spanning Tree протоколът: IEEE 802.1D specification.

Заключение

След като сте прочели тази статия може да експериментирате с по-слжни конфигурации. Това може да ви е полезно ако имате много виртуални машини и трябва да свържите мрежите, в които се намират те с мостове. Така можете да направите сравнително сложни топологии.

Possibly Related Posts:


  • Share/Bookmark

Filed under: Статии

Leave a Reply