Ég setti net.ipv6.conf.all.forwarding=1 á Debian-hlið svo það gæti sent VPN-biðlaraumferð áfram, og um hálftíma síðar var vélin ekki með neina IPv6-sjálfgefna leið lengur. Uppstreymisbeinirinn var í gangi, hlekk-staðbundið nágranninn svaraði enn, og uppstreymið hélt áfram að hafa altæka vistfangið. Það sem hafði stöðvast var vilji kjarnans til að taka áfram við beinatilkynningum á því netviðmóti. Leiðin hvarf ekki þegar ég sló inn sysctl-skipunina; hún hvarf þegar líftími RA-lærðu sjálfgefnu leiðarinnar rann út og ekkert endurnýjaði hana.

Ekkert leit út fyrir að vera bilað við fyrstu sýn. Framsendingin virkaði, biðlararnir komust áfram á meðan gamla leiðin var enn í skyndiminni, og bilunin kom seinna en breytingin sem olli henni. Sú seinkun er ástæðan fyrir því að þessu er kennt um uppstreymið eða eldveggjarreglu sem var aldrei viðriðin.

Lestu leiðatöfluna áður en þú snertir nokkuð sysctl

Byrjaðu á ip -6 route show default og lestu eigindin, ekki bara gáttina. RA-lærð sjálfgefna leið er merkt proto ra, ber forgang og sýnir expires-niðurtalningu. Leið sem þú bættir við handvirkt hefur hvorugt, og sá munur segir þér hvaða kerfi á leiðina.

$ ip -6 route show default
default via fe80::1 dev eth0 proto ra metric 1024 expires 1432sec hoplimit 64 pref medium

Líttu þá á vistfangið: ip -6 addr show dev eth0. Altækt vistfang með ákjósanlegum og gildum líftímum mældum í klukkustundum lifir sjálfgefnu leiðina af þar sem beinalíftíminn er mældur í mínútum. Vistfang til staðar en sjálfgefna leið vantar er einkenni tilkynningarvandamáls. Vantar vistfangið líka er hlekkurinn, forskeytisupplýsingarnar eða tvítekið vistfangaskoðun það sem þú átt að elta fyrst.

Hvers vegna framsending slekkur á RA-vinnslu

Tilkynning er ICMPv6-pakki af gerð 134, sendur frá hlekk-staðbundinni uppsprettu með hoppmörk 255. Áður en kjarninn notar hana skoðar hann accept_ra netviðmótsins. Sjálfgefið gildi er 1, og 1 þýðir ekki já. Það þýðir: samþykkja aðeins á meðan þessi vél sendir ekki áfram. Stilltu forwarding=1 og það skilyrði bregst, svo tilkynningunni er hent áður en nokkurt forskeyti eða sjálfgefinn beinir í henni er skoðað.

Þrjú gildi eru til, og aðeins það þriðja lifir framsendingu af:

accept_raforwarding=0forwarding=1
0ignoredignored
1 (default)acceptedignored
2acceptedaccepted

Tvö önnur fáni ákvarða hvað er í raun sett upp. accept_ra_defrtr stýrir því hvort sjálfgefni beinirinn í tilkynningunni verði leið, og accept_ra_pinfo stýrir því hvort forskeytisupplýsingar séu notaðar við vistfangastillingu. Að slökkva á accept_ra_defrtr er venjulega leiðin til að halda SLAAC-vistföngum á framsendandi vél án þess að læra sjálfgefna leið. Það er annar lykill en accept_ra, og það er sá sem þú grípur þegar þú vilt vistföng en ekki leið. IP-sysctl-viðmið kjarnans listar öll þrjú.

Staðfestu það með þremur skipunum

Lestu fyrst lifandi gildin í stað skrárinnar sem þú heldur að sé hlaðin:

sysctl net.ipv6.conf.eth0.forwarding net.ipv6.conf.all.forwarding \
       net.ipv6.conf.eth0.accept_ra net.ipv6.conf.eth0.accept_ra_defrtr

Sannaðu í öðru lagi að tilkynningarnar berist enn. Sía á ICMPv6-gerðarbætinu er nóg, og það sparar þér að lesa vegg af nágrannauppgötvunarumferð:

tcpdump -ni eth0 'icmp6 and ip6[40] == 134'

Ef ekkert birtist á nokkrum mínútum er accept_ra ekki vandamálið þitt. Uppstreymið hætti að tilkynna, eitthvað á leiðinni síar ICMPv6, eða þetta netviðmót er í raun ekki á þeim hluta sem þú heldur. Biddu í þriðja lagi sjálf um tilkynningu og lestu reitina:

