Njia ya kawaida ya IPv6 ilitoweka baada ya kuwezesha uelekezaji upya kwenye Linux
Kuwasha usambazaji wa IPv6 hufanya kerneli ipuuze router advertisements kwenye uplink, na njia ya kawaida iliyojifunza inaisha muda. Rekebisha kwa accept_ra.
Niliweka net.ipv6.conf.all.forwarding=1 kwenye lango la Debian ili liweze kusambaza trafiki ya wateja wa VPN, na kama nusu saa baadaye mashine haikuwa na njia yoyote ya kawaida ya IPv6. Kipanga njia cha juu kilikuwa hai, jirani wa link-local bado alikuwa akijibu, na uplink bado ilikuwa na anwani yake ya kimataifa. Kilichokoma ni utayari wa kerneli kuendelea kupokea router advertisements kwenye kiolesura hicho. Njia haikupotea nilipoandika sysctl; ilipotea wakati muda wa maisha wa njia ya kawaida iliyojifunza kutoka RA ulipoisha na hakuna kilichoifanya upya.
Kwa mtazamo wa kwanza hakuna kilichoonekana kimevunjika. Usambazaji ulifanya kazi, wateja waliendelea kupita wakati njia ya zamani ilikuwa bado kwenye akiba, na hitilafu ilikuja baadaye kuliko mabadiliko yaliyoizalisha. Ucheleweshaji huo ndio sababu hii inaangushwa kwenye upande wa juu au kwenye sheria ya firewall ambayo haikuwahi kuhusika.
Soma jedwali la njia kabla ya kugusa sysctl yoyote
Anza na ip -6 route show default na usome sifa, sio lango pekee. Njia ya kawaida iliyojifunza kutoka RA ina alama ya proto ra, hubeba upendeleo na inaonyesha hesabu ya nyuma ya expires. Njia iliyoongezwa kwa mkono haina yoyote kati ya hizo, na tofauti hiyo inakuambia ni utaratibu gani unamiliki njia hiyo.
$ ip -6 route show default
default via fe80::1 dev eth0 proto ra metric 1024 expires 1432sec hoplimit 64 pref mediumKisha angalia anwani: ip -6 addr show dev eth0. Anwani ya kimataifa yenye muda wa maisha unaopendelewa na halali unaopimwa kwa saa itaishi muda mrefu kuliko njia ya kawaida ambayo muda wa maisha wa kipanga njia hupimwa kwa dakika. Anwani ipo lakini njia ya kawaida haipo, hiyo ni alama ya tatizo la matangazo. Ikiwa anwani pia haipo, kwanza ni lazima kufuatilia kiungo, taarifa ya kiambishi awali au utambuzi wa anwani zinazorudufiana.
Kwa nini usambazaji huzima uchakataji wa RA
RA ni pakiti ya ICMPv6 ya aina 134, inayotumwa kutoka chanzo cha link-local na kikomo cha kuruka 255. Kabla kerneli kuutumia, hushauriana na accept_ra ya kiolesura. Thamani ya kawaida ni 1, na 1 haimaanishi ndiyo. Inamaanisha: kubali tu wakati mwenyeji huyu hasambazi. Weka forwarding=1 na sharti hilo linashindikana, kwa hiyo tangazo linatupwa kabla ya kuzingatia kiambishi awali au kipanga njia chochote cha kawaida ndani yake.
Kuna thamani tatu, na ni ya tatu pekee inayonusurika kwenye usambazaji:
accept_ra | forwarding=0 | forwarding=1 |
|---|---|---|
| 0 | ignored | ignored |
| 1 (default) | accepted | ignored |
| 2 | accepted | accepted |
Bendera mbili nyingine huamua kinachosakinishwa hasa. accept_ra_defrtr hudhibiti kama kipanga njia cha kawaida kwenye tangazo kinakuwa njia, na accept_ra_pinfo hudhibiti kama taarifa ya kiambishi awali inatumika kwa usanidi wa anwani. Kuzima accept_ra_defrtr ndiyo njia ya kawaida ya kuhifadhi anwani za SLAAC kwenye mwenyeji unaosambaza bila kujifunza njia ya kawaida. Ni kianzio tofauti na accept_ra, na ndicho kinachotumika wakati unataka anwani lakini sio njia. Marejeo ya kerneli kuhusu IP sysctl yanaorodhesha yote matatu.
Thibitisha kwa amri tatu
Kwanza, soma thamani zilizo hai badala ya faili unayodhani limepakiwa:
sysctl net.ipv6.conf.eth0.forwarding net.ipv6.conf.all.forwarding \
net.ipv6.conf.eth0.accept_ra net.ipv6.conf.eth0.accept_ra_defrtrPili, thibitisha kwamba matangazo bado yanafika. Kuchuja kwa baiti ya aina ya ICMPv6 kunatosha, na kunakuokoa kusoma ukuta wa trafiki ya ugunduzi wa majirani:
tcpdump -ni eth0 'icmp6 and ip6[40] == 134'Ikiwa hakuna kinachoonekana kwa dakika kadhaa, accept_ra sio tatizo lako. Upande wa juu uliacha kutangaza, kitu kwenye njia kinachuja ICMPv6, au kiolesura hicho hakiko kweli kwenye sehemu unayodhani. Tatu, omba tangazo mwenyewe na usome sehemu zake:
rdisc6 eth0rdisc6 huja katika kifurushi ndisc6 kwenye Debian na Ubuntu. Kwenye matokeo, angalia muda wa maisha wa kipanga njia na upendeleo kabla ya kubadilisha kitu kingine chochote. Tangazo lenye muda wa maisha wa kipanga njia 0 ni maagizo ya kuondoa kipanga njia cha kawaida, na hakuna thamani ya accept_ra inayolifanya kuwa njia inayoweza kutumika. Hivi ndivyo pia unavyonasa CPE ya juu katika hali ya daraja ambayo husambaza viambishi awali lakini haijitolei kamwe kama kipanga njia.
Fanya uplink kuwa kiolesura pekee kinachoruhusu
Ikiwa upande wa juu unapaswa kuwa kipanga njia cha kawaida, pokea matangazo huko licha ya usambazaji, na mahali pengine popote:
# /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 = 1Uwekaji mipaka ni muhimu kwa sababu usambazaji wa IPv6 kwenye Linux ni swichi moja ya kimataifa, sio moja kwa kila kiungo. Andika 1 kwenye net.ipv6.conf.wg0.forwarding kisha soma net.ipv6.conf.all.forwarding: thamani ya kimataifa inageuka na kila kiolesura huanza kusambaza. Huwezi kuwa kipanga njia kwenye handaki na mwenyeji wa kawaida kwenye LAN. Unachoweza kuweka mipaka ni upokeaji. Weka accept_ra=2 kwenye uplink na uache violesura vya handaki na LAN kwenye 1 au 0, ili tangazo lililopotea linalofika kupitia handaki lisiweze kusakinisha njia ya kawaida inayoelekea ndani yake.
sysctl -w ya muda haitanusurika kwenye uanzishaji unaofuata, na systemd-networkd na NetworkManager zote huandika thamani hizi kutoka usanidi wao wenyewe. Kwenye networkd, weka IPv6Forwarding=yes na IPv6AcceptRA=yes kwenye faili ya .network ya uplink; networkd inaeleza IPv6Forwarding kama ya kimataifa kwa sababu hiyo hiyo ya kerneli. Kwa NetworkManager, ipv6.method=auto kwenye uplink ndiyo inayoongoza thamani ya accept_ra, kwa hiyo soma sysctl tena baada ya nmcli connection up badala ya kuamini ukaguzi wa kwanza.
Mbadala wa kudumu, ip -6 route add default via fe80::1 dev eth0, unafanya kazi kweli, na ni jibu la busara wakati kipanga njia cha juu kina anwani ya link-local thabiti. Kuwa wazi kuhusu unachokitoa. Njia ya kawaida ya kudumu hairudishwi kamwe na haiondolewi kamwe, kwa hiyo inaendelea kuelekeza kwa jirani aliyekufa baada ya upande wa juu kubadilishwa. Njia ya RA inashindwa kwa usalama; ile ya kudumu inashindwa kimya kimya.
Jaribu pakiti iliyosambazwa, sio ile ya lango lenyewe
Ping za lango lenyewe zinaweza kufanikiwa kwenye njia ambayo hakuna mteja anayeweza kuitumia, na zinaweza pia kufanikiwa kwa sababu lango ndilo chanzo. Jaribu kutoka kwa mteja aliyeunganishwa, kisha muulize lango litafanya nini kwa anwani ya mteja huyo:
# 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::2Kisha subiri muda mmoja wa maisha wa kipanga njia na uangalie tena. Hali thabiti unayotaka ni njia ya kawaida yenye alama ya proto ra ambayo thamani yake ya expires inaendelea kuanzishwa upya, pamoja na all.forwarding=1. Ikiwa expires inahesabu tu kushuka, matangazo bado yanatupwa mahali fulani, na mhusika wa kawaida ni meneja wa mtandao anayeandika upya accept_ra baada ya sysctl ya wakati wa kuwasha kuwa imekwisha endeshwa.
Kabla ya kufunga hili, thibitisha mambo manne: njia ya kawaida ni proto ra na inafanywa upya, accept_ra=2 inatumika kwa uplink pekee, usambazaji bado ni 1 baada ya kuwasha upya na baada ya meneja kuwashwa upya, na ni mteja, sio lango, anayekamilisha ping ya IPv6. Ikiwa mteja bado anashindwa na njia nzuri, mshukiwa anayefuata ni njia ya kurudi au firewall ya juu, sio tangazo.