Конфигуриране на tcp/ip мрежа



Дата25.08.2016
Размер350.09 Kb.
#7260

Конфигуриране на TCP/IP мрежа


В тази глава ще разгледаме всички необходими стъпки за конфигуриране на TCP/IP мрежа на вашата машина. Ще започнем със задаването на IP адреси, постепенно ще се придвижим до конфигурирането на мрежовите TCP/IP интерфейси и ще представим няколко инструмента, които са доста полезни, когато се отстраняват проблемите при инсталирането на мрежа.

Повечето от задачите, разгледани в тази глава, обикновено трябва да се изпълнят само веднъж. След това ще ви се наложи да променяте тези конфигурационни файлове само, когато добавяте нова система към вашата мрежа или ако изцяло преконфигурирате системата си. Някои от командите, използвани за конфигурирането на TCP/IP, обаче, ще трябва да се изпълняват при всяко зареждане на системата. Това обикновено се прави чрез стартирането им от системните скриптове /etc/rc*.

Обикновено, мрежово-специфичната част от тази процедура се съдържа в един скрипт. Името му е различно при различните дистрибуции на Linux. В много от старите дистрибуции той е известен като rc.net или rc.inet. Понякога можете да видите два скрипта с имена rc.inet1 и rc.inet2; първият от тях инициализира частта от поддръжката на мрежа, намираща се в ядрото, а вторият стартира основните мрежови услуги и приложения. В модерните дистрибуции, rc-файловете са структурирани по доста по-добър начин; вече в директорията /etc/init.d/ (или /etc/rc.d/init.d/) можете да намерите скриптовете, които създават мрежови устройства или стартират мрежови приложни програми. Примерите в тази книга се базират на по-новото разположение.

В тази глава разглеждаме тези части от скриптовете, които конфигурират вашите мрежови интерфейси; приложенията се описват в следващите глави. След завършване на тази глава, би трябвало да сте определили набора от команди, които могат правилно да конфигурират TCP/IP мрежа на вашия компютър. Тогава ще трябва да замените всички примерни команди в конфигурационните ви скриптове с ваши команди, да се уверите, че скрипта се изпълнява от базовия rc-скрипт по време на зареждане и да рестартирате машината си. Мрежовите rc-скриптове от любимата ви дистрибуция на Linux трябва да ви осигурят солиден пример, от който да започнете.


Монтиране на файловата система /proc


Някои от конфигурационните инструменти на версиите Linux NET-2 и NET-3 разчитат на файловата система за комуникиране с ядрото. Този интерфейс позволява достъп до информация за работата на ядрото чрез механизъм, наподобяващ файлова система. Когато тя е монтирана, можете да получите списък на файловете в нея като при всяка друга файлова система, или пък да разгледате тяхното съдържание. Типични файлове са loadavg, който съдържа информация за средното натоварване на системата и meminfo, който показва текущото използване на физическата памет и виртуалната памет.

Към това мрежовият код прибавя и директорията net. Тя съдържа множество файлове, които показват данни като ARP таблиците на ядрото, състоянието на TCP връзките, и таблици за маршрутизация. Повечето инструменти за администриране на мрежата получават необходимата им информация от тези файлове.

Файловата система proc (или както още е известна, procfs) обикновено се монтира в поддиректорията /proc по време на зареждане на системата. Най-добрия метод за това е да се добави следния ред към файла /etc/fstab:

# място за монтиране на procfs:


none /proc proc defaults

След това изпълнете mount /proc от вашия /etc/rc скрипт.

Днес procfs по подразбиране се конфигурира в повечето ядра. Ако във вашето ядро няма procfs, ще получите съобщение от вида: mount: fs type procfs not supported by kernel (mount: файловата система procfs не се поддържа от ядрото). В такъв случай ще ви се наложи отново да компилирате ядрото и да отговорите с “yes” на въпроса, дали искате поддръжка на procfs.

Инсталиране на двоичните файлове


Ако използвате предварително пакетирана дистрибуция на Linux, тя ще съдържа основните мрежови приложения и инструменти, заедно със съответния набор от примерни файлове. Единствения случай, при който може да ви се наложи да си набавите и инсталирате нови инструменти е, когато инсталирате нова версия на ядрото. Тъй като понякога това води до промяна в мрежовия слой на ядрото, ще трябва да подновите основните конфигурационни инструменти. Това подновяване включва поне прекомпилиране, но понякога се налага да си набавите и най-актуалния набор от двоични файлове. Те могат да бъдат намерени на техния официален сайт на адрес ftp.inka.de/pub/comp/Linux/networking/NetTools/, пакетирани в архив, наречен net-tools-XXX.tar.gz, където XXX е номера на версията. Пакетът, отговарящ на Linux 2.0, е net-tools-1.45.

Ако искате сами да компилирате и инсталирате стандартните мрежови приложения за TCP/IP, можете да ги изтеглите от повечето Linux FTP сървъри. Всички модерни дистрибуции на Linux включват пълен набор от TCP/IP мрежови приложения като World Wide Web браузъри, telnet и ftp програми и други мрежови приложения, например talk. Ако разполагате със софтуер, който трябва да компилирате самостоятелно, има голяма вероятност това да стане под Linux доста просто от изходния код, ако спазвате включените в пакета инструкции.


Задаване името на хоста


Повечето, ако не и всички, мрежови приложения разчитат на вас да зададете смислена стойност като име на локалния хост. Тази настройка обикновено се прави по време на процедурата за начално зареждане посредством изпълнение на командата hostname. За да зададете стойност name като име на хоста, въведете:

# hostname name

Обичайна практика е да се използва непълно име на хоста, без да се задава името на домейна. Например, хостовете във Виртуалната пивоварна (описани в Приложение А, Примерна мрежа: Виртуалната пивоварна) могат да бъдат наречени vale.vbrew.com или vlager.vbrew.com. Това са техните официални пълни домейн имена (fully qualified domain name - FQDN). Техните локални имена на хост ще са първите части на името като vale. Тъй като, обаче, локалното име на хоста често се ползва за откриване на IP адреса на хоста, трябва да се уверите, че библиотеката resolver може да разпознае IP адреса на хоста. Това обикновено означава, че трябва да въведете името на хоста в /etc/hosts.

Някои хора предлагат да се използва командата domainname, за да се зададе на ядрото името на домейна от останалата част от FQDN. По този начин може да се комбинират резултатите от hostname и domainname, за да се получи FQDN. Това обаче е вярно само наполовина. Командата domainname обикновено се използва, за да се зададе NIS домейна на хоста, който може да е напълно различен от DNS домейна, към който принадлежи хоста ви. Вместо това, за да сте сигурни, че кратката форма на името на вашия хост може да се разпознае от всички съвременни версии на командата hostname, или го добавете като запис във вашия локален сървър за имена, или поставете пълното домейн име във файла /etc/hosts. След това можете да използвате аргумента -fqdn на командата hostname и тя ще изведе пълното домейн име на вашия хоста.


Задаване на IP адреси


