‹ paviānu štelles

Linux & Internets LU kojās

Oct 17, 2005

Par internetu LU kojās (linux&vpn). Cik nu pats zinu/saprotu. Savu internetu sākumā sataisīju lai “kaut kā strādā”, un vēlāk, kad kas plīsa, pielaboju tikai tik daudz, lai atkal strādā. Tāpēc, “risinājums” nav necik elegants, bet, galvenais, ka strādā.

Īsumā – LU kojās mēs dzīvojam savā apakštīklā – noslēgtā pasaulītē. Ceļu uz ārējo pasauli izlauž, izveidojot VPN savienojumu – jaunu virtuālu tīkla iekārtu – un norādot, ka datu plūsmu jātēmē uz turieni. Lai dabūtu, “ka strādā internets”, 5 veicamie soļi ir –

  1. Pārliecināties, ka atpazīta tīkla karte, tai piešķirta IP adrese
  2. Pārliecināties, ka ir uzinstalētas vajadzīgās lietas – mppe atbalsts kernelī, pptp, ppp pakotnes
  3. Nokonfigurēt ppp parametrus – norādīt VPN servera adresi, savu lietotājvārdu/paroli un vēl dažus sīkumus
  4. Palaist savienojumu, novirzīt datu plūsmu uz jauno tuneli
  5. Uztaisīt, lai 4. punkts tiek izpildīts katru reizi, ieslēdzot datoru

Vārdiņi

  • VPN - "Virtual Private Network" - tā dēvē tehnoloģiju, ka publiskam, nedrošam tīklam pa virsu tiek uzbūvēts drošs, šifrēts, privāts tīkls.
  • ppp, pptp - "Point to Point [Tunelling] Protocol". Iekš linux, ppp pakotne paredzēta dažādu tuneļu taisīšanai - tuneļi caur seriālo kabeli, modemu, DSL modemu utml. pptp pakotnes vienīgā programma "pptp", balstoties uz ppp, piedāvā taisīt tuneļus uz MS VPN serveri.
  • mppe - MS VPN lietotais šifrēšanas protokols.

Tīkla karte, IP adrese

Tātad, sākumā, tīkla karte, IP adrese

  • Pārliecināmies, ka datoram vispār ir tīkla karte
  • Iespraužam tīkla vadu, pārliecināmies, ka iedegās zaļās gaismiņas
  • Ar komandu ifconfig paskatāmies, kas notiek ar tīkla karti.

Komandas ifconfig izvads:

ifconfig
eth0 Link encap:Ethernet HWaddr 00:00:21:11:3E:A1
inet addr:10.0.2.61 Bcast:10.0.2.255 Mask:255.255.255.0
inet6 addr: fe80::200:21ff:fe11:3ea1/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6545753 errors:0 dropped:0 overruns:0 frame:0
TX packets:7191254 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4214073944 (3.9 GiB) TX bytes:72613371 (69.2 MiB)
Interrupt:18 Base address:0x9000

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:41491 errors:0 dropped:0 overruns:0 frame:0
TX packets:41491 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1662733 (1.5 MiB) TX bytes:1662733 (1.5 MiB)

Šajā piemērā un turpmāk, tīkla kartei ir nosaukums eth0. Redzam, ka viņai ir IP adrese 10.0.2.61. Piešķirta IP adrese ir laba zīme – tātad tīkla vads ir vesels, karte strādā, operētājsistēma viņu ir atradusi un ir atradies arī DHCP serveris, kas ir piešķīris to adresi. Ja karte nestrādā, ifconfig viņu nemaz neparādīs. Ja karte ir, bet nav piešķirta IP adrese (bojāts vads, nepareizi uzkniebts/iesprausts vads, tīkls vispār neiet), būs šāds skats:

ifconfig eth1
eth1 Link encap:Ethernet HWaddr 00:04:61:54:C3:C8
BROADCAST MULTICAST MTU:1500 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 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Interrupt:23 Base address:0xc400

(Tīkla kartē eth1 vispār nekas nav iesprausts.) Jāpiezīmē, ka, ja dators ir jau ieslēgts un iespraužam to tīkla vadu, viņš nesāks tūlīt meklēt IP adresi (kā to dara Windows). Viņu vajag drusku pabakstīt:

ifdown eth0 
ifup eth0

Šīs komandas pasaka – “sākumā aizsūti tīkla karti gulēt, un tad atkal pasaki viņai, lai sāk strādāt”. Šīs komandas (tāpat kā lielāko daļu komandu tālāk) jāizpilda ar root tiesībām – vai nu kā root lietotājam vai ar sudo komandu. Ja saka, ka tādu ifdown un ifup nav, var mēģināt

ifconfig eth0 down 
ifconfig eth0 up

Ja nav arī ifconfig komandas, tad ir pavisam traki. Katrā ziņā, katrai distribūcijai ir savi līdzekļi tīkla karšu konfigurēšanai, piemēram, Fedorām ir system-config-network vai arī redhat-config-network jaukas grafiskas programmiņas. Pats lietoju ubuntu, un te ir grafisks rīks network-admin – iespējams, ka tā nāk GNOME sastāvā.

Vajadzīgā programmatūra

Jānoskaidro, vai mums ir visas vajadzīgās lietas VPN tuneļa būvēšanai. Pirmkārt, mppe atbalsts kernelī. To noskaidro ar komandu

lsmod | grep mppe
ppp_mppe_mppc          13956  2 
ppp_generic            25748  6 ppp_async,ppp_mppe_mppc

Ja kaut ko izdrukā, tad ļoti labi – kerneļa moduļi ir, un ir jau ielādēti (vai iekompilēti). Ja neizdrukā, tad varam izmēģināt laimi ar komandu

modprobe ppp_mppe_mppc

Šī komanda mēģina kernelī ielādēt mppe moduli. Ja izdod kļūdu, tad ir slikti – nav moduļa ko ielādēt. Var, protams, pārkompilēt kerneli, bet iesākumā vienkāršāk būtu paņemt distribūciju, kurai noklusētajā kernelī tas mppe atbalsts jau ir. Par Ubuntu, Fedora, SuSE droši zinu, ka tur tas modulis ir.
Tālāk, jāpārliecinās, ka ir komandas pppd un pptp – vienkārši iedauzām viņas konsolē un pārliecināmies, ka izdrukā kaut kādu help tekstu nevis “command not found”. Ja nav – ņemam pakotņu pārvaldnieku un instalējam – parasti tās pakotnes sauc “ppp” un “pptp-linux” vai līdzīgi. Ja pakotnes nav uz kāda no instalācijas diskiem, sanāk vistas un olas problēma – lai dabūtu strādājošu VPN savienojumu, vajag tikt internetā, bet, lai tiktu internetā, vajag VPN. Tad var iet pie drauga, nolādēt pāris failiņus, ierakstīt, teiksim, USB atmiņā, iet atpakaļ un konstatēt, ka nolādēti nepareizie. Un tad iet vēlreiz, un tad vēlreiz lai palasītu kādu HOWTO, un tad vēl 10 reizes. Vēl var izmantot avārijas-pagaidu risinājumu – uz drauga datora uzstādīt HTTP Proxy un no sava datora līst internetā caur drauga proxy. Internets it kā šķietami strādās, ar to niansi, ka visi dati iet caur drauga datoru (viņš var kaut ko okšķerēt, viņš var apvainoties, viņš var izslēgt datoru). Bet kā pagaidu variants dažu pakotņu nokopēšanai tas der.

Savienojuma konfigurācija

Visi konfigurētie VPN savienojumi stāv zem /etc/ppp/peers. Katrs fails tajā mapē atbilst vienam savienojumam. Uztaisām failu “lanet”. Diemžēl šī faila saturs tā krietni atšķiras dažādām distribūcijām – dažādām ppp un pptp versijām. Lietojot Ubuntu, man viņš ir šitāds:

#
# PPTP Tunnel configuration for tunnel lanet
# Server IP: 195.13.128.6
# Route: add 195.13.128.6 gw 10.0.2.254 dev eth0
# Route: del default
# Route: add default ppp0
#
pty "pptp 195.13.128.6 --nolaunchpppd"
name sd20016
remotename PPTP
require-mppe-128
file /etc/ppp/options
ipparam lanet