rdisc6 eth0

rdisc6 fylgir með pakkanum ndisc6 á Debian og Ubuntu. Í úttakinu skaltu líta á beinalíftímann og forganginn áður en þú breytir einhverju öðru. Tilkynning með beinalíftíma 0 er fyrirmæli um að fjarlægja sjálfgefna beininn, og ekkert accept_ra-gildi breytir því í nothæfa leið. Þetta er líka hvernig þú grípur uppstreymis-CPE í brúarham sem úthlutar forskeytum en býður sig aldrei fram sem bein.

Gerðu uppstreymið eina umburðarlynda netviðmótið

Ef uppstreymið á að vera sjálfgefni beinirinn skaltu samþykkja tilkynningar þar þrátt fyrir framsendingu, og hvergi annars staðar:

# /etc/sysctl.d/60-ipv6-router.conf
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.eth0.accept_ra = 2
net.ipv6.conf.eth0.accept_ra_defrtr = 1

Mörkin skipta máli vegna þess að IPv6-framsending er einn altækur rofi í Linux, ekki einn á hvern hlekk. Skrifaðu 1 í net.ipv6.conf.wg0.forwarding og lestu svo net.ipv6.conf.all.forwarding: altæka gildið veltur og hvert netviðmót byrjar að senda áfram. Þú getur ekki verið beinir á göngunni og venjuleg vél á staðarnetinu. Það sem þú getur afmarkað er samþykkið. Hafðu accept_ra=2 á uppstreyminu og láttu göngu- og staðarnetsviðmótin standa á 1 eða 0, svo villutilkynning sem berst um gönguna geti ekki sett upp sjálfgefna leið sem bendir inn í hana.

Tímabundið sysctl -w lifir næstu endurræsingu ekki af, og bæði systemd-networkd og NetworkManager skrifa þessi gildi úr eigin stillingum. Í networkd skaltu setja IPv6Forwarding=yes og IPv6AcceptRA=yes í .network-skrá uppstreymisins; networkd lýsir IPv6Forwarding sem altæku af sömu kjarnaástæðu. Með NetworkManager er ipv6.method=auto á uppstreyminu það sem knýr accept_ra-gildið, svo lestu sysctl aftur eftir nmcli connection up í stað þess að treysta fyrstu athugun.

Hið kyrrstæða val, ip -6 route add default via fe80::1 dev eth0, virkar vissulega, og það er sanngjarnt svar þegar uppstreymisbeinirinn hefur stöðugt hlekk-staðbundið vistfang. Vertu skýr um hverju þú fórnar. Kyrrstæð sjálfgefna leið er aldrei endurnýjuð og aldrei dregin til baka, svo hún heldur áfram að benda á dauðan nágranna eftir að uppstreyminu er skipt út. RA-leiðin bregst á öruggan hátt; sú kyrrstæða bregst hljóðlaust.

Prófaðu framsent pakka, ekki þann sem hliðið sendir sjálft

Eigin ping hliðsins geta tekist á leið sem enginn biðlari getur notað, og þau geta líka tekist vegna þess að hliðið er uppsprettan. Prófaðu frá tengdum biðlara og spurðu hliðið svo hvað það myndi gera fyrir vistfang þess biðlara:

# on the VPN client
ping -6 -c 3 2001:4860:4860::8888

# on the gateway, using a client address
ip -6 route get 2001:4860:4860::8888 from fd42:20::2

Bíddu svo einn beinalíftíma og líttu aftur. Stöðugt ástand sem þú vilt er sjálfgefna leið merkt proto ra þar sem expires-gildið núllstillist aftur og aftur, auk all.forwarding=1. Ef expires telur bara niður eru tilkynningum enn hent einhvers staðar, og venjulegi sökudólgurinn er netstjóri sem skrifar yfir accept_ra eftir að sysctl við ræsingu hefur þegar keyrt.

Áður en þú lýkur þessu skaltu staðfesta fjóra hluti: sjálfgefna leiðin er proto ra og endurnýjast, accept_ra=2 gildir aðeins fyrir uppstreymið, framsending er enn 1 eftir endurræsingu og eftir endurræsingu stjórans, og biðlari frekar en hliðið klárar IPv6-ping. Ef biðlarinn mistekst enn með heilbrigða leið er næsti grunsamlegi hluturinn afturleiðin eða eldveggur uppstreymis, ekki tilkynningin.

Tengdir greinar