Jūs paceļat tuneli, pingojat fe80::1, izmantojot tuneli kā avota saskarni, un nekas neatgriežas. Tas nav aizmirsts ugunsmūra noteikums. Link-local adresei ir nozīme tikai tajā vienā saitē, kurā tā izveidojās, un maršrutēts VPN nav šī saite. Attālā maršrutētāja fe80::1 atrodas attālajā LAN segmentā; jūs esat vienu lēcienu tālāk citā segmentā, un IPv6 vispār nav mehānisma, ar kuru maršrutētājs pārsūtītu link-local paketes.

fe80 prefikss apraksta tvērumu, nevis diapazonu

Link-local unicast ir fe80::/10, un noteicošā īpašība ir nevis skaitlis, bet tvērums. Adrese ir derīga tikai vienā saitē, un katra saskarne izveido vienu no sava identifikatora, tāpēc divas nesaistītas mašīnas divos nesaistītos tīklos var abas atbildēt uz fe80::1 bez mazākā konflikta. Prefikss būtībā saka “kaut kādā saitē”; pati saite nāk no konteksta.

Resursdatorā šis konteksts ir zona jeb scope ID, ko pievieno aiz procentu zīmes: fe80::1%eth0 Linux, fe80::1%3 vai fe80::1%12 Windows un rīkos, kas parāda saskarnes indeksus. Kodols atrisina adresi kopā ar saskarnes indeksu un pēc tam sūta. Ja noņemat zonu, galamērķis kļūst neviennozīmīgs, tāpēc stekam nav veida, kā izvēlēties segmentu.

Kāpēc maršrutēts tunelis to nevar nogādāt

Maršrutēts VPN ir punkts-punktā saskarne, kas nes savas adreses, parasti /64 no unique-local vai privātā IPv6 lauka tunelī. Attālais LAN ir atsevišķa saite, ko sasniedz tuneļa galapunkts, maršrutējot un pārsūtot jūsu vietā. Tie ir divi atšķirīgi segmenti, tāpēc viena adrese nav derīgs galamērķis otrā.

Pārsūtīšanas noteikums ir skaidri ierakstīts standartā, nevis jūsu klienta dīvainība: maršrutētāji nepārsūta paketes ar link-local avotu vai galamērķi. Tāpēc pakete iet bojā arī tad, kad maršrutu tabula izskatās pareiza. Pievienojiet maršrutu fe80::/64 uz tuneli, un standartam atbilstošs steks vai nu to noraida, vai pieņem un izmet katru atbilstošo paketi: galamērķa tvērums saka “tikai šī saite”, un izejošā saskarne nav šī saite.

Kaimiņu atklāšana nostiprina to pašu robežu. Resursdatori atrisina link-local nākamos lēcienus ar kaimiņa pieprasījumu, kas nosūtīts uz saites tvēruma multicast ar lēcienu ierobežojumu 255, tāpēc maršrutētāji var noraidīt visu pārsūtīto. Padarīt to darbināmu pāri tunelim nozīmētu starpniekot atklāšanu attālam segmentam, kas ir Layer 2 tiltēšana citā cepurē.

Ir klusāka otrā kļūme, un tā pieķer cilvēkus, kuri tomēr mēģina piespiest maršrutu: zona. Kādu zonu jūs ierakstītu lokāli, tā nosauc tuneļa saskarni, bet vēlamā adrese ir piesaistīta attālā LAN saskarnei. Abas nekad nesakrīt, tāpēc paketi nevar novirzīt uz pareizo saskarni tālajā galā.

Kā kļūme izskatās praksē

Rīka izvade tvēruma kļūdai lasās kā maršrutēšanas vai ugunsmūra kļūda, un tieši tāpēc cilvēki pavada pēcpusdienu nepareizajā slānī.

What you runWhat you seeWhat it means
ping fe80::1 with no zoneInvalid argument on Linux, or a transmit failure on WindowsThe stack cannot pick an interface for an ambiguous destination
ping -6 -I tun0 fe80::1Destination unreachable, or a silent timeoutThe address is not on the tunnel link, so there is nothing on-link to answer
ssh user@fe80::1 after the tunnel is upHangs, then no route to hostThe SYN never left the machine in a deliverable form; the server logs nothing
ip -6 neigh show dev tun0Empty tableNo neighbor entry can exist for a link-local host that is not on this link
fe80::/64 inside AllowedIPs or route-ipv6Config accepted, traffic still droppedThe tunnel carried the packet; the receiving stack refused to forward it

