Pan ychwanegwch rhagddodiad IPv6 at dwneli safle-i-safle, nid yw'r pecyn yn teithio fel y mae'r diagram yn ei awgrymu. Mae'r porth lleol yn cymryd y pecyn IPv6 cyfan, yn ei amgryptio, ac yn rhoi pennawd IP allanol o'i flaen y mae ei deulu cyfeiriadau yn cael ei benderfynu gan gyfeiriadau'r pen draw, nid gan yr hyn sydd y tu mewn. Mae'r porth pell yn tynnu'r pennawd allanol hwnnw ac yn anfon y pecyn gwreiddiol ymlaen i'w LAN, lle mae'n becyn IPv6 cyffredin eto. Twneli allanol a thraffig mewnol yw dwy sgwrs ar wahân sy'n rhannu allwedd, pâr pen draw, a dim arall.

Dau bennawd, dau deulu cyfeiriadau

Ym modd twneli IPsec, mae'r pecyn IPv6 mewnol yn dod yn lwyth cynnwys y tu ôl i bennawd ESP. Gall y pennawd allanol sy'n cario'r pecyn ESP hwnnw fod yn IPv4 neu IPv6, ac mae'n dilyn local_addrs a remote_addrs. Mae WireGuard yn gwneud yr un peth gyda llai o seremonïau: y pecyn mewnol yw llwyth cynnwys datagram UDP i ben draw'r cymar. Mae'r ddau yn gadael y pennawd mewnol heb ei gyffwrdd, a dyna pam y gall yr ochr bell ei lwybreiddio ar ôl datgapsiwleiddio.

Mae'r llwybr rhwng y safleoedd yn gweld dim ond UDP 4500 pan fydd IPsec yn defnyddio tramwai NAT, neu UDP 51820 ar gyfer gwrandawydd WireGuard diofyn. Gall unrhyw lwybrydd ar y llwybr fod yn IPv4 yn unig ac mae'r traffig IPv6 yn croesi o hyd, oherwydd ni fydd byth yn ymddangos fel pecyn IPv6 ar y llwybr hwnnw. Mae hynny'n rhoi hollt gyntaf lân: mae tcpdump -ni eth0 udp port 51820 yn dangos y llwybr wedi'i amgryptio, tcpdump -ni wg0 ip6 yn dangos y traffig mewnol. Mae cipiad allanol prysur gyda chipiad mewnol distaw yn golygu nad yw'r cnewyllyn yn rhoi IPv6 yn y twneli; llwybreiddio neu bolisi yw hynny, nid cyflwr cyswllt.

Mae'r porth hefyd yn lleihau'r Hop Limit mewnol wrth anfon ymlaen, felly mae'r pen draw yn cyfrif fel llwybryddion ar y llwybr IPv6. Mae nifer y naid allanol a'r Hop Limit mewnol yn symud yn annibynnol, ac mae pecyn sy'n marw yn y porth pell yn marw wrth anfon ymlaen, nid wrth amgryptio.

Mae'r detholwyr a AllowedIPs yn rhestr caniatâd

Mae IKEv2 yn negodio pa ragodau mewnol y gall child SA eu cario. Ar strongSwan 5.9 ac wedyn, mae eu hysgrifennu allan yn swanctl.conf yn edrych felly:

children {
  net6 {
    local_ts  = 2001:db8:aa::/48
    remote_ts = 2001:db8:bb::/48
    mode = tunnel
    esp_proposals = aes256gcm16-prfsha384-ecp384
    start_action = trap
  }
}

Hepgorwch local_ts a remote_ts ac mae strongSwan yn eu deillio o is-rwydweid y rhyngwyneb y mae'n ei ddewis. Ar westeiwydd dual-stack mae'r llwybr byr hwnnw'n aml yn cynhyrchu pâr IPv4 yn unig: mae'r SA yn codi ac mae IPv6 yn cael ei wrthod cyn iddo gyrraedd cod ESP. Mae ysgrifennu'r ddau ragod allan yn gwneud y SA yn gymwys i'w cario, ac mae start_action = trap yn ei godi ar y pecyn cyfatebol cyntaf.

Mae gan WireGuard un rhestr sy'n gwneud dwy swydd. Yn y bloc cymar, AllowedIPs = 2001:db8:bb::/48, fd00:bb::/48 yw'r llwybr a osodir wrth anfon a'r hidlwr a gymhwysir wrth dderbyn: mae pecyn wedi'i ddadgryptio y mae ei ffynhonnell fewnol y tu allan i restr y cymar hwnnw yn cael ei ollwng yn dawel. Mae wg-quick yn ychwanegu llwybr fesul cofnod, felly nid oes angen gorchymyn ip -6 route ar wahân ar y bloc cymar isod.

[Interface]
Address = 2001:db8:aa:ff::1/64, fd00:aa:ff::1/64
ListenPort = 51820

[Peer]
PublicKey = <site-b-public-key>
Endpoint = 203.0.113.20:51820
AllowedIPs = 2001:db8:bb::/48, fd00:bb::/48

Rhaid i'r ddwy restr gael eu hadlewyrchu: mae safle B yn derbyn rhagddodiad safle A fel detholydd pell ac yn ei lwybreiddio'n ôl, ac mae'r twneli yn gweithio dim ond pan fydd y ddau gyfeiriad yn cytuno. Mae rhestr anghymesur yn rhoi'r symptom sy'n costau'r amser mwyaf — ysgwyd llaw iach, cownteri'n symud ar un ochr, a ping o A i B sy'n llwyddo tra na fydd dim o B yn cyrraedd A.

Anfon ymlaen, llwybrau a'r rhagddodiad dychwelyd