Ако конфигурирате мрежовия софтуер на вашия хост за самостоятелна работа (например, за да може на него да работи софтуера за мрежови новини INN), може спокойно да пропуснете тази част, защото в такъв случай единствения IP адрес, който ще ви е необходим, е за loopback-интерфейса, който винаги е 127.0.0.1.

Нещата са малко по-сложни с истинските мрежи като Ethernet. Ако желаете да свържете вашия хост към вече съществуваща мрежа, ще трябва да помолите администраторите й да ви дадат IP адрес за тази мрежа. Когато създавате мрежа изцяло самостоятелно, вие сами задавате IP адресите.

Хостовете в рамките на една локална мрежа трябва обикновено да използват адреси от една и съща логическа IP мрежа. Оттук следва, че трябва да зададете IP адрес на мрежата. Ако имате няколко физически мрежи, трябва или да им зададете различни мрежови номера, или да използвате подмрежи, за да разделите вашия диапазон от IP адреси на няколко подмрежи. Подмрежите се разглежда в следващата част, “Създаване на подмрежи”.

Получаването на IP номер на мрежата зависи до голяма степен от намерението ви да се свържете към Интернет в близко бъдеще. Ако възнамерявате да направите това, трябва веднага да получите официален IP адрес. Можете да се обърнете към вашия доставчик на мрежови услуги за помощ. Ако желаете да получите мрежов номер само за в случай, че някой ден решите да се включите в Интернет, заявете формата Network Address Application Form от hostmaster@internic.net или от Мрежовия информационен център във вашата страна, ако съществува такъв.

Ако вашата мрежата не е свързана към Интернет и няма да бъде в близко бъдеще, вие сте свободни да изберете произволен легален мрежов адрес. Само се уверете, че никакви пакети от вашата вътрешна мрежа не излизат навън в Интернет. За да сте сигурни, че няма да има вреди дори и ако стане такова изтичане, използвайте някой от мрежовите номера, запазени за частно използване. Организацията IANA (Internet Assigned Number Authority) е запазила няколко номера на мрежи от класовете A, B и C, които могат да бъдат използвани без регистрация. Тези адреси са валидни само в рамките на частната мрежа и не се маршрутизират между истинските Интернет сайтове. Тези номера са дефинирани във RFC 1597 и са изброени в Таблица 2-1 в Глава 2, Въпроси на работата в TCP/IP мрежа. Обърнете внимание, че втория и третия блок съдържат съответно 16 и 256 мрежи.

Избирането на вашите адреси между някой от тези мрежови номера е удобно не само за мрежи без всякаква връзка с Интернет; можете по този начин да реализирате малко по-ограничен достъп, използвайки един-единствен хост като шлюз. За вашата локална мрежа шлюзът е достъпен чрез своя вътрешен IP адрес, докато останалия свят знае за него с неговия официално регистриран адрес (даден ви от вашия доставчик). Ще се върнем отново на тази концепция във връзка с възможността за IP маскиране в Глава 11, IP маскиране и транслиране на мрежови адреси.

Оттук до края на книгата ща предполагаме, че мрежовият администратор на пивоварната използва мрежов адрес от клас B, например 172.16.0.0. Разбира се, един мрежов адрес от клас C определено ще удовлетвори условието да е приложим и за мрежата на Пивоварната, и за тази на Винарната. Ние ще използваме мрежа от клас B с цел простота; това ще направи примерите за подмрежи в следващата част на тази глава малко по-лесни за възприемане.

Създаване на подмрежи


За да работите с няколко Ethernet мрежи (или други мрежи, стига да разполагате с необходимия драйвер), трябва да разделите вашата мрежа на подмрежи. Забележете, че разделянето на подмрежи се налага само ако имате повече от една broadcast мрежа – връзките от тип точка-до-точка не се броят. Например, ако имате една Ethernet и една или повече SLIP връзки с външния свят, не е нужно да разделяте вашата мрежа. Това е обяснено по-подробно в Глава 7, IP през серийна линия.

За да обедини двете Ethernet мрежи, мрежовия управител на Пивоварната решава да използва 8 бита от частта за хоста като допълнителни битове за подмрежа. Това остава други 8 бита за хост частта, позволявайки 254 хоста във всяка от подмрежите. След това той дава номер на подмрежа 1 на пивоварната и номер 2 на винарната. Респективно, мрежовите им адреси в този случай са 172.16.1.0 и 172.16.2.0. Маската на подмрежа е 255.255.255.0.

Шлюзът между двете подмрежи е vlager, който получава номер на хост 1 за всяка от тях, което прави IP адресите му съответно 172.16.1.1 и 172.16.2.1.

Забележете, че в този пример използваме мрежа от клас B, за да запазим нещата прости, но мрежа от клас С би била по-реалистична. С новия код за поддръжка на мрежа, разделянето на подмрежи не е ограничено байтови граници, така че дори една мрежа от клас С може да бъде разделена на няколко подмрежи. Например, можете да използвате два бита от хост-частта за мрежова маска, което ви дава четири възможни подмрежи с по 64 хоста във всяка.1


Създаване на файловете hosts и networks


След като разделите вашата мрежа на подмрежи, трябва да подготвите просто разпознаване имената на хостовете посредством файла /etc/hosts. Ако не смятате да използвате DNS или NIS за разпознаване на адреса, трябва да поставите информация за всички хостове във файла hosts.

Дори ако искате да използвате DNS или NIS по време на нормалната работа, трябва да имате някакво подмножество от всички имена на хостове в /etc/hosts. Трябва да имате и някакъв вид разпознаване на името, дори когато няма активни мрежови интерфейси, например по време на зареждане. Това е не необходимо не просто за удобство, но и позволява да се използват символни имена на хостове във вашите мрежови rc-скриптове. По този начин, когато променяте IP адреси, трябва само да копирате обновения файл hosts на всички машини и да рестартирате, вместо да редактирате поотделно множество rc-файлове. Обикновено трябва да поставите всички локални имена и адреси на хостове в hosts, като добавяйки и информация за използваните шлюзове и NIS сървъри.2

