Home    Решения    Услуги    Download    Публикации    Работа    Продукти    Документи
 

 

 
Print this page/Отпечатай тази страница  

Домашна мрежа с Linux

от Йовко Ламбрев ([email protected])



   Домашната мрежа за много хора по света (а и у нас) вече не е екзотика, нито излишен лукс. Цената и е символична, а удобствата, които предоставя съвсем не са за пренебрегване. Разбира се, за да имате мрежа е нужно да имате поне два компютъра. 
   Съществуват множество варианти за компютърни мрежи - оптични, безжични, радиомрежи, мрежи по инфрачервен канал, но най-използваните и най-евтини среди за предаване са кабелните и по-специално тънкият коаксиален кабел и кабелът с усукана двойка за мрежа тип Ethernet.
   Мрежата с тънък коаксиален кабел можете да срещнете почти навсякъде - наричат я още thinnet или даже cheapernet - последното и название надявам се ви обяснява достатъчно защо е толкова популярна. Всяка мрежова карта за такъв тип мрежа има коаксиален конектор, посредством който се свързва с коаксиалния кабелен сегмент чрез BNC накрайник. Коаксиалният конектор представлява малък метален сплит на три коаксиални връзки като след свързването му към картата остават да бъдат прикрепени кабели от останалите му две страни. Ако на едната страна на конектора няма нужда от кабел (т.е. това е края на сегмента) там се поставя специален накрайник, наречен терминатор. Топологията на мрежата е тип "шина" т.е. ако имаме три компютъра те се навързват последователно един за друг - т.е. от мрежовата карта на средния компютър тръгват два коаксиални кабела към мрежовите адаптери на другите два компютъра, а на останалите свободни страни на коаксиалните конектори на двата странични компютъра се поставят терминатори. Ако трябва да присъединим по-късно към мрежата още един компютър махаме единия терминатор и го поставяме на новия компютър, който посредством ново парче кабел свързваме към досегашната мрежа. Естествено, разбирате че при подобна топология ако някой от кабелите се прекъсне това най-вероятно ще опропасти предаването на данните в целият сегмент. Кабелите се свързват директно към мрежовия адаптер на компютъра - не се допускат разклонения или пък директно свързване на сегменти. Естествено можем да имаме няколко сегмента - но това се прави с повторител или пък с компютър на който сме поставили две мрежови карти - по една към всеки сегмент. Максималната дължина на всеки сегмент е 185m, има и изискване за минимална дължина на коаксиалните парчета между компютрите, която е 0,5m. Максималната скорост на предаване по тази мрежа е 10Mbps.
   Напоследък тънкия коаксиален Ethernet се измества от кабелите с усукана двойка. Топологията на такава мрежа е "звезда", което означава, че във всеки сегмент имаме само един компютър. Обикновено се ползват UTP (Unshielded twisted pair) или STP (Shielded twisted pair) кабели с четири чифта медни жила. Реално се използват само два чифта - по единия се приемат данни, а по-другия се предават. Накрайниците на сегмента са RJ-45 и се свързват директно към мрежовия адаптер на компютъра от една страна и в концентратора (hub) от другата. Всъщност концентраторът е устройството, което прави този тип мрежа малко по-скъпа, но не можете да минете без него - броят компютри, които можете да включите в мрежата (т.е. броят сегменти) също зависи от възможностите на концентратора. Именно концентраторът се явява средната точка на звездовидната мрежа. Той работи на ниско ниво и е напълно прозрачно (невидимо) устройство за мрежовите приложения. Скоростта на предаване на тази мрежа е 10 пъти по-голяма или 100Mbps. Максималната дължина на сегмент или на разстоянието от компютър до концентратора е 100m. Кабелите, които се продават могат да бъдат 3-та, 4-та или 5-та категория - за да имате 100Mbit-ова мрежа 100Base-T задължително трябва да използвате 5-та категория кабели и конектори. (Заб.: В действителност когато се прави голяма мрежа се използват розетки по стените, кабелни канали, patch-кабели и панели, но всичко това в домашни условия можете спокойно да пренебрегнете и спестите.)
   Ако имате само два компютъра можете да ги свържете с един единствен UTP кабел без всякакъв концентратор като кръстосате двата чифта - този за предаване и приемане. Ако не знаете как - обърнете се към най-близката компютърна фирма да ви направи такъв кабел.
   Всъщност вероятно се досещате, че е напълно възможно да сложим в един компютър две мрежови платки едната за коаксиален Ethernet, а другата за UTP - така ще получим концентратор с един коаксиален 10-мегабитов сегмент и един 100-мегабитов по UTP. Всъщност ако използвате кръстосан UTP кабел до друг компютър връзката ви ще е пълен дуплекс и теоретично имате два пъти по-висока скорост т.е. 200 мегабита в секунда - в действителност не е точно два пъти, но това не е тема на този материал.
    Нека сега разгледаме един реален пример:

 

    Да предположим, че имаме три компютъра и искаме да ги свържем в локална мрежа в къщи. Единият нарочваме за концентратор като му слагаме две мрежови карти и евентуално за gateway към Интернет ако му поставим и модем, а другите два използваме за работни станции. Ако компютърът-шлюз (gateway) е достатъчно мощен нищо не му пречи той да бъде ползван също като работна станция или някакъв сървър - файлов сървър, FTP или web-сървър. Както вече споменахме по-горе двете карти могат да са различни - едната да е за тънък коаксиален кабел, а другата зa UTP - от тук нататък приемаме, че коректно и съгласно всички изисквания сте изградили физическата си връзка - остава да стартираме мрежа върху нея.
    Нашият компютър-gateway има инсталиран Linux, а операционната система на останалите не е от съществено значение, но нека приемем, че и там имаме Linux-и. Примерът няма да се измени ни най-малко ако приемем, че някъде имаме FreeBSD, Windows стига да сме в състояние да опишем маршрутизирането за съответната операционна система както ще правим малко по-долу.
    И така - след като имаме два сегмента имаме две мрежи - нека едната бъде 192.168.0.0, а другата 192.168.17.0 - ако тези не ви харесват изберете си други, но нека префикса е 192.168. - това е конвенция за вътрешна клас C мрежа. Мрежовата маска и на двете мрежи е 255.255.255.0 - това означава, че можем да имаме 254 машини с IP адреси от 192.168.1.1 до 192.168.1.254, адресът на мрежата е 192.168.1.0, а broadcast адресът е 192.168.1.255. Мрежовите интерфейси на нашия Linux gateway нека бъдат съответно

 

