Ubuntu: No route to host

Na domácím serveru se mi stala zvláštní věc. Pokoušel jsem se forknout repositář z Githubu s Bowerem:

media@mediaserver:/var/www/playground$ bower install bootstrap

Výsledek byl:

bower bootstrap#* not-cached git://github.com/twbs/bootstrap.git#*
 bower bootstrap#* resolve git://github.com/twbs/bootstrap.git#*
 bower bootstrap#* ECMDERR Failed to execute "git ls-remote --tags --heads git://github.com/twbs/bootstrap.git", exit code of #128

Additional error details:
 fatal: unable to connect to github.com:
 github.com[0: 192.30.252.130]: errno=No route to host

Analýza problému

Zaujala mě přeložená adresa Githubu – 192.30.252.130. Pravděpodobně kvůli nedostatku IP adres se začaly přidělovat i rozsahy určené pro lokální sítě – 192.0.0.0 a 138.0.0.0. Spíš jen pro jistotu jsem zkusil telnet:

media@mediaserver:/var/www/playground$ telnet github.com 9418
 Trying 192.30.252.130...
 telnet: Unable to connect to remote host: No route to host

Jako první mě napadlo, jestli není na firewallu v routeru (s dd-wrt) blokovaný port 9418. To byla ale úvaha mylná, protože na jiném počítači v síti git používám bez problému.

Tak jsem zkusil cílovou ip pingnout:

media@mediaserver:/var/www/playground$ ping 192.30.252.130
 PING 192.30.252.130 (192.30.252.130) 56(84) bytes of data.
 From 192.168.1.100 icmp_seq=1 Destination Host Unreachable
 From 192.168.1.100 icmp_seq=2 Destination Host Unreachable
 From 192.168.1.100 icmp_seq=3 Destination Host Unreachable
 From 192.168.1.100 icmp_seq=4 Destination Host Unreachable
 From 192.168.1.100 icmp_seq=5 Destination Host Unreachable
 From 192.168.1.100 icmp_seq=6 Destination Host Unreachable

Áha. Takže se na cílovou ip ani nedostanu. Z jiných počítačů vše v pohodě, problém je tedy přímo v serveru.

Řešení

Rutinně jsem se kouknul na routy:

media@mediaserver:/var/www/playground$ netstat -r
 Kernel IP routing table
 Destination Gateway Genmask Flags MSS Window irtt Iface
 default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
 192.0.0.0 * 255.0.0.0 U 0 0 0 eth0

Bingo! Druhá routa požere všechno začínající 192. Řešení je jednoduché. V mém případě, kdy v lokální síti používám více rozsahů jsem přidal pouze menší rozsah:

media@mediaserver:/var/www/playground$ sudo route add -net 192.30.0.0 netmask 255.255.0.0 gw 192.168.1.1 dev eth0

A routovací tabulka nyní vypadá:

media@mediaserver:/var/www/playground$ netstat -r
 Kernel IP routing table
 Destination Gateway Genmask Flags MSS Window irtt Iface
 default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
 192.0.0.0 * 255.0.0.0 U 0 0 0 eth0
 192.30.0.0 192.168.1.1 255.255.0.0 UG 0 0 0 eth0

A vše funguje:

media@mediaserver:/var/www/playground$ ping 192.30.252.130
 PING 192.30.252.130 (192.30.252.130) 56(84) bytes of data.
 64 bytes from 192.30.252.130: icmp_req=1 ttl=48 time=132 ms
 64 bytes from 192.30.252.130: icmp_req=2 ttl=48 time=132 ms
 64 bytes from 192.30.252.130: icmp_req=3 ttl=48 time=132 ms
 64 bytes from 192.30.252.130: icmp_req=4 ttl=48 time=132 ms
 64 bytes from 192.30.252.130: icmp_req=5 ttl=48 time=132 ms
 64 bytes from 192.30.252.130: icmp_req=6 ttl=48 time=132 ms

Ponaučení

Pokud na jednom stroji nefungují některé stránky nebo služby, vyplatí se kouknout do routovací tabulky.

2 komentáře u „Ubuntu: No route to host

    1. lukas Autor příspěvku

      Jedna věc je standard a druhá praxe. Už jsem několikrát viděl, že měly lokální sítě nastavený např. 192.1.1.* . Možná proto Ubuntu nebo dd-wrt (nevím, odkud se mi to ta vzalo) pak bere celý rozsah 192.* jako lokální. Podobně jsem četl před pár měsíci, že některý hostingy dostaly adresy začínající na 1 (nebo něco podobnýho) a část uživatelů se tam (asi kvůli nastavení firewallu) nedostala. I když všechno bylo podle standardu.

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Můžete používat následující HTML značky a atributy: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>