Tātad, kas mums te ir – norādīta servera IP – 195.13.128.6. Tālāk, route komandas, kas apraksta, pa kādiem ceļiem turpmāk būs jāsūta datus. Tālāk viena maģiska komanda pty "pptp 195.13.128.6 -<del>nolaunchpppd", kas tiks lietota tuneļa palaišanai. Tālāk vēl šādi tādi parametri - pieslēgšanās vārds (mans ir sd20016, Tev būs cits :), vēlviens pieslēgšanās vārds "remotename" – tajā var rakstīt kas ienāk prātā.

Lai kaut kas varētu sanākt, noteikti jānorāda require-mppe-128 – tas norāda savienojumam lietojamo šifru un uz nevienu citu Lanet VPN serveris neparakstīsies.

Tālāk, norādīts, ka jāielasa arī uzstādījumu fails /etc/ppp/options. Tajā failā failā stāv globālās, visiem savienojumiem pielietojamās direktīvas. Fails lielākoties sastāv no aizkomentētiem direktīvu paraugiem, vienīgās neaizkomentētās ir:

noauth
nobsdcomp
nodeflate

Lietotājvārds, parole stāv failā /etc/ppp/chap-secrets. Faila saturs:

# Secrets for authentication using CHAP
# client server secret IP addresses
"sd20016" * "manaparole"

Tuneļa palaišana

Uz ubuntu, komanda pon [tuneļa nosaukums]. Nu, piemēram,

pon lanet

Uz Fedoras tuneli palaida ar komandu pptp-command start lanet. Tur visu to /etc/ppp/peers/lanet varēja aizpildīt, lietojot pptp-command. Vienīgā lieta, ko bija ar roku jāpiemet, bija tā direktīva izmantot mppe-128. Apraksts, kā darīties ar pptp-command.

Ja tunelis veiksmīgi palaists, komandai ifconfig būtu jāuzrāda jaunu tīkla iekārtu:

ifconfig
[...]
ppp0 Link encap:Point-to-Point Protocol
inet addr:213.175.114.204 P-t-P:213.175.115.254 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1496 Metric:1
RX packets:4128610 errors:0 dropped:0 overruns:0 frame:0
TX packets:4493020 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:3916153404 (3.6 GiB) TX bytes:4033823977 (3.7 GiB)

Tālāk tikai jānorāda, ka visus datus jāsūta nevis uzreiz uz tīkla karti eth0 bet uz jauno tuneli – ppp0. Šo lietu dara ar komandu route. Izmantojot route, mēs varam aprakstīt, kur vēlamies datus dažādās situācijās sūtīt. Piemēram, izteikums “ja pieprasījums tiek sūtīts uz cu.serveris.lv, sūtiet to caur iekārtu ppp0” route sintaksē izskatās –

route add cu.serveris.lv ppp0

Lai pateiktu, ka visus pieprasījumus jāsūta caur ppp0, lietojam komandu

route add default ppp0

Te jāuzmanās – pieprasījumi Lanet VPN serverim, kas uztur dzīvu pašu tuneli – tie jau arī ir pieprasījumi un tos mums jāturpina sūtīt uz tīkla karti nevis uz VPN tuneli.

Skripts, kas visu saimniecību palaiž, man izskatās šāds:

modprobe ppp_mppe_mppc
route add 195.13.128.6 gw 10.0.2.254 dev eth0
pon lanet
route add default ppp0
route del default dev eth0

Savienojuma palaišana, ieslēdzot datoru

Vēl atliek parūpēties, lai, katru reizi ieslēdzot datoru, šis skripts tiktu izpildīts. Man tas ir sataisīts ar init.d skriptu.

Ja ir pieejams pptp-command, tad ir vienkārši – tur var norādīt, kurš ir noklusētais tunelis, kuru startējoties jāpalaiž un tas skripts tālāk visu pats izdara.

Bēdīgā beigu piezīme

Es labi apzinos, ka, sekojot šai, krietni nepilnīgajai instrukcijai, sataisīt sev strādājošu internetu bez priekšzināšanām (nu, un Google lietošanas iemaņām, man šito neviens nemācīja) varētu būt grūti. Taupot laiku un vienkārši aiz slinkuma izvēlējos uzrakstīt nevis visu sīki un smalki, bet ātri un vispārīgi. Par neskaidrajām lietām var jautāt un tad par tām centīšos noskaidrot/uzrakstīt vairāk.