eth0

192.168.1.1
eth1 192.168.17.1

   Ако правилно сме конфигурирали интерфейсите и те работят, подавайки командата ifconfig трябва да получим резултат подобен на следния: 

eth0      Link encap:Ethernet  HWaddr 00:06:29:38:0C:99
          inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4140723 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4461135 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          Interrupt:15 Base address:0x2180

eth1      Link encap:Ethernet  HWaddr 00:10:5A:F4:71:F3
          inet addr:192.168.17.1  Bcast:192.168.17.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7096657 errors:10 dropped:0 overruns:0 frame:10
          TX packets:4465753 errors:0 dropped:0 overruns:0 carrier:2
          collisions:535 txqueuelen:100
          Interrupt:10 Base address:0x5100

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:429912 errors:0 dropped:0 overruns:0 frame:0
          TX packets:429912 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0

   Единият ни компютър нека има адрес 192.168.1.2, а другият от другата мрежа 192.168.17.2. Ако решим да включим например и преносимия си компютър в мрежата или ни дойде на гости познат с лаптоп можем например да му дадем адрес 192.168.17.3.
   Какво трябва да направим при компютъра 192.168.1.2 за да може той да вижда останалите компютри в мрежата. Всъщност той трябва да знае кой компютър стои отсреща в случая 192.168.1.1 - забележете, че нашият gateway има два IP адреса, но от гледна точка на компютрите от мрежа 192.168.1.0 какъвто е 192.168.1.2 това е адресът 192.168.1.1. Достатъчно е на този компютър да установим за негов gateway по подразбиране (default gateway) интерфейса 192.168.1.1 ако операционната система е Linux това става с командата:

/sbin/route add default gw 192.168.1.1

или да редактирате на ръка конфигурационния файл /etc/sysconfig/network като установите правилния default gateway. Файлът /etc/sysconfig/static-routes има следния вид - малко обратен на формата на командата route:

eth0 net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1
eth0 net 192.168.17.0 netmask 255.255.255.0 gw 192.168.17.1 

За някои дистрибуции трябва вместо това да добавите командата 

/sbin/route add default gw 192.168.1.1

в /etc/rc.d/rc.local. 
    Ако операционната система на 192.168.1.2 е Windows настройката трябва да направите като с десен бутон на мишката кликнете върху Network Neighbourhood и от падащото меню изберете Properties след това с левия бутон на мишката изберете TCP/IP -> компонентите за вашата мрежова карта и натиснете бутона Properties. Трябва да изберете подменюто Gateway, да попълните 192.168.1.1 и да натиснете бутона Add след това OK. Естествено няма да минете без рестартиране на компютъра. Същото трябва да направим и с компютъра 192.168.17.2, но неговия gateway ще е разбира се 192.168.17.1. Всеки друг компютър, който добавяме в един от двата сегмента на нашата мрежа трябва да има установен коректен gateway за съответния сегмент - в случай 192.168.1.1 за всички компютри в мрежата 192.168.1.0 и 192.168.17.1 за всички от мрежата 192.168.17.0.
    Сега остава да конфигурираме сървъра. Напишете командата route и разгледайте резултата - ще видите, че имате описани мрежите на съответните интерфейси все едно, че някой вече е изпълнил командите:

/sbin/route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1
/sbin/route add -net 192.168.17.0 netmask 255.255.255.0 gw 192.168.17.1

или 

/sbin/route add -net 192.168.1.0 netmask 255.255.255.0 eth0
/sbin/route add -net 192.168.17.0 netmask 255.255.255.0 eth1

    Ако пък нямате такива записи изпълнете горните команди или редактирайте файла /etc/sysconfig/static-routes или пък добавете горните команди в /etc/rc.d/rc.local. Така ядрото на Linux ще знае как да разпределя пакетите съответно за 192.168.1.0 и 192.168.17.0 мрежите. Вярната routing таблица обаче не е достатъчно условие за прехвърляне на пакети от единия мрежови сегмент към другия. Ако опитате командата 

ping 192.168.17.2

от компютъра 192.168.1.2 ще видите, че нямате връзка с 192.168.17.2. В този момент нашият gateway вижда всички компютри от двата сегмента, всички компютри от двата сегмента също го виждат от своята си страна, но компютрите от двете мрежи не се виждат. Това е защото не сме казали на нашия Linux, че ще бъде рутер (router). Това за повечето Linux дистрибуции става с командата:

echo "1" > /proc/sys/net/ipv4/ip_forward

Така разрешаваме на ядрото да прехвърля пакетите от единия интерфейс към другия. Трябва да сме сигурни, че всичко това ще се запази и след рестарт за целта прегледайте файлa /etc/sysconfig/network там трябва да има FORWARD_IPV4=true или FORWARD_IPV4="yes" също така и файла /etc/sysctl.conf трябва да няма Disable IP forwarding опции. Това е валидно за Red Hat дистрибуции и подобни на нея - за други ще трябва да добавите командата echo "1" > proc/sys/net/ipv4/ip_forward в  /etc/rc.d/rc.local.

Ето примерен файл /etc/sysconfig/network:

NETWORKING=yes
GATEWAYDEV=eth1
GATEWAY=212.36.11.1
HOSTNAME=jam
FORWARD_IPV4=yes
 