Trešā rinda iztērē visvairāk laika, jo ssh klients bez izvades izskatās kā klausošas pakalpojuma problēma. Ja jums ir kāds veids, kā iekļūt, pārbaudiet tālo pusi un apstipriniet, vai sshd ir piesaistīts visām adresēm vai tikai vienai.

Izmantojiet adresi, kas bija paredzēta maršrutēšanai

Visam, kam jāpiekļūst caur tuneli, izmantojiet adresi, kas pakalpojumam tika dota tieši šim nolūkam: globālu unicast adresi vai unique-local adresi no fc00::/7, diapazonu, kas rezervēts tieši šim iekšējam gadījumam. Apstipriniet, ka klausītājs to patiešām saista, un pārbaudiet atgriešanās ceļu un jebkuru resursdatora ugunsmūra noteikumu.

Skatieties uz attālo resursdatoru, nevis miniet. ip -6 addr show uzskaita esošās adreses, un ss -6 -ltn uzskaita, ko dēmons klausās. Pakalpojums, kas piesaistīts tikai fe80::, ir sasniedzams tikai no sava segmenta, kas parasti ir noklusējums, ko neviens nav apzināti izvēlējies un ko var mainīt ar administratora piekrišanu.

Kad pakalpojumu patiešām nevar no jauna piesaistīt, pārvietojiet tiltu uz lietojumprogrammu slāni, nevis uz tīkla slāni. Starpnieks attālajā resursdatorā, kas klausās maršrutējamā adresē un savienojas ar link-local, atrisina problēmu, nepaplašinot nevienu segmentu:

socat TCP6-LISTEN:8080,bind=[fd00:1:2::10] TCP6:[fe80::1%eth0]:80

Šeit zona atrodas pareizajā pusē, tajā resursdatorā, kuram patiešām ir eth0 šajā saitē. Jūsu klients sazinās ar fd00:1:2::10, kas maršrutējas normāli, un starpnieks veic link-local lēcienu lokāli. Tas pats triks darbojas ierīces tīmekļa saskarnei vai vecam BMC, kas reklamē tikai link-local adresi.

Kad tiltēšana patiešām ir atbilde, un kas jāpārbauda

Dažiem izvietojumiem patiešām vajag vienu kopīgu segmentu: ierīcei, kas runā tikai link-local atklāšanu, aparātam, kas atkarīgs no multicast, laboratorijai, kas atveido plakanu LAN. Tā ir Layer 2 problēma, un tai vajag Layer 2 atbildi, piemēram, tap ierīci, kas tiltēta uz attālo saskarni, vai klienta produktu ar skaidru tiltēšanas režīmu. Tas izmaksā apraides un multicast satiksmi, kas šķērso tuneli, plus kaimiņu atklāšanu, kurai jādarbojas no gala līdz galam.

Netuviniet to, pievienojot fe80::/64 maršrutētam profilam. Tas rada sliktāko stāvokli: konfigurācija izskatās pabeigta, maršrutu tabula rāda ierakstu, un katra pakete joprojām tiek izmesta kaut kur starp diviem stekiem, kuri abi uzvedas pareizi.

Pārbaudiet ar saskarni, nevis ar ping. ip -6 addr show tun0 pasaka, vai tuneļa saite izveidoja savu link-local adresi, un ip -6 route get fe80::1%tun0 pasaka, ko kodols patiešām darītu ar tvēruma galamērķi. Kad kodols saka, ka galamērķis šajā saskarnē nav sasniedzams, nekāds tuneļa iestatījums to nemainīs, un ir laiks pārtraukt profila rediģēšanu.

Īsa secība, kas atrisina jautājumu:

  • Izlasiet adresi attālajā resursdatorā un ievērojiet, vai tā ir fe80:: vai maršrutējams prefikss.
  • Ja tā ir fe80::, no jauna piesaistiet pakalpojumu, veiciet starpniecību šajā resursdatorā vai tiltējiet segmentu; ja tā ir maršrutējama, izlabojiet maršrutu, ugunsmūri vai piesaistes adresi.
  • Katru reizi atkārtoti pārbaudot, pārbaudiet zonu no jauna, jo nokopētā komanda parasti saglabā nepareizo saskarni.

Avoti: RFC 4291, IPv6 adrešu arhitektūra.

Saistītie raksti