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

LXF158:При­ме­ним VPN

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


При­ме­ним VPN

Спо­кой­но от­кры­вай­те свою ло­каль­ную сеть с Virtual Private Network

Хо­ти­те дать дос­туп к ва­шей се­ти за­кон­ным поль­зо­ва­те­лям, ото­гнав ин­тер­не­тов­ский сброд? Нейл Бот­вик учит это де­лать с OpenVPN.

(thumbnail)
Наш эксперт. Нейл Бот­вик.У Ней­ла сто­ит по ком­пь­ю­те­ру в ка­ж­дой ком­на­те, но по со­об­ра­же­ни­ям безо­пас­но­сти он ни за что не вы­даст вам ме­сто­по­ло­же­ние сво­его цен­траль­но­го сер­ве­ра.

› Соз­да­вай­те сер­ти­фи­ка­ты для сер­ве­ра и кли­ен­тов, ис­поль­зуя скрип­ты сбор­ки, пре­дос­тав­лен­ные OpenVPN.

Сре­ди поль­зо­ва­те­лей Linux по­пу­ляр­ны во­про­сы ти­па «Я хо­чу сде­лать служ­бу XYZ доступ­ны че­рез Ин­тернет, но толь­ко для ав­то­ри­зо­ван­ных поль­зо­ва­те­лей. Как это сде­лать безо­пас­но?», где XYZ мо­жет быть VNC, NFS, Samba или локаль­ный web-сер­ве­р. От­вет за­ви­сит от кон­крет­но­го сер­ви­са, ко­то­рый вы на­ме­ре­ны пред­ла­гать, и от ме­то­дов, пре­ду­смот­рен­ных сер­ви­сом для ау­тен­ти­фи­ка­ции и безо­пас­но­сти. Одни луч­ше, дру­гие ху­же, но это все рав­но по­тен­ци­аль­но оз­на­ча­ет ва­шу обя­зан­ность за­бо­тить­ся о несколь­ких сер­ви­сах, обес­пе­чи­вая безо­пас­ность всех. С ва­шей локаль­ной се­тью та­ких про­блем нет, по­то­му что у вас толь­ко за­ре­ги­ст­ри­ро­ван­ные поль­зо­ва­те­ли – раз­ве что в ва­ши ком­пь­ю­те­ры мо­жет за­брать­ся кто по­па­ло.

Аль­тер­на­ти­ва ого­лению от­дель­ных час­тей се­ти для доступа из Ин­тернета – раз­ре­шить ав­то­ри­зо­ван­ным поль­зо­ва­те­лям под­сое­ди­нять­ся к се­ти из­вне так, как ес­ли бы они бы­ли под­клю­че­ны к локаль­ной се­ти на­пря­мую. Virtual Private Network (VPN) как раз и уста­нав­ли­ва­ет безо­пас­ный, за­шиф­ро­ван­ный туннель ме­ж­ду ком­пь­ю­те­ром и се­тью. Хо­тя тоннель про­хо­дит че­рез пуб­лич­ное ин­тернет-со­единение, весь тра­фик ме­ж­ду ва­шим ком­пь­ю­те­ром и се­тью оста­ет­ся внут­ри туннеля, за­шиф­ро­ван­ный и за­щи­щен­ный.

Есть несколь­ко раз­лич­ных реа­ли­за­ций VPN, но мы здесь восполь­зу­ем­ся OpenVPN. Это, как сле­ду­ет из на­звания, пол­но­стью от­кры­тая сис­те­ма, и она ис­поль­зу­ет для со­единения со­лид­ный OpenSSL. Пре­ж­де все­го на­строй­те мар­шру­ти­за­тор на про­брос пор­та 1194 на ком­пь­ю­тер, пред­на­зна­чен­ный на роль сер­ве­ра OpenVPN в ва­шей локаль­ной се­ти, ина­че под­клю­чить­ся вы не смо­же­те. В про­стей­шем слу­чае, мож­но под­клю­чить ком­пь­ю­тер к се­ти, вы­полнив пер­вую ко­ман­ду на ком­пь­ю­те­ре в се­ти (сер­ве­ре OpenVPN), а вто­рую ко­ман­ду – на уда­лен­ном ком­пь­ю­те­ре, от­ку­да вы хо­ти­те под­клю­чать­ся к се­ти (кли­ен­те):