Nid yw Linux yn anfon IPv6 ymlaen nes byddwch yn dweud, ac mae'r gosodiad fesul namespace yn hytrach na fesul rhyngwyneb:

sysctl -w net.ipv6.conf.all.forwarding=1
ip -6 route add 2001:db8:bb::/48 dev wg0
ip -6 route get 2001:db8:bb::10 from 2001:db8:aa::10

Llinell yr ail yw'r un a anghofir mewn dyluniadau sy'n seiliedig ar lwybrau. Mae IPsec polisi-seiliedig yn gosod polisi XFRM sy'n cyfateb i'r rhagodau, ond mae setup llwybr-seiliedig gyda vti6 neu WireGuard angen llwybr IPv6 go iawn sy'n pwyntio at y ddyfais honno. Parhedwch y sysctl o dan /etc/sysctl.d/; fel arall mae aildrosio yn dychwelyd anfon ymlaen i ddiffodd yn dawel.

Mae anfon ymlaen yn cael sgil-effaith sy'n werth ei gwybod: yna mae'r cnewyllyn yn anwybyddu hysbysebion llwybrydd oni bai bod net.ipv6.conf.<wan>.accept_ra yn 2, felly gall porth y mae ei gyfeiriad WAN yn cyrraedd trwy SLAAC golli ei lwybr diofyn y funud y byddwch yn galluogi anfon ymlaen. Gosodwch accept_ra = 2 ar y rhyngwyneb hwnnw yn yr un ffeil ac mae'r llwybr yn goroesi. Rhaid i graidd safle B hefyd ddysgu 2001:db8:aa::/48 gan borth y twneli, trwy lwybr statig neu brotocol llwybreiddio dros y twneli, neu bydd yr ateb yn marw y tu mewn i rwydwaith B ei hun.

Archwiliad pedwar cam sy'n lleoleiddio'r torri

Gweithiwch yn y drefn hon a stopwch ar y cam cyntaf sy'n methu, oherwydd bod pob cam diweddarach yn dibynnu ar y rhai cynharach.

  1. Detholwyr: dylai swanctl --list-sas ddangos y pâr rhagddodiad IPv6 ar y child SA, neu wg show wg0 allowed-ips y rhagddodiad pell gyda latest-handshakes diweddar.
  2. Llwybr y cnewyllyn: rhaid i ip -6 route get 2001:db8:bb::10 ateb gyda'r ddyfais twneli, nid y rhyngwyneb WAN.
  3. Cipiad mewnol: tcpdump -ni wg0 ip6 wrth bingo rhwng gwesteiwyr LAN go iawn. Mae pecynnau'n gadael ond dim un yn dychwelyd yn cyfeirio at lwybr neu wal dân B; dim pecynnau o gwbl yn cyfeirio'n ôl at gam 1 neu 2.
  4. Cyrchfan: ar westeiwydd B, mae ss -6 -ltn yn cadarnhau bod y gwasanaeth yn gwrando ar IPv6, ac mae cownteri wal dân lleol yn dangos a gafodd y pecyn ei dderbyn neu ei ollwng.

Mae'r MTU yn rhan o'r un daith. Nid yw llwybryddion IPv6 yn tameidrannu, felly mae pecyn mawr yn cael ei ollwng ac mae Packet Too Big yn dod yn ôl i'r anfonydd. Os yw ysgwyd llaw a pingau bach yn gweithio ond mae trosglwyddo ffeil yn stopio, lleihau'r llwyth cynnwys nes ei fod yn pasio: ping -6 -s 1400 -c 3 2001:db8:bb::10. Mae rhyngwynebau WireGuard yn diofyn i 1420 beit MTU ac mae IPsec dros IPv4 yn tynnu mwy, felly mae pennu'r MTU mewnol yn well na gobeithio am ddarganfod MTU llwybr trwy wal dân sy'n gollwng ICMPv6.

Moddau methu sy'n edrych fel problemau wal dân

Nid yw'r un mwyaf cyffredin yn unman o wal dân: mae'r gwasanaeth yn clymu at 0.0.0.0 yn lle ::, mae'r cofnod AAAA yn bodoli, ac mae'r cleient yn cael gwrthodiad cyflym dros IPv6 y mae porwr dual-stack yn ei guddio trwy ddychwelyd i IPv4. Os dim ond rhai rhaglenni sy'n methu, gwiriwch y teulu gwrando cyn cyffwrdd â set rheolau.

Yr ail yw hidlo ICMPv6. Mae Neighbor Discovery a Packet Too Big yn rhan o weithredu arferol, nid diagnosteg, ac mae polisi sy'n gollwng pob ICMPv6 yn cynhyrchu twneli sy'n cysylltu, yn dilysu, ac yna'n stopio ar unrhyw beth mwy na phecyn bach. Caniatáu'r mathau y mae'r llwybr yn dibynnu arnynt a gadael y cownteri ymlaen fel bod gollwng yn weladwy.

Y trydydd yw rhagddodiad sy'n cael ei ychwanegu at y twneli ond byth at gynllun cyfeiriadau'r safle sy'n berchen arno, felly nid oes llwybrydd yn ei hysbysebu ac ni all unrhyw westeiwydd ateb ohono. Dechreuwch gydag un rhagddodiad a phâr o westeiwyr, profwch y ddau gyfeiriad gyda'r pedwar cam, yna ychwanegwch y gweddill; mae rhagddodiad toredig yn aros un llinell mewn ffurfweddiad yn lle ailddyluniad. Yr un cyfeirnod swyddogol sy'n werth ei gadw agored yw RFC 8200, sy'n diffinio'r pennawd y mae'r twneli yn ei gario.

Erthyglau cysylltiedig