Трябва да се уверите, че вашият резолвер използва информация от файла hosts само по време на първоначалното тестване. Примерните файлове, които придружават вашия DNS или NIS софтуер, могат да предизвикат странни резултати. За да накарате всички приложения да използват единствено /etc/hosts, когато търсят IP адреса на хост, трябва да редактирате файла /etc/host.conf. Коментирайте всеки ред, който започва с ключовата дума order като поставите пред него знака диез (#) и вмъкнете реда:

order hosts

Конфигурацията на библиотеката-резолвер е разгледана подробно в Глава 6, Конфигуриране на услугата за имена и резолвера.

Файлът hosts се състои от един запис на ред, включващ IP адрес, име на хост и незадължителен списък от псевдоними на името на хоста. Полетата са разделени от интервали или табулации, а полето с адреса трябва да започва в първата колона. Всичко след знака диез (#) се счита за коментар и се игнорира.

Имената на хостовете могат да бъдат както пълни, така и относителни спрямо локалния домейн. За vale във файла hosts обикновено трябва да зададете пълното име - vale.vbrew.com - и отделно само vale, така че хоста да е известен както с официалното си име, така и с по-краткото си локално име.

Ето един пример как може да изглежда файла hosts на Виртуалната пивоварна. Включени са две специални имена - vlager-if1 и vlager-if2, които дават адресите за двата интерфейса, използвани от vlager:


# Файлът hosts за Виртуалната пивоварна / Виртуалната винарна

#

# IP FQDN псевдоними



#

        1. localhost

#

172.16.1.1 vlager.vbrew.com vlager vlager-if1

172.16.1.2 vstout.vbrew.com vstout

172.16.1.3 vale.vbrew.com vale

#

172.16.2.1 vlager-if2



172.16.2.2 vbeaujolais.vbrew.com vbeaujolais

172.16.2.3 vbardolino.vbrew.com vbardolino

172.16.2.4 vchianti.vbrew.com vchianti

Точно както при IP адреса на хоста, понякога се налага да използвате символно име за адрес на мрежа. Затова за файла hosts съществува съответен файл /etc/networks, който съдържа връзките между имената на мрежите и номерата им и обратно. При Виртуалната пивоварна, можем да използваме файл network, изглеждащ по следния начин3:

# Файлът /etc/networks за Виртуалната пивоварна

brew-net 172.16.1.0

wine-net 172.16.2.0

Конфигуриране на интерфейс за IP

След като настроите вашия хардуер, както е описано в Глава 4, Конфигуриране на серийния хардуер, трябва да направите тези устройства известни на мрежовия софтуер в ядрото. За конфигурирането на мрежовите интерфейси и инициализирането на таблицата за маршрутизация се използват няколко команди. Тази операция обикновено се изпълнява от инициализиращия мрежата скрипт при всяко зареждане на системата. Основните инструменти за този процес се наричат ifconfig (if е съкращение от интерфейс) и route.


ifconfig се използва за осигуряване на достъп до даден интерфейс за мрежовия слой в ядрото. Това включва задаването на IP адрес и други параметри, и активирането на интерфейса, известно още като “вдигане” на интерфейса. Да бъде активен тук означава, че ядрото ще изпраща и получава IP дейтаграми през интерфейса. Най-простият начин да използвате тази команда е чрез:

ifconfig интерфейс ip-адрес

Тази команда задава ip-адреса на интерфейса и го активира. Всички други параметри се настройват според подразбиращите им се стойности. Например, подразбиращата се мрежова маска извлича от мрежовия клас на IP адреса, например 255.255.0.0 за адрес от клас В. Инструментът ifconfig е описан по-подробно в раздела “Всичко за ifconfig”.

Инструментът route ви позволява да добавяте или премахвате маршрути от таблицата за маршрутизация. Той може да бъде извикан по следния начин:

route [add|del] [-net|-host] цел [if]

Аргументите add и del определят дали добавяте или премахвате маршрут към целта. Аргументите –net и –host указват на командата route дали целта е мрежа или хост (ако не е посочено нищо се предполага, че е хост). Аргументът if отново не е задължителен и ви позволява да посочите към кой мрежов интерфейс трябва да се насочи маршрута –ядрото на Linux прави разумно предположение, в случай че не дадете такава информация. Тази тема ще бъде разгледана по-подробно в следващите раздели.


Интерфейсът Loopback


Първият интерфейс, който се активира, е интерфейсът loopback (примка):

# ifconfig lo 127.0.0.1

Понякога можете да видите фиктивното име localhost да се използва вместо IP адреса. ifconfig ще потърси името във файла hosts, където някой запис трябва да го декларира като име на хост за 127.0.0.1:

# Примерен запис за localhost в /etc/hosts


localhost 127.0.0.1

За да видите конфигурацията на даден интерфейс, стартирайте ifconfig като зададете като аргумент само името на интерфейса:

$ ifconfig lo

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

UP LOOPBACK RUNNING MTU:3924 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0


Collisions:0

Както виждате, на интерфейса loopback е зададена мрежова маска 255.0.0.0, тъй като 127.0.0.1 е адрес от клас А.

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

# route add 127.0.0.1

Отново можете да използвате localhost вместо IP адреса, при условие че сте го въвели във вашия файл /etc/hosts.

Сега трябва да проверите дали всичко работи добре, например като използвате ping. ping е мрежовия еквивалент на сонарно устройство4. Тази команда се използва за проверка дали даден адрес в действителност е достъпен и за измерване на закъснението при изпращане на дейтаграма до него и обратно. Необходимото време за този процес често се нарича и “време за пътуване в двете посоки”:

# ping localhost

PING localhost (127.0.0.1) : 56 data bytes

64 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=0.4 ms

64 bytes from 127.0.0.2: icmp_seq=0 ttl=255 time=0.4 ms

64 bytes from 127.0.0.3: icmp_seq=0 ttl=255 time=0.4 ms

^C


---- localhost ping statistics ----

3 packets transmitted, 3 packets received, 0% packet loss

round-trip min/avg/max = 0.4 / 0.4 / 0.4 ms

#

Когато извикате ping както е показано тук, той ще продължи да генерира пакети, докато не се прекъсне от потребителя. С ^C се обозначава мястото, където сме натиснали Ctrl-C.



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

Ако резултатът, който получите от ping, не прилича на показания в горния пример, значи имате проблем. Проверете всички грешки, ако те показват, че някой файл не е инсталиран правилно. Проверете дали командите ifconfig и route, които използвате, са съвместими с версията на работещото ядро и най-вече, че ядрото е компилирано с разрешена поддръжка на мрежа (можете да установите това от наличието на директорията /proc/net). Ако получите съобщение за грешка гласящо “Network unreachable” (мрежата е недостижима), най-вероятно сте задали погрешна командата route. Уверете се, че използвате същия адрес, който сте дали на ifconfig.

Описаните дотук стъпки са напълно достатъчни за използване на мрежови приложения на самостоятелен хост. След като добавите горните редове към вашия инициализиращ мрежата скрипт и се уверите, че той ще се изпълни по време на зареждане, можете да рестартирате машината си и да тествате различни приложения. Например, командата telnet localhost трябва да установи telnet връзка към вашия хост като изведе поканата за влизане login:.

Интерфейсът loopback е полезен не само като пример в книгите за мрежи или като средство за тестове по време на разработка, но се използва и при нормална работа от някои приложения5. Затова трябва винаги да го конфигурирате, независимо дали машината ви е свързана към мрежа или не е.


Ethernet интерфейси


Конфигурирането на един Ethernet интерфейс е почти същото като на интерфейса loopback; то изисква само няколко нови параметъра, когато използвате подмрежи.

Във Виртуалната пивоварна ние разделихме IP мрежата, която в началото беше от клас В, на подмрежи от клас С. За да конфигурираме интерфейса да разпознае това, параметрите на ifconfig трябва да бъдат следните:

# ifconfig eth0 vstout netmask 255.255.255.0

Тази команда задава IP адреса на vstout (172.16.1.2) на интерфейса eth0. Ако бяхме пропуснали мрежовата маска, ifconfig щеше да я извлече от класа на IP мрежата, което щеше да доведе до неправилната мрежова маска 255.255.0.0. Сега една бърза проверка показва:

# ifconfig eth0

eth0 Link encap 10Mps Ethernet HWaddr 00:00:C0:90:B3:42

inet addr 172.16.1.2 Bcast 172.16.1.255 Mask 255.255.255.0

UP BROADCAST RUNNING MTU 1500 Metric 1

RX packets 0 errors 0 dropped 0 overrun 0

TX packets 0 errors 0 dropped 0 overrun 0

Можете да видите, че ifconfig автоматично конфигурира broadcast адреса (полето Bcast) с обичайната стойност, която е номера на мрежата на хоста с единици във всички битове в полето за адрес на хоста. Освен това, максималната единица за предаване (максималният размер на IP дейтаграми, които ядрото ще генерира са този интерфейс) е зададена като максималния размер на Ethernet пакетите: 1500 байта. Обикновено се използват стойностите по подразбиране, но ако се наложи, всички тези стойности могат да бъдат променени със специални опции, които ще бъдат описани в раздела “Всичко за ifconfig”.

Също както за интерфейса loopback ще трябва да инсталирате един запис за маршрутизация, който информира ядрото за мрежата, която може да бъде достигната през eth0. За Виртуалната пивоварна можете да изпълните route със следните параметри:

# route add -net 172.16.1.0

На пръв поглед това изглежда малко като магия, защото не е съвсем ясно как route открива през кой интерфейс да маршрутизира. Обаче този трик е доста прост: ядрото проверява всички интерфейси, които са конфигурирани досега и сравнява адреса на целта (в този случай 172.16.1.0) с мрежовата част от адреса на интерфейса (т.е. извършва побитов AND между адреса на интерфейса и мрежовата маска). Единственият интерфейс, които съответства, е eth0.

Добре, а за какво е опцията net? Тя се използва, защото route може да обслужва едновременно маршрути към мрежи и към отделни хостове (както видяхме преди малко с localhost). Когато е зададен адрес в десетично-точков формат, route се опитва да разпознае дали това е име на мрежа или на хост като преглежда битовете от хост-частта. Ако хост-частта на адреса е нула, route предполага, че този адрес е на мрежа; в противен случай route го счита за адрес на хост. Следователно, route ще сметне, че 172.16.1.0 е адрес на хост, а не на мрежа, защото не може да знае, че използваме подмрежи. Затова трябва изрично да уведомим route, че това е мрежа и затова му подаваме флага net.

Разбира се, малко досадно е да се пише командата route, а и това е предпоставка за допускане на правописни грешки. По-удобен подход е да се използват имената на мрежите, които дефинирахме в /etc/networks. Този подход прави командата по-лесна за четене; дори флагът net може да бъде пропуснат, защото route знае, че 172.16.1.0 обозначава мрежа:

# route add brew-net

Сега, след като завършихте базовите стъпки на конфигурацията, трябва да се уверите, че вашият Ethernet интерфейс наистина работи добре. Изберете един хост от вашата мрежа, например vlager и въведете:

# ping vlager
PING vlager: 64 byte packets

64 bytes from 172.16.1.1: icmp_seq=0. time=11. ms

64 bytes from 172.16.1.1: icmp_seq=1. time=7. ms

64 bytes from 172.16.1.1: icmp_seq=2. time=12. ms

64 bytes from 172.16.1.1: icmp_seq=3. time=3. ms

^C

----vstout.vbrew.com PING Statistics----



4 packets transmitted, 4 packets received, 0

round-trip (ms) min/avg/max = 3/8/12

Ако не видите подобен резултат, значи нещо не е наред. Ако срещнете необичайно голям брой загубени пакети, това вероятно е хардуерен проблем като повредени или липсващи терминатори. Ако въобще не получите никакъв отговор, трябва да проверите конфигурацията на интерфейса с инструмента netstat, който е описан по-долу в раздела “Командата netstat”. Статистиката на пакетите, която се извежда от ifconfig, трябва да ви покаже дали въобще са били изпратени някакви пакети през интерфейса. Ако имате достъп до отдалечения хост, трябва да влезете в тази машина и да проверите статистиката на интерфейса. По този начин може да установите дали пакетите са били отхвърлени. Освен това, трябва да отпечатате информацията за маршрутизиране с route, за да проверите дали и двата хоста имат правилни записи за маршрутите. route отпечатва пълната таблица в ядрото с информацията за маршрутизиране, когато се извиква без аргументи (-n просто указва да се извеждат адресите с десетично-точков формат, вместо да се използва името на хоста):

# route -n


Kernel routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

127.0.0.1 * 255.255.255.255 UH 1 0 112 lo

172.16.1.0 * 255.255.255.0 U 1 0 10 eth0

По-подробно описание на значението на тези полета е дадено в следващия раздел “Командата netstat”. Колоната Flags съдържа списък с флаговете, зададени на всеки интерфейс. Флагът U винаги е вдигнат за активните интерфейси, а H указва, че целевият адрес е на хост. Ако флагът H е вдигнат за маршрут, който трябва да е маршрут към мрежа, ще трябва отново да стартирате командата route с опция –net. За да проверите дали въведено от вас маршрутизиране въобще се използва, проверете дали полето Use от втората до последната колона се увеличава между две извиквания на ping.

Маршрутизиране през шлюз


В предишния раздел описахме само конфигурирането на хост, имащ връзка само с една Ethernet мрежа. Много често, обаче, можете да срещнете мрежи, свързани една с друга посредством шлюзове (gateways). Тези шлюзове могат просто да свързват две или повече Ethernet мрежи, но могат и да осигуряват връзка с външния свят, например връзка с Интернет. За да използвате шлюз трябва да дадете допълнителна информация за маршрутизиране на мрежовия слой.

Ethernet мрежите на Виртуалната пивоварна и Виртуалната винарна са свързани чрез подобен шлюз, и по-точно хостът vlager. Ако предположим, че vlager вече е конфигуриран, трябва да добавим само един нов ред към таблицата с информацията за маршрутите на vstout, които да указва на ядрото, че то може да достигне всички хостове от мрежата на Винарната чрез vlager. Необходимото заклинание с route е показано по-долу; запазената дума gw означава, че следващия я аргумент обозначава шлюз:

# route add wine-net gw vlager

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

Този пример описва само един шлюз, който прехвърля пакети между две изолирани Ethernet мрежи. Сега си представете, че vlager е свързан и към Интернет (например, чрез допълнителна SLIP връзка). В такъв случай бихме искали дейтаграмите към която и да е друга мрежа, освен тази на Пивоварната, да бъдат подавани на vlager. Това може да бъде постигнато като той се направи подразбиращ се шлюз за vstout:

# route add default gw vlager

Името на мрежа default е синоним на 0.0.0.0 и обозначава подразбиращия се маршрут. Подразбиращия се маршрут съответства на всяко направление и ще се използва, ако няма по-точен маршрут за това направление. Не е необходимо да добавяте това име в /etc/networks, защото то е вградено в route.

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


Конфигуриране на шлюз


Конфигурирането на машина, която комутира пакети между две Ethernet мрежи е доста просто. Да предположим, че отново се намираме при vlager, който има две Ethernet карти, всяка от които е свързана с някоя от двете мрежи. Всичко, което трябва да направите, е да конфигурирате поотделно двата интерфейса, като им дадете съответните IP адреси и маршрути.

Много полезно е да добавите информация за двата интерфейса към файла hosts, както е показано в следващия пример, така че да имаме удобни имена и за тях:

172.16.1.1 vlager.vbrew.com vlager vlager-if1

172.16.2.1 vlager-if2

Тогава последователността от команди за конфигуриране на двата интерфейса е:

# ifconfig eth0 vlager-if1


# route add brew-net
# ifconfig eth1 vlager-if2
# route add wine-net

Ако тази последователност не работи, уверете се, че вашето ядро е компилирано с разрешена поддръжка на IP препращане (IP forwarding). Един добър начин да направите това е да проверите дали първото число на втория ред в /proc/net/snmp е 1.


Интерфейсът PLIP


PLIP връзката, използвана за свързване на две машини, е малко по-различна от Ethernet. PLIP връзките са пример за така наречените връзки точка-до-точка (point-to-point), което всъщност означава, че има единствен хост на всеки от краищата на връзката. Мрежите като Ethernet се наричат излъчващи (broadcast) мрежи. Конфигурирането на връзките точка-до-точка е по-различно, защото те за разлика от излъчващите мрежи, не поддържат своя собствена мрежа.

PLIP предоставя много евтини и преносими връзки между компютрите. Като пример ще вземем преносимия компютър на работник във Виртуалната пивоварна, който се свързва с vlager чрез PLIP. Самият преносим компютър се казва vlite и има само един паралелен порт. По време на зареждане този порт ще бъде регистриран като plip1. За да активирате връзката, трябва да конфигурирате интерфейса plip1, използвайки следните команди6:

# ifconfig plip1 vlite pointopoint vlager
# route add default gw vlager

Първата команда конфигурира интерфейса, като указва на ядрото, че това е връзка от тип точка-до-точка, като отдалечената страна има адреса на vlager. Втората команда инсталира подразбиращ се маршрут, използвайки vlager като шлюз. На vlager е необходима подобна команда ifconfig, за да активира връзката (не е необходимо извикване на route):

# ifconfig plip1 vlager pointopoint vlite

Забележете, че интерфейсът plip1 на vlager не се нуждае от отделен IP адрес, но също така може да се зададе и 172.16.1.1. Мрежите точка-до-точка не поддържат директно мрежа, затова и интерфейсите не изискват адрес на поддържаната мрежа. Ядрото използва информацията за интерфейса в таблицата с маршрутите, за да избегне всякакви възможни обърквания7.

По този начин конфигурирахме маршрутизирането от преносимия компютър към мрежата на Пивоварната; това, което все още липсва, е начин на маршрутизиране от хостовете на Пивоварната към vlite. Един определено трудоемък начин е да се добави специфичен маршрут към таблиците с маршрути на всеки хост, който да определя vlager като шлюз за vlite:

# route add vlite gw vlager

Динамичното маршрутизиране предлага много по добра възможност за временни маршрути. Може да използвате gated - демона за маршрутизиране, който трябва да инсталирате на всеки хост в мрежата за да разпространите динамично информацията за маршрутизиране. Най-лесната възможност, обаче, е да използвате proxy ARP (Address Resolution Protocol – протокол за разпознаване на адреси). С proxy ARP, vlager ще отговаря на всяка ARP заявка за vlite като изпраща своя собствен Ethernet адрес. Всички пакети за vlite ще пристигнат при vlager, който след това ще ги препрати към преносимия компютър. Ще се върнем отново на proxy ARP в раздела “Проверяване на ARP таблиците”.

Настоящите версии на net-tools съдържат инструмент, наречен plipconfig, които ви позволява да задавате определени PLIP таймингови параметри. Номера на IRQ, което се използва от порта за принтер, може да се зададе с командата ifconfig.


Интерфейсите SLIP и PPP


Въпреки че SLIP и PPP връзките са само прости връзки от типа точка-до-точка като PLIP връзките, има доста повече какво да се каже за тях. Обикновено, установяването на SLIP връзка включва набиране на отдалечената страна през вашия модем и задаване на SLIP режим в серийната линия. PPP се използва по подобен начин. Ще разгледаме SLIP и PPP по-подробно в Глава 7 и Глава 8, Протоколът PPP.

Фиктивният интерфейс


Фиктивният интерфейс е малко екзотичен, но въпреки това е много полезен. Основното му предимство е при самостоятелни хостове и машини, чиито единствени IP мрежови връзки са чрез набиране през телефонна линия. Всъщност, тези машини в повечето време са самостоятелни хостове.

Дилемата при самостоятелните хостове е, че имат само едно активно мрежово устройство – устройството loopback, на което обикновено се задава адрес 127.0.0.1. В някои случаи, обаче, трябва да изпратите данни към “официалния” IP адрес на локалния хост. Като пример си представете преносимия компютър vlite, който не е свързан с мрежа в този пример. Някое приложение на vlite може да иска да изпрати данни към друго приложение на същия хост. Анализа на /etc/hosts на vlite дава IP адрес 172.16.1.65, така че приложението се опитва да изпрати данни на този адрес. Тъй като в момента единствения активен интерфейсът на машината е само loopback, ядрото не знае, че 172.16.1.65 всъщност е същата машина! Като резултат, ядрото игнорира дейтаграмата и връща на приложението съобщение за грешка.

Тук е мястото, където се намесва фиктивното устройство. То решава дилемата като просто изпълнява противоположното на интерфейса loopback. В случая с vlite, просто му задавате адрес 172.16.1.65 и добавяте маршрут към хост, който да сочи към него. Тогава всяка дейтаграма за 172.16.1.65 ще се доставя локално. Правилното извикване е следното8:

# ifconfig dummy vlite


# route add vlite

IP псевдоними


Новите ядра имат възможност, която може напълно да замести фиктивния интерфейс и да изпълнява и други полезни функции. IP псевдонимите ви позволяват да конфигурирате няколко IP адреса на едно физическо устройство. В най-простия случай, можете да репликирате функцията на фиктивния интерфейс посредством конфигуриране на адреса на хоста като псевдоним на loopback интерфейса и напълно да избегнете използването на фиктивен интерфейс. В по-сложни ситуации, можете да конфигурирате вашия хост да изглежда като няколко различни хоста, всеки със свой собствен IP адрес. Тази конфигурация понякога се нарича “Виртуален хостинг”, въпреки че технически този термин се използва и за множество други техники9.

За да конфигурирате псевдоним на интерфейс, първо трябва да се уверите, че ядрото ви е компилирано с поддръжка на IP псевдоними (проверете дали имате файл /proc/net/ip_alias; ако го нямате ще трябва да прекомпилирате ядрото си).

Конфигурирането на IP псевдоним теоретично е идентично на конфигурирането на реално мрежово устройство, но използвате специално име, за да покажете, че това е псевдоним. Например:

# ifconfig lo:0 172.16.1.1

Тази команда ще създаде псевдоним на loopback интерфейса с адрес 172.16.1.1. IP псевдонимите се посочват като се добави :n към действителното мрежово устройство, където “n” е цяло число. В нашия пример, мрежовото устройство, на което правим псевдоним, е lo и за него правим псевдоним с номер 0. По този начин едно физическо устройство може да поддържа множество псевдоними.

Всеки псевдоним може да се третира като отделно устройство и от гледна точка на IP софтуера в ядрото, той ще бъде такова; този интерфейс обаче, ще споделя своя хардуер с друг интерфейс.


Всичко за ifconfig


Съществуват още много повече параметри на ifconfig, отколкото сме описали досега. Нормалното извикване на този инструмент е следното:

ifconfig интерфейс [адрес [параметри] ]



интерфейс е името на интерфейса, а адрес е IP адреса, който ще се зададе на интерфейса. Това може да бъде или IP адрес, записан в десетично-точков формат, или име, което ifconfig ще потърси в /etc/hosts.

Ако ifconfig сe извика само с името на интерфейса, ще бъде изведена конфигурация за този интерфейс. Когато се извиква без някакви параметри, се извеждат всички интерфейси, които сте конфигурирали досега; опцията –а показва неактивните от тях. Примерно извикване за Ethernet интерфейса eth0 ще изглежда така:

# ifconfig eth0
eth0 Link encap 10Mbps Ethernet HWaddr 00:00:C0:90:B3:42

inet addr 172.16.1.2 Bcast 172.16.1.255 Mask 255.255.255.0

UP BROADCAST RUNNING MTU 1500 Metric 0

RX packets 3136 errors 217 dropped 7 overrun 26

TX packets 1752 errors 25 dropped 0 overrun 0

Полетата MTU и Metric показват текущите MTU и метрични стойности за този интерфейс. Метричната стойност традиционно се използва от някои операционни системи за изчисляване на стойността на маршрута. Linux все още не използва тази стойност, но я дефинира с цел съвместимост.

Редовете, започващи с RX и TX показват колко пакети са получени и изпратени без грешки, колко грешки са възникнали, колко пакета са игнорирани (най-вероятно поради недостиг на памет) и колко са изгубени поради препълване. Препълване при получаване обикновено възниква, когато пакетите пристигат по-бързо, отколкото ядрото може да ги обслужи. Флаговите стойности, изведени от ifconfig, съответстват приблизително на имената на опциите от командния ред; те са описани по-долу.

Следва списък от параметрите, разпознавани от ifconfig, със съответните имена на флаговете. Опции, които просто включват определена функция, позволяват тя отново да бъде спряна, като се постави тире (-) пред опцията.

up

Тази опция прави даден интерфейс достъпен за IP слоя. Тя се подразбира, когато с командния ред е даден адрес. Може да се използва също и отново да разреши интерфейс, които временно е бил спрян с опцията down.



Тази опция съответства на флаговете UP и RUNNING.

down


Тази опция маркира интерфейс като недостъпен за IP слоя. Резултатът е, че какъвто и да е IP трафик през този интерфейс се забранява. Забележка: тази опция автоматично ще изтрие всички маршрути, които използват този интерфейс.

netmask маска

Тази опция задава маска на подмрежата, която да се използва от интерфейса. Тя може да се даде като 32-битово шестнадесетично число, предхождано от 0x или в десетично-точков формат. Макар че вторият формат е по-често използван, с шестнадесетичното представяне често се работи по-лесно. Мрежовите маски всъщност са двоични числа и е по-лесно да се извършва двоично-шестнадесетично, отколкото двоично-десетично преобразуване.

pointopoint адрес

Тази опция се използва за IP връзки от тип точка-до-точка, която включва само два хоста. Тя е необходима например за конфигуриране на SLIP и PLIP интерфейси. Ако е бил зададен адрес точка-до-точка, ifconfig извежда флага POINTOPOINT.

broadcast адрес

Адресът за предаване до всички станции обикновено се образува от номера на мрежата, като във всички битове от хост-частта се записват единици. Някои реализации на IP (например системи, произлезли от BSD 4.2) използват различна схема, при която всички битове от хост-частта се изчистват. Опцията broadcast се използва за адаптиране към тези странни среди. Ако е зададен broadcast адрес, ifconfig извежда флага BROADCAST.

irq


Тази опция ви позволява да зададете IRQ линията, използвана от определени устройства. Това е особено полезно за PLIP, но може също да се използва и за някои Ethernet карти.

metric число

Тази опция може да се използва, за да се зададе метрична стойност на запис в таблицата с маршрути за интерфейса. Тази метрика се използва от протокола RIP (Routing Information Protocol) за създаване на таблици за маршрутизиране за мрежата10. Подразбиращата се метрика, използвана от ifconfig, е нула. Ако на машината ви не работи RIP демон, тази опция не ви е необходима; а ако имате такъв, много рядко ще ви се налага да промените метричната стойност.

mtu байтове

Задава максималната дължина на единица за предаване (Maximum Transmission Unit), която е максималния брой октети, които интерфейсът може да обработи за една транзакция. За Ethernet мрежите, MTU по подразбиране е 1500 (най-големият позволен размер за Ethernet пакет); за SLIP интерфейсите MTU е 296. (Няма ограничение за MTU при SLIP връзки; тази стойност просто е добър компромис.)

arp


Това е опция, специфична за broadcast мрежи като Ethernet или пакетно радио. Тя позволява използването на протокола ARP (Address Resolution Protocol – протокол за разпознаване на адреси) за откриване на физическите адреси на свързаните към мрежата хостове. За broadcast мрежите този протокол е активиран по подразбиране. Ако ARP е забранен, ifconfig извежда флага NOARP.

-arp


Тази опция забранява използването на ARP на този интерфейс.

promisc


Тази команда поставя интерфейса в т.нар promiscuous режим. При една broadcast мрежа това конфигурира интерфейса да приема всички пакети, независимо дали са предназначени за този хост или не. Това позволява анализиране на мрежовия трафик посредством пакетни филтри, наречено още Ethernet snooping (Ethernet следене). Обикновено това е добра техника за откриване на мрежови проблеми, които иначе са трудно откриваеми. Инструменти като tcpdump разчитат на това.

От друга страна, тази опция позволява на недобронамерени хора да вършат опасни неща, например да следят трафика на вашата мрежа за пароли. Можете да се защитите от този тип атаки като забраните на който и да е да включва своя компютър към вашата мрежа. Може също така да използвате сигурни протоколи за удостоверяване на самоличността като Kerberos или комплекта за влизане secure shell11. Тази опция съответства на флага PROMISC.

-promisc

Тази опция изключва режима promiscuous.

allmulti

Multicast адресите са като broadcast Ethernet адресите, само че вместо автоматично да изпращат до всички станции, единствените, които получават пакети, изпратени на един multicast адрес, са тези, които са програмирани да следят пакетите за него. Това е полезно за приложения като Ethernet-базирани видео конференции или мрежово радио, които са само за тези, които искат да ги приемат. Адресирането до ограничен брой потребители се поддържа от повечето, но не от всички Ethernet драйвери. Когато тази опция е разрешена, интерфейсът получава и предава multicast пакети за обработка. Тя съответства на флага ALLMULTI.

-allmulti

Тази опция изключва multicast адресите.


Командата netstat


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

Отпечатване на таблицата с маршрути


Когато стартирате netstat с флага –r, ще бъде отпечатана таблицата с маршрути в ядрото по начина, по който правехме това с route. За vstout ще получим следния резултат:

# netstat -nr


Kernel IP routing table

Destination Gateway Genmask Flags MSS Window irtt Iface

127.0.0.1 * 255.255.255.255 UH 0 0 0 lo

172.16.1.0 * 255.255.255.0 U 0 0 0 eth0

172.16.2.0 172.16.1.1 255.255.255.0 UG 0 0 0 eth0

Опцията –n указва на netstat да отпечатва адресите посредством като IP номера в десетично-точков формат, вместо да използва символните имена на хостове и мрежи. Тази опция е особено полезна, когато искате да избегнете разпознаването на адресите в мрежата (например, чрез DNS или NIS сървър).

Втората колона от резултата от netstat показва шлюза, към който сочи маршрута. Ако не се използва шлюз се извежда звезда. Третата колона показва “общността” на маршрута, т.е. мрежовата маска за този маршрут. Когато е даден IP адрес, за който се търси подходящ маршрут, ядрото преминава през всеки от записите в таблицата с маршрути, като извършва побитово AND на адреса и маската, преди да го сравни с целта на маршрута.

Четвъртата колона отпечатва следните флагове, които описват маршрута:

G

Маршрута използва шлюз.



U

Интерфейсът, които ще се използва, е активен (up).

H

През този маршрут може да се достигне само един хост. Например, това е случая с loopback записа 127.0.0.1.



D

Този маршрут е създаден динамично. Той се конфигурира, ако записът в таблицата е бил генериран от маршрутизиращ демон като gated или от ICMP съобщение за премаршрут (виж раздела “Протоколът ICMP” в Глава 2).

M

Този маршрут се задава ако записът в таблицата е модифициран от ICMP съобщение за пренасочване.



!

Маршрутът е отхвърлящ маршрут и дейтаграмите ще бъдат игнорирани.

Следващите три колони показват MSS, Window и irtt, които се прилагат към TCP връзките, установени през този маршрут. MSS е съкращение от Maximum Segment Size (максимален размер на сегмент) и представлява размера на най-голямата дейтаграма, която ядрото ще конструира за предаване през този маршрут. Window (прозорец) е максималното количество данни, които системата ще приеме от един отдалечен хост за една поредица (burst). Съкращението irtt идва от “initial round trip time” (начално време за пътуване в двете посоки). Протоколът TCP гарантира надеждното доставяне на данни между хостовете посредством повторно изпращане на дейтаграми, в случай че те се изгубят. Този протокол пази текуща информация за това колко време е необходимо на една дейтаграма, за да бъде доставена до отдалечения хост и да се получи потвърждение за доставката. По този начин TCP знае колко трябва да изчака, преди да приеме, че дейтаграмата трябва да се изпрати отново; тази информация се нарича време за пътуване в двете посоки. Първоначалното време за пътуване е стойността, която TCP ще използва, когато една връзка се създава за пръв път. За повечето типове мрежи стойността по подразбиране е подходяща, но за някои по-бавни мрежи, например за определени любителски радио-мрежи, това време е твърде кратко и причинява излишно препредаване. Стойността на irtt може да се зададе чрез командата route. Стойност нула в това поле означава, че се използват подразбиращите се стойности.

И накрая, последното поле показва мрежовия интерфейс, които се използва от този маршрут.


Показване на статистика за интерфейса


Когато се извиква с флага –i, netstat показва статистика за конфигурираните в момента мрежови интерфейси. Ако е зададена и опцията –a, ще бъдат изведени всички интерфейси, които се намират в ядрото, а не само конфигурираните в момента. За vstout изходът от netstat ще бъде следния:

# netstat -i


Kernel Interface table

Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flags

lo 0 0 3185 0 0 0 3185 0 0 0 BLRU

eth0 1500 0 972633 17 20 120 628711 217 0 0 BRU

Полетата MTU и Met показват текущите MTU и метрични стойности за този интерфейс. Колоните RX и TX показват колко пакети са изпратени или получени без грешки (RX-OK/ TX-OK) или повредени (RX-ERR/ TX-ERR); колко са били игнорирани (RX-DRP/ TX-DRP); и колко са изгубени поради препълване (RX-OVR/ TX-OVR).

Последната колона показва зададените за този интерфейс флагове. Тези символи са едносимволната версия на пълните имена на флаговете, които се извеждат, когато се проверява конфигурацията на интерфейса с ifconfig:

B

Зададен е broadcast адрес.



L

Този интерфейс е loopback устройство.

M

Приемат се всички пакети (promiscuous режим).



О

ARP е забранен за този интерфейс.

Р

Това е връзка от тип точка-до-точка.



R

Интерфейсът е работещ.

U

Интерфейсът е активен.


Извеждане на връзките


netstat поддържа комплект от опции за показване на активни и пасивни гнезда (sockets). Опциите -t, -u, -w и -x показват активни TCP, UDP, RAW или Unix socket-връзки. Ако в подадете и флага –а, ще бъдат показани също и гнездата, които очакват връзка (т.е. слушащите). Това ще ви даде списък на всички сървъри, които в момента работят на вашата система.

Стартирането на netstat -ta на vlager дава следния резултат:

$ netstat -ta
Active Internet Connections

Proto Recv-Q Send-Q Local Address Foreign Address (State)

tcp 0 0 *:domain *:* LISTEN

tcp 0 0 *:time *:* LISTEN

tcp 0 0 *:smtp *:* LISTEN

tcp 0 0 vlager:smtp vstout:1040 ESTABLISHED

tcp 0 0 *:telnet *:* LISTEN

tcp 0 0 localhost:1046 vbardolino:telnet ESTABLISHED

tcp 0 0 *:chargen *:* LISTEN

tcp 0 0 *:daytime *:* LISTEN

tcp 0 0 *:discard *:* LISTEN

tcp 0 0 *:echo *:* LISTEN

tcp 0 0 *:shell *:* LISTEN

tcp 0 0 *:login *:* LISTEN

Този резултат показва, че повечето сървъри просто очакват входяща връзка. Все пак обаче, четвъртият ред показва входяща SMTP връзка от vstout, а шестият ред ни показва, че имаме изходяща telnet връзка към vbardolino.12

Използването на флага –а самостоятелно ще изведе всички гнезда от всички семейства.

Проверяване на ARP таблиците

В някои случаи е полезно да прегледате и промените съдържанието на ARP таблиците на ядрото, например ако подозирате, че дублиращ се Интернет адрес е причината за някои появяващ се от време на време мрежов проблем. Инструментът arp е създаден за такива ситуации. Опциите от командния му ред са:

arp [-v] [-t hwtype] -a [hostname]

arp [-v] [-t hwtype] -s hostname hwaddr


arp [-v] -d hostname [hostname...]

Всички аргументи hostname (име на хост) могат да бъдат или символни имена, или IP адреси в десетично-точков формат.

Първото извикване показва ARP записа за определения IP адрес или хост, или всички известни хостове, ако не е зададено име на хост. Например, стартирането на arp на vlager може да даде:

# arp -a


IP address HW type HW address

172.16.1.3 10Mbps Ethernet 00:00:C0:5A:42:C1

172.16.1.2 10Mbps Ethernet 00:00:C0:90:B3:42

172.16.2.4 10Mbps Ethernet 00:00:C0:04:69:AA

което показва Ethernet адресите на vlager, vstout и vale.

Може да ограничите извеждането само за определен хардуерен тип чрез опцията –t. Можете да използвате аргументи ether, ax25 или pronet, означаващи съответно 10 Mbps Ethernet, AMPR AX.25, и IEEE 802.5 оборудване.

Опцията -s се използва за постоянно добавяне към ARP таблиците на Ethernet адреса на хоста, зададен с hostname. Аргументът hwaddr задава хардуерния адрес, които по подразбиране се очаква да е Ethernet адрес, зададен като шест шестнадесетични числа (байтове), разделени с двоеточия. Освен това, можете да зададете хардуерния адрес за други типове хардуер, използвайки опцията –t.

Понякога ARP запитванията за отдалечен хост се провалят, например когато отдалечения ARP драйвер съдържа програмни грешки или съществува друг хост в мрежата, който по погрешка се идентифицира с IP адреса на този хост; този проблем изисква вие ръчно да добавите IP адрес към ARP таблицата. Писането на IP адреси в ARP таблицата освен това е (много драстична) мярка, с която се защитавате от хостове във вашата мрежа, които се представят като някой друг.

Стартирането на arp с ключа -d изтрива всички ARP записи, свързани с дадения хост. Този ключ може да бъде използван, за да укаже на интерфейса отново да опита да получи Ethernet адреса за посочен IP адрес. Това е полезно, когато една неправилно конфигурирана система е разпространила погрешна ARP информация (разбира се, първо ще трябва да преконфигурирате неизправния хост).

Опцията -s може също да се използва, за да реализирате proxy ARP. Това е специална техника, чрез която един хост, например gate, работи като шлюз към друг хост, да кажем fnord, като симулира, че и двата адреса се отнасят за един и същи хост, а именно gate. Това се постига, като се направи ARP запис за fnord, който да сочи към собствения Ethernet интерфейс на gate. Сега, когато един хост изпрати ARP запитване за fnord, gate ще върне отговор, съдържащ неговия собствен Ethernet адрес. След това запитващия хост ще изпраща съответните дейтаграми към gate, който ще ги препраща към fnord.

Тези усложнения могат да ви бъдат необходими, когато желаете да получите достъп до fnord от DOS машина с лоша реализация на TCP, която не разбира добре маршрутизирането. Когато използвате proxy ARP, за DOS машината ще изглежда сякаш fnord е в локалната подмрежа, затова не й се налага да знае нещо за това как се маршрутизира през шлюз.

Друго полезно приложение на proxy ARP е когато един от вашите хостове работи само временно като шлюз към някой хост, например, през телефонна връзка. В един от предишните примери разгледахме преносимия компютър vlite, който от време на време беше свързан към vlager чрез PLIP връзка. Разбира се, това приложение ще работи само ако адресът на хоста, за който искате да осигурите proxy ARP, е в същата IP подмрежа като вашия шлюз. vstout може да работи като proxy ARP за всеки хост от подмрежата на Пивоварната (172.16.1.0), но никога за хост от подмрежата на Винарната (172.16.2.0).

Правилното извикване, за да предоставите proxy ARP за fnord е дадено на следващите редове; разбира се, даденият Ethernet адрес трябва да е този на gate:

# arp -s fnord 00:00:c0:a1:42:e0 pub

Записът за proxy ARP може да бъде премахнат по следния начин:

# arp -d fnord



1 Първият номер във всяка подмрежа е нейният адрес, а последният номер е запазен като broadcast адрес, така че всъщност остават 62 хоста на подмрежа.

2 Адресът на даден NIS сървър ви е необходим само, ако използвате NYS на Peter Eriksson. Другите реализации на NIS откриват своите сървъри само по време на работа като използват ypbind.

3 Забележка: имената в network не трябва да са в противоречие с имената на хостовете от файла hosts, в противен случай някои програми могат да работят по странен начин.

4


5 Например, всички приложения, базирани на RPC, използват интерфейса loopback, за да се регистрират в домейна portmapper при стартирането си. Това включва NIS и NFS.

6 Забележка: pointopoint не е правописна грешка. То наистина се записва така.

7 Като предохранителна мярка, трябва да конфигурирате вашите PLIP или SLIP връзки само, след като напълно сте конфигурирали записите за Ethernet в таблицата с маршрути. В противен случай, при някои по-стари ядра, мрежовия маршрут може в крайна сметка може да сочи към връзката точка-до-точка.

8 Фиктивният интерфейс се нарича dummy0, ако сте го заредили като модул, вместо да сте го избрали като вградена опция на ядрото. Това е така, защото можете да зареждате няколко модула и да имате повече от едно фиктивно устройство.

9 По-конкретно, използването на IP псевдонимите е известно като виртуален хостинг в мрежовия слой. В световете на WWW и SMTP е по-обичайно да се използва виртуален хостинг в приложния слой, в който един и същ IP адрес се използва за всеки виртуален хост, но при всяка заявка в приложния слой се подава различно име на хост. Услуги като FTP не могат да работят по този начин и изискват виртуален хостинг в мрежовия слой.

10 RIP избира оптимален маршрут към даден хост, базирайки се на “дължината” на пътя. Тази дължина се изчислява като се съберат отделните метрични стойности на всяка връзка хост-до-хост. По подразбиране, едно препращане има дължина 1, но може да бъде всяко положително число, по-малко от 16. (Маршрут с дължина 16 е равен на безкрайност. Такива маршрути се считат за неизползваеми.) Параметърът метрика определя цената на това препращане, която след това се разпространява от маршрутизиращия демон.

11 ssh може да се вземе от сървъра ftp.cs.hut.fi, директория /pub/ssh.

12 Може да прецените дали една връзка е изходяща от номерата на портовете. Номерът на порта за викащия хост винаги е обикновено цяло число. На извикания хост за активните стандартни портове на услуги, netstat ще използва символни имена като smtp, които се намират в /etc/services.

Каталог: DIP -> lessons
lessons -> Компютърна система с процесор Intel Pentium ІІ компютърните системи с процесор Intel Pentium ІІ използват архитектура „северен-южен мост”
lessons -> 3. 15 Дънна платка с Chipset Intel 965 за процесор Intel Pentium Чипсети от серията 96x
lessons -> 1. 1Структура на микропроцесорна система. Характеристики на процесор Intel 8088, функции на изпълнителното устройство, формат на инструкциите. Входно – изходни сигнали. Режими на работа
lessons -> Компютърна система с процесор Intel Pentium, Socket 7 Компютърните системи с процесор Intel Pentium използват архитектура „северен-южен мост”


Сподели с приятели:




©obuch.info 2024
отнасят до администрацията

    Начална страница