и /etc/sysctl.conf:

# Enables packet forwarding
net.ipv4.ip_forward = 1
# Enables source route verification
net.ipv4.conf.all.rp_filter = 1
# Disables automatic defragmentation (needed for masquerading, LVS)
net.ipv4.ip_always_defrag = 0
# Disables the magic-sysrq key
kernel.sysrq = 0

   Сега нашата мрежа трябва да е съвсем наред - всички виждат всички (по TCP/IP). Разбира се това беше твърде сложен пример за една домашна мрежа - обикновено съвсем нямате нужда от два сегмента - един коаксиален ви е напълно достатъчен. Целта на примера беше да покаже малко повече теория.

   Разбира се, точно тук следва въпроса - как компютрите от нашата мрежа да могат да ползват Интернет - ами вариантите са два - ако можете да се свържете като допълнителен сегмент към мрежа, която има връзка към Интернет достатъчно е да добавите трета мрежова карта на вашия Linux-рутер в случая eth2 да му зададете някакъв IP от въпросната мрежа и да добавите default gateway за рутера например така:

/sbin/route add default gw 212.36.12.75

   Как обаче нашата вътрешна мрежа, която е с частни IP адреси 192.168.x.x ще излезе навън в Интернет, където частните адреси въобще не се рутират - сигурно сте чували за NAT, за маскиране (masquerading) - е ние ще използваме маскирането. Това означава, че всички заявки от нашата вътрешна мрежа ще изглеждат за света все едно, че идват от нашия gateway-рутер. Всъщност тъй като той е default gateway за всички компютри от нашата вътрешна мрежа те изпращат заявките си на него - той ги получава, изпраща ги от свое име в Интернет и като получи отговор го препраща на машината от вътрешната мрежа, която го е поискала и така за всеки пакет. По темата masquerading вече има материал на български език на адрес http://linux.gyuvet.ch/html/solution/ip_masq.html затова тук само ще споменем как да добавим маскирането, което ще ни помогне, а именно:

/sbin/ipchains -F
/sbin/ipchains -P forward DENY
/sbin/ipchains -A forward -s 192.168.1.0/24 -j MASQ
/sbin/ipchains -A forward -s 192.168.17.0/24 -j MASQ

или по-кратко

/sbin/ipchains -F
/sbin/ipchains -P forward DENY
/sbin/ipchains -A forward -i eth2 -j MASQ

ако eth2 e интерфейсът на рутера, който "гледа" към Интернет.

   Необходимо е да заредите и съответните модули, които ще ползвате като затова трябва да се консултирате с документацията. FTP модулът например се зарежда така:

/sbin/modprobe ip_masq_ftp

   Разбира се, че в къщи по-скоро ще имаме модем, с който да се свързваме към Интернет - това обаче не променя особено нещата в момента в който установите PPP-връзка вие имате ppp-интерфейс, който се третира като мрежови - името му обаче не е eth, a ppp0 например, или ppp1 и т.н. Съответно вие можете да правите маршрутизиране, както и всичко друго необходимо за целта, така както и за мрежови интерфейс. Ако имате нужда от съдействие предполагам, че Интернет доставчика ви ще ви помогне (срещу някакво заплащане, разбира се). Ако направите това след това може би ще поискате да инициирате връзка с Интернет от всеки компютър във вашата мрежа при заявка за поща, FTP или браузване, а не само, когато е установена ръчно връзка от рутера-gateway - това се нарича dial-on-demand. След това вероятно ще поискате да пуснете и прокси-сървър на вашия gateway - всичко това обаче оставям във ваши ръце - имате достатъчно документи за това в мрежата - четете и пробвайте. Успеете ли сте само на една крачка от това да се превърнете в локален Internet доставчик за вашия жилищен блок или вход ;-)  Успех !  

23.08.2000
Пловдив

Йовко Ламбрев
http://linux.gyuvet.ch