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 –
- Pārliecināties, ka atpazīta tīkla karte, tai piešķirta IP adrese
- Pārliecināties, ka ir uzinstalētas vajadzīgās lietas – mppe atbalsts kernelī, pptp, ppp pakotnes
- Nokonfigurēt ppp parametrus – norādīt VPN servera adresi, savu lietotājvārdu/paroli un vēl dažus sīkumus
- Palaist savienojumu, novirzīt datu plūsmu uz jauno tuneli
- 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.