sudo openvpn --remote ад­рес_кли­ен­та --dev tun 1 --ifconfig 10.0.1.1 10.0.1.2

sudo openvpn --remote ад­рес_сер­ве­ра --dev tun 1 --ifconfig 10.0.1.2 10.0.1.1

Оп­ция --remote да­ет имя или IP-ад­рес ком­пь­ю­те­ра, к ко­то­ро­му под­клю­ча­ют­ся, а два ад­ре­са, вы­дан­ных --ifconfig, вы­де­ля­ют­ся на локаль­ном и уда­лен­ных ком­пь­ю­те­рах, со­от­вет­ст­вен­но – имен­но по­это­му во вто­рой ко­ман­де они идут в об­рат­ном по­ряд­ке. Эти ад­ре­са долж­ны ле­жать в од­ном из за­ре­зер­ви­ро­ван­ных ча­ст­ных диа­па­зо­нов, но в дру­гой под­се­ти ва­шей локаль­ной се­ти, не то про­изой­дут вся­кие ужа­сы. VPN – это от­дель­ная сеть, а сер­вер слу­жит шлю­зом ме­ж­ду ней и ва­шей локаль­ной се­тью. Ес­ли на лю­бом из ком­пь­ю­те­ров вы по­лу­чи­те с tun ошиб­ку «уст­рой­ст­во неиз­вест­но», за­гру­зи­те мо­дуль tun ко­ман­дой

sudo modprobe tun

Хо­тя это и сра­бо­та­ет, по­сколь­ку соз­даст под­клю­чение к од­но­му из ком­пь­ю­те­ров се­ти, удоб­ст­ва тут ма­ло, так как нуж­но, что­бы кто-то вы­полнил эту ко­ман­ду на ка­ж­дом кон­це со­единения, и долж­ны быть за­ранее из­вест­ны IP-ад­ре­са, а это не силь­но вам по­мо­жет при под­клю­чении с по­мо­щью 3G-мо­де­ма или от­кры­то­го Wi-Fi во вся­ких мес­тах об­ще­пи­та.

Наш от­вет

Ре­шение – по­сто­ян­ная (или, по крайней ме­ре, в то вре­мя, когда он ве­ро­ятнее все­го бу­дет необ­хо­дим) ра­бо­та сер­ве­ра в ва­шей локаль­ной се­ти, что­бы обес­пе­чить со­единение с лю­бо­го IP-ад­ре­са и ис­поль­зо­вать сер­ти­фи­ка­ты для ау­тен­ти­фи­ка­ции всех ком­пь­ю­те­ров, ко­то­рые пы­та­ют­ся под­клю­чить­ся. Боль­шин­ст­во на­стро­ек вы­пол­ня­ет­ся на сер­ве­ре, в тер­ми­на­ле, от имени су­пер­поль­зо­ва­те­ля-root (поль­зо­ва­те­лям Ubuntu на­до бу­дет все ко­ман­ды пред­ва­рять sudo). Ва­ша уста­нов­ка OpenVPN долж­на со­дер­жать скрип­ты для это­го в /usr/share/openvpn/easy-rsa. Нам на­до их от­ре­дак­ти­ро­вать, так что ско­пи­руй­те ка­та­лог easy-rsa в /etc/openvpn, что­бы пре­сечь пор­чу ва­ших на­стро­ек ка­ким-нибудь об­нов­лением. От­ре­дак­ти­руй­те файл vars, за­дав в нем пе­ре­мен­ные KEY_* – ни од­ной не оставляй­те пустой. Сле­дую­щий шаг – соз­дание мас­тер-сер­ти­фи­ка­та удо­сто­ве­ряю­ще­го цен­тра (Certificate Authority, CA) при по­сред­ст­ве

source ./vars/

./clean-all

./build-ca

