Журнал LinuxFormat - перейти на главную

LXF169: Соз­дание се­ти

Материал из Linuxformat
Перейти к: навигация, поиск

Сеть. За­ста­вим ком­пь­ю­те­ры с Linux об­щать­ся друг с дру­гом.

Содержание

Сеть: Построим мар­шру­ти­за­тор

По­зна­ко­мив вас с кир­пи­чи­ка­ми, из ко­то­рых стро­ят се­ти, Джо­на­тан Ро­бертс скла­ды­ва­ет из них ре­аль­но ра­бо­таю­щую сеть.

(thumbnail)
Наш эксперт Джо­на­тан Ро­бертс сбе­жал из Ба­шен Linux Format, что­бы по­ис­кать сча­стья в ка­че­­ст­ве си­сад­ми­на.

Ме­сяц на­зад мы по­зна­ко­ми­ли вас с основ­ны­ми по­ня­тия­ми се­тей – па­ке­та­ми, фи­зи­че­­ски­­ми со­единения­ми и ло­ги­че­­ской ад­ре­са­ци­ей, а так­же с ути­ли­та­ми, при по­мо­щи ко­то­рых в Linux мож­но ис­сле­до­вать ра­бо­ту сети. Пользуясь ими, вы смо­же­те эф­фек­тив­но ра­бо­тать с се­тя­ми и ди­аг­но­сти­ро­вать про­бле­мы, с ко­то­ры­ми столкнетесь.

На дан­ном уро­ке мы по­ка­жем, как эти эле­мен­ты со­че­та­ют­ся друг с дру­гом в на­стоя­щих се­тях. Спер­ва за­ста­вим два ком­пь­ю­те­ра взаи­мо­дей­ст­во­вать друг с дру­гом на­пря­мую, за­тем про­де­мон­ст­ри­ру­ем, как пре­вра­тить ком­пь­ю­тер с Linux в мар­шру­ти­за­тор (он же – ро­утер). Парк ком­пь­ю­те­ров вам не по­тре­бу­ет­ся – все это мы бу­дем де­лать в VirtualBox, но вы долж­ны уметь при­ме­нять те же са­мые тех­но­ло­гии к на­стоя­щим се­тям.

В на­ших при­ме­рах мы восполь­зу­ем­ся CentOS – он осно­ван на Red Hat Enterprise Linux и яв­ля­ет­ся по­пу­ляр­ной плат­фор­мой для сер­ве­ров. Ес­ли вам ин­те­ре­сен Ubuntu или дру­гие ди­ст­ри­бу­ти­вы на осно­ве Debian, за­гляните во врез­ку «Ди­ст­ри­бу­ти­вы на ба­зе Debian».

