Reititys
- Miten löydetään kone jolla on tietty IP?
- Samaan aliverkkoon pääsee suoraan, muuten tarvitaan reititystä
- Oletusreitin asetus (yleensä automaattinen):
- ip route add default via reititin
- missä reititin on välittävän koneen (gateway) osoite
Reititys
- Jos johonkin koneeseen tai verkkoalueeseen ei pääse oletusreitin kautta, sille pitää määritellä oma gateway. Esim.
- ip route add 192.168.127.0/24 via 172.21.208.17
- ohjaa aliverkkoon 192.168.127.0/24 lähtevät paketit lonka7 -koneen kautta.
- ip route add 192.168.127.19 via 172.21.208.17
- vastaavasti mutta vain yksittäiselle koneelle, jonka osoite on 192.168.127.19.
Reititys
- Käytössä olevaa reititystaulua voi katsella:
- ip route [show]
- route [-n] # vanha
- Reitityksen poisto (argumentteina samat kuin ip route add -komennossa annettiin tai mitä ip route show näyttää):
Reititys
- Reittejä voi laittaa /etc/network/interfaces -tiedostoon tähän tapaan:
- up ip route add 192.168.2.0/16 via router1
- ”up” määrää, että komento suoritetaan kun ko. interface käynnistetään (ifup). Vastaavasti voidaan lisätä myös (ei yleensä tarpeen) reitin poisto:
- down ip route delete 192.168.2.0/16 via router1
Reititys
- Jotta gateway-kone välittäisi paketteja eteenpäin se pitää erikseen sallia:
- echo 1 > /proc/sys/net/ipv4/ip_forward # tai
- sysctl -w net.ipv4.conf.all.forwarding=1
- Tarkistus: cat /proc/sys/net/ipv4/ip_forward # tai
- sysctl net.ipv4.conf.all.forwarding
- Asetus pysyväksi: net.ipv4.ip_forward=1 tiedostossa /etc/sysctl.conf
- Gateway-koneen (softa)palomuurissa tarvitaan myös säännöt tätä varten
Reititys
- Gateway-koneen pitää yleensä olla omassa aliverkossa (tai sinne pitää määritellä reitti ensin, harvoin tarpeen).
- Kahden samaa privaattiosoitealuetta käyttävän aliverkon yhdistäminen reitittämällä ei onnistu; jos mahdollista kannattaa käyttää eri osoitealueita, muuten tarvitaan monimutkaisempia palomuurisäätöjä (NAT) tai ARP-proxyä tms.
Reititysesimerkki
- JY:n julkinen verkko: 130.234.0.0/16, labraverkon alue 130.234.208.0/23
- Kurssin sisäverkko: 172.20.0.0/16
- Sisäverkon rajapalomuuri: 172.20.0.1, 130.234.254.76
- Palomuurin julkinen verkkoalue: 130.234.208.0/23
- Palomuurin sisäinen verkkoalue: 172.20.0.0/16
- Sisäverkon dns/dhcp-palvelin: 172.20.0.2
- Sisäverkon osa 172.21.208.0/23 NATattu (1-1 NAT) julkiselle alueelle 130.234.208.0/23
Reititysesimerkki
- lonka5: 130.234.208.15, 172.21.208.15, 192.168.125.1
- Lonka5:n sisäinen (NAT-)verkko: 192.168.125.0/24
- lonka6: 130.234.208.16, 172.21.208.16, 192.168.126.1
- Lonka6:n sisäinen (NAT-)verkko: 192.168.126.0/24
- lonka7: 130.234.208.17, 172.21.208.17, 192.168.127.1
- lonka7:n sisäinen (NAT-)verkko: 192.168.127.0/24
- lonka8: 130.234.208.18, 172.21.208.18, 192.168.128.1
- lonka7:n sisäinen (NAT-)verkko: 192.168.128.0/24
Reititysesimerkki
- Koneet:
- mailkang1: 130.234.209.19, 172.21.209.19 (siltaverkko)
- mailkang2: 130.234.209.119, 172.21.209.119 (siltaverkko)
- mailkang3: 172.21.210.19 (siltaverkko, ei julkista IP:tä)
- mailkang4: 192.168.127.19 (NAT-verkko lonka7:n sisällä, ei julkista IP:tä eikä ulomman sisäverkon IP:tä)
- mailkang5: 192.168.126.19 (NAT-verkko lonka6:n sisällä, ei julkista IP:tä eikä ulomman sisäverkon IP:tä)
Reititysesimerkki...
- Samassa aliverkossa olevat koneet näkevät toisensa suoraan
- Palomuuri reitittää omien aliverkkojensa ja julkiverkon välillä
- VM-alustakoneet (lonka*) reitittävät aliverkon 172.21 sisällä
- VM-alustakoneet reitittävät myös omien sisäverkkojensa (192.168.x) ja (omasta näkökulmastaan ulkoisen) aliverkon 172.21 välillä
Reititysesimerkki...
- Siltaverkkoa käytettäessä virtuaalikoneen oletusreittinä voi käyttää joko palomuuria (172.21.0.1) tai jotakin alustakoneista (tyypillisesti alustakonetta jossa se itse on).
- Jos VM on NATattuna alustakoneen sisäisessä (192.168.x) -verkossa, oletusreitin pitää olla alustakoneen sisäinen osoite (192.168.x.1)
Reititysesimerkki...
- Alustakoneiden (NAtattuihin) sisäverkkoihin pääsee vain ko. alustakoneen kautta, siis käyttämällä sitä joko oletusreittinä tai erikseen määriteltynä reittinä kyseiselle sisäverkolle (kumpikin edellyttää, että alustakoneen palomuuri sallii tämän, ulkoverkosta tultaessa myös rajapalomuuri(t))
Reititysesimerkki...
- Koneet mailkang1, mailkang2 ja mailkang3 pääsevät toisiinsa suoraan, muualle käyttäen (oletus)reitittimenä joko palomuuria tai alustakoneitaan, koska niissä on käytössä siltaverkko (bridged net)
Reititysesimerkki...
- Koneissa mailkang4 ja mailkang5 on käytössä NAT-verkko, josta ne näkevät suoraan vain oman alustakoneensa sisäisen (NATatun) verkon (192.168.x.0), oletusreittinä toimii vain aina oman alustakoneestaan sisäinen IP (192.168.x.1)
Reititysesimerkki...
- Alustakoneet tarjoavat sisäverkkoonsa myös nimipalvelun, joten mailkang4:ssä nimipalvelinkin on 192.168.127.1; se voisi käyttää ulkoistakin nimipalvelua (esim. 172.21.0.2), mutta silloin se ei saisi omaa nimeään (eikä muita NAT-verkkonsa koneita) nimipalvelusta
Reititysesimerkki...
- Jotta NAT-sisäverkon ulkopuoliset labraverkon koneet pääsisivät sen sisälle, niissä pitää määritellä reitittimeksi sinne ko. alustakone (mailkang4:n tapauksessa siis lonka7, ja nimenomaan sen ”ulompi sisäinen” IP 172.21.208.17)
- Labraverkon ulkopuolisille koneille pitäisi vastaavasti määritellä reitittimeksi alustakoneen julkinen IP (130.234.208.17)
Reititysesimerkki...
- Alustakoneen käyttäminen oletusreittinä toimii myös siltaverkon koneiden (mailkang1, mailkang2 &c) kanssa – kunhan ko. kone pysyy päällä (potentiaalinen ongelma migraation kanssa)
Reititysesimerkki...
- Kone mailkang4 näkee oletusasetuksilla kaiken paitsi lonka[568]:n sisäverkkoja 192.168.12[568].0 (ja siten mailkang5:ttä), vastaavasti mailkang5 näkee kaiken paitsi lonka[578]:n sisäverkkoja (ja mailkang4:ää).
- Toisin sanoen mailkang4 näkee lonka7:n sisäverkon (192.168.127.0/24), labran sisäverkon (172.21.0.0/16) ja ulkomaailman (1-to-many NAT), mutta se itse näkyy vain lonka7:n sisällä ja lonka7:n kautta reitittäville koneille.
Reititysesimerkki...
- Jotta kone mailkang1 näkisi myös mailkang4:n, kaksi vaihtoehtoa:
- Oletusreitiksi lonka7 (172.21.208.17)
- /etc/network/interfaces:
- gateway 172.21.208.17
- Erillinen reititys lonka7:n kautta sen sisäverkkoon (tai haluttaessa vain mailkang4:ään)
- gateway 172.21.0.1
- up ip route add 192.168.127.0/24 via 172.21.208.17
Reititysesimerkki...
- Jotta kone mailkang4 näkisi mailkang5:n:
- Oletusreitin oltava kuitenkin aina lonka7 (192.168.127.1)
- Aliverkolle 192.168.126.0/16 määriteltävä erikseen reitti, reitittimenä lonka6 (172.21.208.16)
- gateway 192.168.127.1
- up ip route add 192.168.126.0/16 via 172.21.208.16
ip
- Yleiskomento verkkoasetusten säätämiseen, korvaa vanhat erilliset komennot komennot ifconfig, route, netstat ja arp (mutta Linux-spesifi, jälkimmäisiä tarvitaan yhä mm. *BSD:ssä, ja ne toimivat useimmissa Linux-jakeluissakin yhä)
ip
- Paljon toimintoja, yleinen syntaksi
- ip [ optiot ] kohde { komento }
- missä kohde voi olla jokin seuraavista:
- link, address, addrlabel, route, rule, neighbour, ntable, tunnel, tuntap, maddr, mroute, mrule, monitor, xfrm, netns, l2tp, tcp_metrics
- (useimmat voi lyhentää, esim. ”ip ro” jne)
ip
- Yleisiä optioita -s[tatistics]: näytä tilastoja, -r[esolve]: hae nimet DNS:stä (vanhoissa route, netstat jne komennoissa dns-haku tehtiin oletuksena ellei -n -optiota annettu, ip:ssä käytetään numeroita ellei -r:ää ole annettu)
ip route
- Reititystaulun tutkimiseen ja muokkaamiseen (korvaa vanhan route-komennon). Yleisimmät käyttötavat ja joitakin esimerkkejä (ks. man ip-route):
- ip route [show]
- Näyttää reititystaulun; lyhennettävissä esim. ”ip ro”
- ip route add address[/mask] via router [dev device]
- ip route add 192.168.122.0/24 via 172.21.208.17 dev eth0
- ip route delete ...
- Argumentit kuten add-komennossa (tai kuten show näyttää)
ip route
- ip route change ...
- ip route change default via 172.21.208.17
- ip route replace ...
- Kuten change mutta ei valita vaikka reittiä ei ennestään olisi
- ip route get address
- Selvittää reitin yksittäiseen osoitteeseen
- ip route save >file
- Kuten show mutta tulostus binäärimömmö, jota restore ymmärtää
- ip route restore <file
ip link
- Verkkolaitteiden asetukset (korvaa osin ifconfig-komennon). Paljon alakomentoja ja optioita (ks. man ip-link), yleisimpiä:
- ip link [show]
- ip -statistics link show # lyhyemmin ip -s li
- ip link set dev eth0 up
- ip li set dev eth0 arp off
ip address
- Verkko-osoitteiden asetukset (ks. man ip-address):
- ip address [show]
- ”show” on oletus ja voidaan jättää pois ellei lisäargumentteja ole
- ip addr show eth0
- ip add show up
- ip ad add 192.168.5.6/24 dev eth0 # ip alias = toinen ip samalle interfacelle
- ip ad broadcast 192.168.5.255 dev eth0
- ip ad delete 192.168.5.6/24 dev eth0
ip neighbour
- Kuvaus IP → MAC (hardware) address
- Naapuritaulun käsittely korvaa vanhan arp-komennon ja tarjoaa vastaavan toiminnallisuuden myös IPv6:een
- Naapuritaulussa (IPv4:ssä myös ARP-taulu, sanoista Address Resolution Protocol) on tieto siitä, mikä IP vastaa mitäkin hardware-osoitetta ja interfacea; päivittyy yleensä automaattisesti
ip neighbour
- Naapuritaulua voi tutkia ja muokata, esim (optioita on paljon enemmänkin, ks. man ip-neighbour):
- ip neighbour [show]
- ip neighb flush dev eth0
- ip neigh add ip-address hw-address dev device
- ip neigh change ...
- ip neigh replace...
- ip neigh delete ...
ARP proxy
- Reititys MAC-osoitteiden perusteella
- Kone reagoi toiselle (”fyysisen” aliverkon ulkopuolella olevalle) koneelle (koneille) tarkoitettuihin paketteihin ja ohjaa ne perille (esim. toisen verkkokorttinsa kautta, jotain tunnelia pitkin tms)
- Mahdollistaa aliverkon jakamisen osiin läpinäkyvästi (aliverkon muiden koneiden ei tarvitse tehdä mitään reitityksiä tms)
SSH port forwarding
- Ssh osaa välittää pääteyhteyden lisäksi melkein mitä vain tcp/ip-liikennettä
- Mahdollistaa yksittäisten porttien ohjaamisen (reitittämisen) eri koneille
- Edellyttää että ssh-yhteys muodostettavissa, IP-tason reitityksen pitää siis toimia ensin
- Yhteys kryptografisesti salattu ja autentikoitu
Port forwarding: local→remote
- -L [bind_address:]port:host:hostport
- Ohjataan lokaalin koneen portti etäkoneen porttiin: lokaalin koneen porttia voidaan käyttää kuin se olisi etäkoneessa. Huom. host ei yleensä ole sama kone johon ssh-yhteys otetaan, vaan jokin kone sen verkossa. Jos se on palomuurin takana, nimipalvelu ei yleensä toimi vaan tarvitaan IP.
Port forwarding: remote→local
- -R [bind_address:]port:host:hostport
- Ohjataan etäkoneen portti lokaalin koneen porttiin: etäkone voi käyttää lokaalin koneen porttia kuin omaansa. Tässä host on jokin kone lokaalin koneen kanssa samassa verkossa (ja nimipalvelukin toimii).
Port forwarding options
- -N Ei suoriteta mitään komentoa (vain porttiohjaus)
- -f Jätetään ssh taustalle (mahd. salasanakyselyn jälkeen)
- -n sulje ssh:n stdin (ei toimi salasanakyselyn kanssa)
- -g Salli etäyhteydet lokaaleihin forwardoituihin portteihin
- -A salli (-a kiellä) ssh-agentin forwardointi
- (enemmänkin on...)
Local port forwarding esimerkki
- Esimerkki: kotiverkossa on kone johon pääsee ssh:lla (”koti1”, sisäinen IP 192.168.1.5) ja toinen kone jossa pyörii ”koti-intranet” (”kotiwww”, 192.168.1.6). Komento (ulkopuolisesta koneesta):
- ssh koti1 -L 8080:192.168.1.6:80 -N -f
- ja selaimessa http://localhost:8080
- näkee koti-intranetin, mutta vain koneessa, jossa ssh pyörii.
Local port forwarding esimerkki
- Jos portti halutaan jakaa muillekin, asetettava bind_address, esim.
- ssh koti1 -L '*:8080:192.168.1.6:80' -g -N -f
- tai se voi olla määrätty ssh_config- tai .ssh/config tiedostossa: GatewayPorts=yes
- Etäkoneelle pitää yleensä käyttää IP:tä jos se on palomuurin takana (nimipalvelukutsu tehdään lokaalissa koneessa, joka ei tiedä palomuurin takaisia nimiä)
- -L -optioita voi antaa useita (eri porteilla ja koneilla)
Remote port forwarding esimerkki
- Esimerkki 1: Sama tilanne kuin edellä, mutta mennäänkin sisältä ulos avaamaan portti (kotikoneesta):
- ssh -R 8080:kotiwww:80 ulkokone
- ja jälleen (ulkokoneen!) portissa 8080 näkyy koti-intranet.
- Jälleen jako muille koneille bind_address -asetuksella:
- ssh -R '*:'8080:kotiwww:80 ulkokone
Remote port forwarding esimerkki
- Edellyttää, että forwarding on sallittu ulkokoneen sshd_config -tiedostossa: GatewayPorts=yes (huom. eri merkitys kuin ssh_config'issa!)
- Tässä nimipalvelu toimii kuten sisäverkossa yleensäkin, koti-intranetille voi käyttää nimeä (”kotiwww”)
- -R optioitakin voi antaa useita eri koneille ja porteille
Remote port forwarding esim2
- Esimerkki 2: palvelin mokkulan päässä, dynaaminen IP, NAT, puhelinyhtiö ei salli yhteyksiä sisäänpäin. Avataan käänteinen ssh-yhteys etäkoneesta:
- ssh -R 52022:localhost:22 julkikone
- ja julkikoneesta pääsee takaisin:
- ssh -p 52022 localhost
Remote port forwarding: autossh
- Usein kätevä autossh-ohjelman kanssa käynnistettynä /etc/rc.local -tiedostosta tyyliin
- (-M on autossh:n oma optio, jolla valitaan portti jota se käyttää lähinnä seuraavan (tässä 50024) kanssa yhteyden päälläpysymisen testaamiseen, muut se välittää ssh:lle. Vrt. TCPKeepAlive, ClientAliveCountMax ja ClientAliveInterval, ServerAliveCountMax, ServerAliveInterval)
Ssh: X forwarding
- ”X Window System”
- Etäkone pääsee käsiksi lokaaliin näyttöön &c (terminologia: ”X server” = lokaali kone jossa näyttö on, ”client” etäkoneen ohjelma, joka sitä käyttää)
- Etäkone pääsee myös hiireen ja näppäimistöön käsiksi, vaarallista
- Optiot -X, -Y, -x
- Ympäristömuuttuja $DISPLAY
Ssh: X forwarding
- -Y rajoittamaton lokaalin näytön etäkäyttö; vaarallinen, etäkone voi tehdä ”mitä vain”, kaapata näppäimistön, sotkea lokaaleja (X-)ohjelmia jne (aikojen alussa tämä oli ainoa vaihtoehto...)
- -X rajoitettu ja turvallisempi: etäkoneen ohjelmat eivät pääse suoraan käsiksi lokaaleihin ohjelmiin ja niiden käynnistymisaika on rajoitettu xauth-tokenilla. Silti myös -X on vaarallinen, etäkone pääsee helposti mm. seuraamaan näppäimistöä
- -x estää X-forwardoinnin (jos se on oletuksena päällä)
- Tilapäisesti kumottavissa (esim. aliprosessille) tyhjentämällä ympäristömuuttuja $DISPLAY (DISPLAY= ./proggis)
Esimerkki: initramfs hukassa
- Tuhotaan initramfs vahingossa: rm /boot/initrd*
- Uuden voi luoda helposti:
- update-initramfs -u
- Jos kone bootataan initramfs:n puuttuessa, se yleensä epäonnistuu, myös recovery boot, mutta initramfs:n voi luoda toisen koneen avulla
Esimerkki: initramfs hukassa
- Jos toinen kone on lähes identtinen, initramfs:n voi kopioida sieltä sellaisenaan. Usein se ei kuitenkaan toimi (initramfs saattaa sisältää konekohtaisia tunnisteita).
- Seuraavassa esimerkissä rakennetaan initramfs toisessa koneessa käyttäen rikkoutuneen koneen tiedostojärjestelmää chroot'in avulla.
- Oletaan että initramfs on hukattu koneessa mailkang3, liitetään sen levy koneeseen mailkang2, molemmissa LVM, koneen mailkang3 volume group ”mailkang3”, LVt "lvroot", "lvusr" &c.
Esimerkki: initramfs hukassa
- Alustakoneessa:
- destroy mailkang3 # jos käynnissä
- virsh attach-disk mailkang2 ~/mailkang3.img vdb
- # --persistent ei tarpeen
Esimerkki: initramfs hukassa
- Virtuaalikoneessa mailkang2:
- vgscan
- mkdir -p /mnt/mailkang3
- mount /dev/mailkang3/lvroot /mnt/mailkang3
- mount /dev/mailkang3/lvusr /mnt/mailkang3/usr
- mount /dev/mailkang3/lvvar /mnt/mailkang3/var
- mount /dev/mailkang3/lvhome /mnt/mailkang3/home
- mount /dev/mailkang3/lvtmp /mnt/mailkang3/tmp
Esimerkki: initramfs hukassa
- mount --bind /proc /mnt/mailkang3/proc
- mount --bind /dev /mnt/mailkang3/dev
- mount --bind /sys /mnt/mailkang3/sys
- chroot /mnt/mailkang3
- update-initramfs -u
- exit # lopettaa chroot'in
- umount /mnt/mailkang3/{usr,home,var,tmp,dev,proc,sys} /mnt/mailkang3
- vgchange -a n mailkang3
Esimerkki: initramfs hukassa
- Taas alustakoneessa:
- virsh detach-disk mailkang2 vdb
- virsh start mailkang3
- Tällaisenakin operaatio edellyttää virtuaalikoneiden olevan riittävän samanlaisia.