Вам за­да­дут несколь­ко во­про­сов, но бу­дет нор­маль­но про­сто на­жать Enter в от­вет на ка­ж­дый, по­сколь­ку от­ве­ты уже ука­за­ны в фай­ле vars. В ка­та­ло­ге клю­чей keys соз­да­ст­ся сер­ти­фи­кат, ис­поль­зуе­мый для под­пи­си всех сер­вер­ных и кли­ент­ских сер­ти­фи­ка­тов, ко­то­рые мы со­би­ра­ем­ся соз­дать. Из­го­то­вим сер­ти­фи­кат сер­ве­ра ко­ман­дой

./build-key-server имя_сер­ве­ра

Как и пре­ж­де, при­ми­те зна­чения по умол­чанию, но за­дай­те Common Name [об­щее имя] как имя сер­ве­ра, а за­тем от­веть­те y на во­прос, хо­ти­те ли вы под­пи­сать и при­менить сер­ти­фи­кат. Те­перь за­пусти­те эту ко­ман­ду для ка­ж­до­го кли­ен­та, ко­то­ро­му вы хо­ти­те пре­доста­вить под­клю­чение, ис­поль­зуя од­но и то же имя кли­ен­та в команд­ной стро­ке и в от­ве­те на во­прос про Common Name:

./build-key имя_кли­ен­та

Этот скрипт соз­да­ет ключ, раз­ре­шаю­щий под­клю­чение к VPN, так что лю­бой, кто име­ет доступ к ком­пь­ю­те­ру, смо­жет его по­лу­чить. Ес­ли это но­ут­бук, и у вас нет дру­гих форм за­щи­ты от во­ра, ис­поль­зуй­те build-key-pass вме­сто build-key для соз­дания клю­ча, при­кры­то­го па­ро­лем.

На­до бу­дет по­стро­ить еще один файл, ко­ман­дой

./build-dh

Ско­пи­руй­те файл ca.crt и фай­лы .crt and .key это­го ком­пь­ю­те­ра в ка­та­лог /etc/openvpn ка­ж­до­го ком­пь­ю­те­ра. На сер­ве­ре так­же необ­хо­ди­мо ско­пи­ро­вать фай­лы ca.key и dh1024.pem, соз­дан­ные ко­ман­дой build-dh. Сде­лай­те это безо­пас­но, с по­мо­щью cменного но­си­те­ля ли­бо SSH – не по­сы­лай­те их по элек­трон­ной поч­те, по­сколь­ку с эти­ми фай­ла­ми к ва­шей се­ти смо­жет под­клю­чить­ся лю­бой. За­дай­те раз­ре­шения на сек­рет­ный файл .key file как rw-------. Не за­будь­те, что ко­пи­ро­вание их на USB-бре­лок с фор­ма­том FAT уста­но­вит их в гораздо бо­лее ли­бе­раль­ные, что непри­ем­ле­мо.

И сер­ве­ру, и кли­ен­ту ну­жен файл кон­фи­гу­ра­ции в /etc/openvpn. Фай­лы-при­ме­ры, обыч­но по­ме­щае­мые в /usr/share/doc/openvpn/examples/sample-config-files, бу­дут луч­шей от­прав­ной точ­кой. Ско­пи­руй­те файл client.conf в /etc/openvpn/ openvpn.conf и от­ре­дак­ти­руй­те его на сер­ве­ре. Боль­шин­ст­во строк фай­ла яв­ля­ют­ся ком­мен­та­рия­ми, и на­строй­ки по умол­чанию хо­ро­ши, но убе­ди­тесь, что па­ра­мет­ры ca, cert, key и dh со­от­вет­ст­ву­ют соз­дан­ным ва­ми фай­лам, же­ла­тель­но с ука­занием пол­но­го пу­ти.

Ско­пи­руй­те файл client.conf в /etc/openvpn/openvpn.conf на кли­ент и от­ре­дак­ти­руй­те его. Из­мените стро­ку remite, что­бы она ука­зы­ва­ла на IP-ад­рес (или имя) ва­ше­го сер­ве­ра и от­кры­тый на нем порт (по умол­чанию, 1194). Вы мо­же­те иметь и не од­ну та­кую стро­ку – в этом слу­чае они бу­дут оп­ра­ши­вать­ся по оче­ре­ди, по­ка не уста­но­вит­ся со­единение.

remote gateway.example.com 1194

remote 123.124.125.126 1194