Пре­ж­де чем пе­рей­ти к се­ти, соз­да­дим сис­те­му, в ко­то­рой мы бу­дем прак­ти­ко­вать­ся. Сна­ча­ла уста­но­ви­те VirtualBox. Он дол­жен быть в ре­по­зи­то­ри­ях боль­шин­ст­ва ди­ст­ри­бу­ти­вов, так что для его уста­нов­ки про­сто восполь­зуй­тесь менед­же­ром па­ке­тов сво­его ди­ст­ри­бу­ти­ва. По­сле это­го за­гру­зи­те минималь­ный уста­но­воч­ный диск CentOS 6.3 (http://bit.ly/1446qQO).

Те­перь соз­дай­те две но­вых вир­ту­аль­ных ма­ши­ны (ВМ) в VirtualBox, сле­дуя на­ше­му по­ша­го­во­му ру­ко­во­дству на со­седней странице, по­за­бо­тив­шись до­ба­вить все необ­хо­ди­мые се­те­вые ин­тер­фей­сы.

За­тем по­вто­ри­те те же ша­ги для вто­рой ВМ, убе­див­шись, что она под­клю­че­на к той же внут­ренней се­ти. Соз­дав вир­ту­аль­ные ма­ши­ны с дву­мя та­ки­ми се­те­вы­ми ин­тер­фей­са­ми, как у нас, мы сде­ла­ем так, что они обе смо­гут под­клю­чать­ся к Ин­тернету (че­рез NAT по умол­чанию), но так­же смо­гут и взаи­мо­дей­ст­во­вать друг с дру­гом на­пря­мую по внут­ренней се­ти, ко­то­рую мы до­ба­ви­ли. Эта внут­рен­няя сеть эк­ви­ва­лент­на под­клю­чению двух вир­ту­аль­ных ма­шин к од­но­му ком­му­та­то­ру [switch] или про­сто­му со­единению их се­те­вым ка­бе­лем.

Ба­зо­вая на­строй­ка се­ти

За­вер­шив уста­нов­ку на обо­их ком­пь­ю­те­рах, под­клю­чим обо­их к Ин­тернету че­рез сеть NAT по умол­чанию. Это даст нам воз­мож­ность по­зна­ко­мить­ся с се­те­вы­ми кон­фи­гу­ра­ци­он­ны­ми фай­ла­ми Red Hat и осве­жить кое-что, о чем мы го­во­ри­ли в про­шлый раз.

По­сле за­груз­ки вир­ту­аль­ной ма­ши­ны пер­вым де­лом на­до пе­рей­ти в ка­та­лог /etc/sysconfig/network-scripts. В ди­ст­ри­бу­ти­вах на ба­зе Red Hat этот ка­та­лог со­дер­жит скрип­ты за­пуска и фай­лы на­строй­ки всех се­те­вых уст­ройств, под­клю­чен­ных к ком­пь­ю­те­ру. Ес­ли вы сле­до­ва­ли на­ше­му по­ша­го­во­му ру­ко­во­дству, вы долж­ны уви­деть два кон­фи­гу­ра­ци­он­ных фай­ла – ifcfg-eth0 и ifcfg-eth1 (в дру­гих вер­си­ях Red Hat это мо­гут быть ifcfg-em1 и ifcfg-em2). Eth0 – пер­вое се­те­вое уст­рой­ст­во, и оно долж­но ссы­лать­ся на пер­вый адап­тер (Adapter 1) в на­строй­ках VirtualBox – это сеть NAT.

От­крой­те в Vi файл ifcfg-eth0 и убе­ди­тесь, что в нем есть та­кие па­ра­мет­ры со свои­ми зна­чения­ми:

NM_CONTROLLED=”no”

BOOTPROTO=”dhcp”

ONBOOT=”yes”

Пер­вая стро­ка го­во­рит о том, что менед­жер се­ти (NetworkManager) не дол­жен управ­лять этим ин­тер­фей­сом – раз мы пы­та­ем­ся де­лать это вруч­ную, его вме­ша­тель­ст­во мо­жет внести пу­таницу, по­это­му мы его от­клю­ча­ем.

Вто­рая стро­ка оп­ре­де­ля­ет, ка­кой про­то­кол дол­жен ис­поль­зо­вать­ся для по­лу­чения IP-ад­ре­са. Здесь мы ука­за­ли DHCP (Dynamic Host Configuration Protocol – про­то­кол ди­на­ми­че­­ской на­строй­ки хоста). Это оз­на­ча­ет, что ВМ по­лу­чит IP-ад­рес, шлюз и ин­фор­ма­цию о DNS-сер­ве­рах ав­то­ма­ти­че­­ски с уда­лен­но­го сер­ве­ра. В дан­ном слу­чае это не уда­лен­ный сер­вер, а VirtualBox, ко­то­рый эму­ли­ру­ет его.

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

На­конец, ONBOOT го­во­рит, что ин­тер­фейс дол­жен за­пускать­ся при ка­ж­дом за­пуске скрип­тов инициа­ли­за­ции се­ти на этом ком­пь­ю­те­ре, то есть при за­груз­ке сис­те­мы или пе­ре­за­пуске се­те­во­го сер­ви­са. Про­верь­те это са­ми, вы­полнив от имени root ко­ман­ду /etc/init.d/network restart, и убе­див­шись, что сеть ра­бо­та­ет так, как долж­на. Для это­го мож­но по­про­бо­вать от­пра­вить па­ке­ты на по­пуляр­ный сайт, на­при­мер, на Google, ко­ман­дой ping: ping google.com.

Не­мно­го ве­зения, и ва­ши па­ке­ты вер­нут­ся – это зна­чит, что вы под­клю­че­ны к Ин­тернету, сле­до­ва­тель­но, ва­ши IP-ад­рес, мас­ка под­се­ти (или пре­фикс), шлюз по умол­чанию и DNS – все, что нуж­но для под­клю­чения под­се­ти – за­да­ны вер­но и ра­бо­та­ют пра­виль­но.

Про­смот­реть все эти на­строй­ки мож­но, за­гля­нув в раз­лич­ные кон­фи­гу­ра­ци­он­ные фай­лы или с по­мо­щью ути­лит, о ко­то­рых мы го­во­ри­ли в про­шлый раз. На­при­мер, ко­ман­да ip route вы­ве­дет шлюз по умол­чанию (в дан­ном слу­чае, вир­ту­аль­ный шлюз, пре­достав­ляе­мый VirtualBox); в /etc/resolv.conf мож­но най­ти сер­вер имен; а ко­ман­да ip a вы­ве­дет ва­ши IP-ад­рес и пре­фикс. По­вто­ри­те все эти дей­ст­вия для вто­ро­го ком­пь­ю­те­ра.

Ста­ти­че­­ские ад­ре­са

В пре­ды­ду­щем раз­де­ле боль­шую часть труд­ной ра­бо­ты сде­ла­ли про­то­кол DHCP и VirtualBox. Те­перь мы на­стро­им се­те­вое со­единение ме­ж­ду дву­мя вир­ту­аль­ны­ми ма­ши­на­ми, но все на­строй­ки бу­дем до­бав­лять са­ми.

Пер­вое, что нуж­но от­ме­тить – ес­ли бы это бы­ли на­стоя­щие ком­пь­ю­те­ры, их бы при­шлось со­еди­нять фи­зи­че­­ским ка­бе­лем, ли­бо на­пря­мую, ли­бо че­рез свитч или ро­утер. Так как это вир­ту­аль­ные ма­ши­ны, мы уже сде­ла­ли это, под­клю­чив их вто­рые ин­тер­фей­сы к од­ной и той же внут­ренней се­ти.

По­это­му, как и пре­ж­де, начнем с ка­та­ло­га /etc/sysconfig/network-scripts. Вам по­на­до­бит­ся файл ifcfg-eth1, но он бу­дет вы­гля­деть не так, как в про­шлый раз:

NM_CONTROLLED=”no”

BOOTPROTO=”static”

IPADDR=”192.168.1.2”

PREFIX=24

ONBOOT=”yes”

Про­то­кол за­груз­ки те­перь уста­нов­лен в static [ста­ти­че­­ский] – это оз­на­ча­ет, что вме­сто ав­то­ма­ти­че­­ско­­го по­лу­чения IP-ад­ре­са нам при­дет­ся за­дать его вруч­ную. Это де­ла­ет­ся в па­ра­мет­рах IPADDR и PREFIX. IP-ад­рес мо­жет быть лю­бым, но при­ня­то, что­бы он на­чи­нал­ся с 10 (8-бит­ный пре­фикс), 172.16 (12- бит­ный пре­фикс) или 192.168 (16- бит­ный пре­фикс). Эти ад­ре­са вы­де­ле­ны для «ча­ст­но­го» ис­поль­зо­вания, и у боль­шин­ст­ва ро­уте­ров они за­кры­ты для досту­па из­вне. Кро­ме то­го, не за­бы­вай­те, что пер­вый (для 24-бит­но­го пре­фик­са – .0) и по­следний (.255) ад­ре­са за­ре­зер­ви­ро­ва­ны как ад­рес се­ти и ши­ро­ко­ве­ща­тель­ный ад­рес, по­это­му их на­зна­чать нель­зя.

Что­бы вы­брать пре­фикс, взгляните на врез­ку «Под­робнее про IP-ад­ре­са» из про­шлой ста­тьи и за­тем при­ми­те ре­шение. Помните, что для 24-бит­но­го пре­фик­са толь­ко по­следний ок­тет иден­ти­фи­ци­ру­ет хост, а осталь­ные – сеть; для 16-бит­но­го пре­фик­са, два по­следних ок­те­та пред­став­ля­ют хост, а пер­вые два – сеть. Мы восполь­зу­ем­ся 24-бит­ным пре­фик­сом.

По­сле это­го сбрось­те сеть, как рань­ше.

За­тем по­пы­тай­тесь по­пин­го­вать со вто­рой вир­ту­аль­ной ма­ши­ны пер­вую по ее но­во­му IP-ад­ре­су: 192.168.1.2. Ни один из па­ке­тов не дол­жен вер­нуть­ся. Что­бы со­единение мож­но бы­ло уста­но­вить, нуж­но дать вто­ро­му ком­пь­ю­те­ру IP-ад­рес с точ­но та­ким же пре­фик­сом (или мас­кой под­се­ти). Мы со­ве­ту­ем ис­поль­зо­вать 192.168.1.3. До­бавь­те его в со­от­вет­ст­вую­щий файл /etc/sysconfig/network-scripts и пе­ре­за­пусти­те сеть.

Ес­ли те­перь по­пин­го­вать ад­рес 192.168.1.2 со вто­ро­го ком­пь­ю­те­ра, па­ке­ты долж­ны воз­вра­щать­ся. Бо­лее то­го, ес­ли пе­рей­ти на пер­вый ком­пь­ю­тер и по­про­бо­вать по­пин­го­вать 192.168.1.3, это то­же долж­но ра­бо­тать. Под­клю­чение по SSH так­же долж­но ра­бо­тать, и ес­ли за­пустить web-сер­вер на од­ной из вир­ту­аль­ных ма­шин, он дол­жен быть досту­пен с дру­гой.

Те­перь два ком­пь­ю­те­ра мо­гут взаи­мо­дей­ст­во­вать. От­лич­но! Но при ка­ж­дом под­клю­чении на­би­рать IP-ад­ре­са неудоб­но. Обыч­но ком­пь­ю­те­рам на­зна­ча­ют име­на, ко­то­рые про­ще за­помнить и лег­че на­би­рать. Это мож­но сде­лать несколь­ки­ми спо­со­ба­ми. На­при­мер, в се­ти с боль­шим ко­ли­че­­ст­вом ком­пь­ю­те­ров сто­ит соз­дать свой сер­вер DNS (Domain Name System – сис­те­ма до­мен­ных имен), но это вы­хо­дит да­ле­ко за рам­ки на­шего уро­ка.

Так как у нас все­го два ком­пь­ю­те­ра, их име­на мож­но за­дать го­раз­до про­ще – по­мес­тить их в файл /etc/hosts. Этот файл со­дер­жит спи­сок IP-ад­ре­сов и их алиа­сов, по­это­му в него мож­но до­ба­вить за­пи­си для двух на­ших ком­пь­ю­те­ров:

192.168.1.2 lxf-network-1

192.168.1.3 lxf-network-2

Ес­ли до­ба­вить их в файл /etc/hosts на обо­их ком­пь­ю­те­рах, вы долж­ны уви­деть, что ком­пь­ю­те­ры пин­гу­ют­ся по име­нам lxf-network-1 и lxf-network-2, и вас пе­ре­на­прав­ля­ют на нуж­ный ком­пь­ю­тер – так-то луч­ше.

Соз­да­ем ро­утер

По­ка мы не за­да­ва­ли шлюз ни на од­ном из на­ших ком­пь­ю­те­ров, поскольку по­лу­ча­ли его от DHCP из се­ти NAT VirtualBox по умол­чанию вме­сте с дан­ны­ми DNS, и таким образом на­ши ком­пь­ю­те­ры под­клю­ча­лись к внешнему Ин­тернету. Что­бы про­де­мон­ст­ри­ро­вать еще кое-ка­кие воз­мож­но­сти се­ти, от­клю­чим со­единение NAT на вто­рой вир­ту­аль­ной ма­шине и на­стро­им пер­вую как ро­утер для пре­достав­ления досту­па в Ин­тернет.

Сна­ча­ла вы­полним ко­ман­ду ifdown eth0 для вы­клю­чения ин­тер­фей­са NAT на вто­рой вир­ту­аль­ной ма­шине. Те­перь, когда ин­тер­фейс на­стро­ен, эта ко­ман­да вме­сте со сво­ей на­парницей ifup мо­жет ис­поль­зо­вать­ся для вклю­чения и вы­клю­чения ин­тер­фей­сов.

По­том по­про­буй­те по­пин­го­вать Google с это­го ком­пь­ю­те­ра, и вы уви­ди­те, что это боль­ше не ра­бо­та­ет. Что­бы все за­ра­бо­тало сно­ва, нуж­но внести из­менения в кон­фи­гу­ра­цию пер­вой вир­ту­аль­ной ма­ши­ны.

Сна­ча­ла ей нуж­но раз­ре­шить пе­ре­на­прав­лять па­ке­ты с од­но­го се­те­во­го ин­тер­фей­са на дру­гой – это са­мое важ­ное и един­ст­вен­ное, для че­го ну­жен ро­утер. В Linux та­кое мож­но, но по умол­чанию эта функ­ция от­клю­че­на. Что­бы сно­ва ее вклю­чить, от­крой­те файл /etc/sysctl.conf – он управ­ля­ет раз­лич­ны­ми ас­пек­та­ми ра­бо­ты яд­ра, и уста­но­ви­те net.ipv4.ip_forward = 1. За­тем за­пусти­те sysctl -p /etc/sysctl.conf для за­груз­ки но­вой кон­фи­гу­ра­ции.

По­сле это­го вам по­на­до­бит­ся на­стро­ить соб­ст­вен­ный NAT, или се­те­вое мас­ки­ро­вание; в Linux это де­ла­ет­ся с по­мо­щью IPTables – бранд­мау­эра, встро­ен­но­го в яд­ро.

IPTables пу­га­ют мно­гих, но на са­мом де­ле все очень про­сто: это лишь на­бор пра­вил, на ко­то­рые смот­рит яд­ро при об­ра­бот­ке па­ке­та. Ес­ли па­кет со­от­вет­ст­ву­ет лю­бо­му из этих пра­вил, яд­ро при­ме­ня­ет к нему дей­ст­вие, ука­зан­ное в пра­ви­ле. Дей­ст­вия мо­гут вклю­чать от­бра­сы­вание или при­ем па­ке­та или манипу­ля­цию с ним для из­менения его ис­точника или мес­та на­зна­чения.

В на­шем слу­чае, когда па­кет при­бы­ва­ет на пер­вую вир­ту­аль­ную ма­ши­ну со вто­рой на ин­тер­фейс eth1, мы хо­тим при­менить к нему дей­ст­вие masquerade – то есть на­пра­вить его во внешний мир че­рез ин­тер­фейс eth0, пред­ста­вив, что па­кет при­шел с пер­вой, а не со вто­рой вир­ту­аль­ной ма­ши­ны:

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

Раз­бе­рем это:

» -t nat оп­ре­де­ля­ет, на ка­кой на­бор пра­вил в ка­кой таб­ли­це пра­вил нуж­но по­смот­реть.

» -A POSTROUTING – под­на­бор пра­вил, ко­то­рые нуж­но про­смот­реть, ина­че из­вест­ный как це­поч­ка. Це­поч­ка оп­ре­де­ля­ет, в ка­кой точ­ке про­цес­са мар­шру­ти­за­ции долж­но при­ме­нять­ся пра­ви­ло.

» -o eth1 оп­ре­де­ля­ет, что это пра­ви­ло долж­но при­ме­нять­ся ко всем па­ке­там, ко­то­рые бу­дут вы­хо­дить из ин­тер­фей­са eth1.

» -j MASQUERADE го­во­рит, что нуж­но «пе­ре­прыг­нуть» на дей­ст­вие MASQUERADE, когда лю­бой па­кет со­от­вет­ст­ву­ет это­му пра­ви­лу.

С этим пра­ви­лом до­бавь­те шлюз по умол­чанию GATEWAY = 192.168.1.2 в файл /etc/sysconfig/network (в ко­то­ром хранит­ся об­щая се­те­вая кон­фи­гу­ра­ция для всех ин­тер­фей­сов) на вто­рой вир­ту­аль­ной ма­шине, за­дай­те по­пу­ляр­ный внешний сер­вер имен в /etc/resolv.conf, до­ба­вив ту­да nameserver 8.8.8.8 (IP-ад­рес сер­ве­ра имен Google), и у вас долж­но по­лу­чит­ся пол­но­стью ра­бо­чее ин­тернет-под­клю­чение, несмот­ря на то, что ника­ко­го пря­мо­го под­клю­чения у вас нет.

Ес­ли вы хо­ти­те под­робнее уз­нать об IPTables, про­чти­те несколь­ко HowTo на сай­те Netfilter: http://netfilter.org/documentation/.

Вот и все, на что у нас хва­ти­ло мес­та в этом ме­ся­це. Но не от­чаи­вай­тесь: за по­следние два уро­ка вы мно­гое уз­на­ли о се­ти. Про­явив немно­го тер­пения, вы смо­же­те чи­тать дру­гие ру­ко­во­дства и соз­да­вать го­раз­до бо­лее слож­ные кон­фи­гу­ра­ции, точ­но со­от­вет­ст­вую­щие ва­шим по­треб­но­стям.


Персональные инструменты
купить
подписаться
Яндекс.Метрика