Ис­поль­зуй­те пуб­лич­ный IP-ад­рес ва­ше­го ин­тернет-со­единения. Ес­ли ваш шлюз на­хо­дит­ся за мар­шру­ти­за­то­ром, про­брось­те порт 1194 на сер­вер OpenVPN в на­строй­ках мар­шру­ти­за­то­ра. Из­мените стро­ки cert и key, что­бы они со­дер­жа­ли име­на сер­ти­фи­ка­та кли­ен­та и фай­лы клю­чей. Ес­ли вы ме­ня­ли па­ра­мет­ры по умол­чанию в на­строй­ках сер­ве­ра, убе­ди­тесь, что все на­строй­ки здесь им со­от­вет­ст­ву­ют. Те­перь вы уви­ди­те, как все это ра­бо­та­ет, за­пустив

/etc/init.d/openvpn start

на сер­ве­ре, а за­тем на кли­ен­те. За­пуск ifconfig на ка­ж­дом ком­пь­ю­те­ре дол­жен по­ка­зать ин­тер­фейс tun с ад­ре­сом в диа­па­зоне 10.8.0.* (ес­ли вы не ме­ня­ли это­го в на­строй­ках), и вы долж­ны быть в со­стоянии пин­го­вать ме­ж­ду ними. Убе­див­шись, что это ра­бо­та­ет, вы мо­же­те восполь­зо­вать­ся услу­га­ми менед­же­ра сер­ви­сов ва­ше­го ди­ст­ри­бу­ти­ва, что­бы на­стро­ить ав­то­ма­ти­че­­ский за­пуск OpenVPN при за­груз­ке.

До­б­рать­ся до всей се­ти

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

push “route 192.168.1.0 255.255.255.0”

ис­поль­зуя со­от­вет­ст­вую­щий ад­рес и мас­ку для локаль­ной се­ти. Тогда не толь­ко уста­но­вит­ся мар­шру­ти­за­ция на сер­ве­ре, но сер­вер ис­поль­зу­ет это для от­прав­ки пра­виль­ных на­стро­ек мар­шру­ти­за­ции на кли­ент при его под­клю­чении. Ес­ли вы ско­ман­дуе­те route -n по­сле от­кры­тия VPN на кли­ен­те, он по­ка­жет нечто вро­де

Destination Gateway Genmask Flags Metric Ref Use Iface

192.168.1.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0

Это бу­дет хо­ро­шо ра­бо­тать, ес­ли ваш сер­вер OpenVPN слу­жит так­же и шлю­зом для се­ти, то есть дру­гие ком­пь­ю­те­ры в локаль­ной се­ти бу­дут по­сы­лать на него весь не-LAN тра­фик в лю­бом слу­чае. В про­тив­ном слу­чае у вас есть два ва­ри­ан­та. Вы мо­же­те из­менить таб­ли­цы мар­шру­ти­за­ции у всех ком­пь­ю­те­ров в се­ти, к ко­то­рым вы хо­ти­те иметь доступ че­рез VPN, вы­полнив на них ко­ман­ду

route add -net 10.8.0.0 netmask 255.255.255.0 gw 192.168.1.1

или мож­но из­менить на­строй­ки мар­шру­ти­за­то­ра, на­пра­вив тра­фик в се­ти 10.8.0.0 че­рез сер­вер – в дан­ном при­ме­ре, 192.168.1.1. Не­ко­то­рые мар­шру­ти­за­то­ры, осо­бен­но те, что ра­бо­та­ют на ОС DD-WRT или OpenWrt, под­дер­жи­ва­ют OpenVPN на­пря­мую. Ес­ли у вас есть та­кой мар­шру­ти­за­тор, пе­ре­ло­жи­те за­да­чу на него, с по­мо­щью web-ин­тер­фей­са.

Де­та­ли раз­ли­ча­ют­ся в за­ви­си­мо­сти от про­шив­ки мар­шру­ти­за­то­ра, но в основ­ном это встав­ка со­дер­жи­мо­го ва­ше­го сер­ти­фи­ка­та, клю­ча и фай­лов кон­фи­гу­ра­ции в тек­сто­вые по­ля web-ин­тер­фей­са мар­шру­ти­за­то­ра. |

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