Талбай хоорондын туннелд IPv6 префикс нэмэхэд пакет диаграммд харуулсан замаар явахгүй. Орон нутгийн гарц бүх IPv6 пакетыг авч, шифрлээд, дотор нь юу байгаагаар биш, төгсгөлийн цэгүүдийн хаягаар тодорхойлогдох гадаад IP толгойг урд нь тавина. Алсын гарц тэр гадаад толгойг салгаад анхны пакетыг өөрийн LAN руу дамжуулж, тэнд дахин энгийн IPv6 пакет болно. Гадаад туннел ба дотоод урсгал нь нэг түлхүүр, нэг төгсгөлийн хосыг хуваалцдаг, өөр юу ч хуваалцдаггүй хоёр тусдаа яриа юм.

Хоёр толгой, хоёр хаягийн гэр бүл

IPsec туннелийн горимд дотоод IPv6 пакет ESP толгойн арын ачаа болно. Тэр ESP пакетыг зөөж буй гадаад толгой нь IPv4 эсвэл IPv6 байж болох бөгөөд local_addrs ба remote_addrs-г дагана. WireGuard үүнийг бага ёслолтойгоор хийдэг: дотоод пакет нь хамтрагчийн төгсгөлийн цэг рүү явах UDP датаграмын ачаа юм. Хоёулаа дотоод толгойг хөндөхгүй үлдээдэг тул алсын тал түүнийг задсаны дараа чиглүүлж чадна.

Талбайн хоорондын зам зөвхөн UDP 4500-г хардаг — IPsec NAT-ы нэвтрэлт ашиглах үед, эсвэл WireGuard-ын өгөгдмөл сонсогчийн хувьд UDP 51820. Зам дээрх ямар ч чиглүүлэгч зөвхөн IPv4 байж болох ч IPv6 урсгал дамжин өнгөрдөг, учир нь энэ зам дээр хэзээ ч IPv6 пакет болж харагддаггүй. Энэ нь цэвэр эхний хуваалтыг өгдөг: tcpdump -ni eth0 udp port 51820 шифрлэгдсэн замыг, tcpdump -ni wg0 ip6 дотоод урсгалыг харуулна. Гадаад барилт завгүй, дотоод нь чимээгүй байвал кернел IPv6-г туннелд хийхгүй байна гэсэн үг; энэ нь чиглүүлэлт эсвэл бодлого, холбоосын төлөв биш.

Гарц мөн дамжуулахдаа дотоод Hop Limit-ыг бууруулдаг тул төгсгөлийн цэгүүд IPv6 зам дээр чиглүүлэгч гэж тооцогдоно. Гадаад үсрэлтийн тоо ба дотоод Hop Limit нь бие даасан хөдөлдөг бөгөөд алсын гарц дээр үхсэн пакет дамжуулалтад үхсэн, шифрлэлтэд биш.

Селекторууд ба AllowedIPs бол зөвшөөрлийн жагсаалт

IKEv2 нь child SA ямар дотоод префиксийг зөөж болохыг тохиролцдог. strongSwan 5.9 ба түүнээс хойшхи хувилбарт тэдгээрийг swanctl.conf-д бичих нь ингэж харагдана:

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

Хэрэв local_ts ба remote_ts-г орхивол strongSwan тэдгээрийг өөрийн сонгосон интерфейсийн дэд сүлжээнээс гаргаж авна. Dual-stack хост дээр энэ товчлол ихэвчлэн зөвхөн IPv4 хосыг өгдөг: SA өргөгдөж, IPv6 нь ESP кодод хүрэхээс өмнө татгалзагдана. Хоёр префиксийг бичвэл SA тэдгээрийг зөөх чадвартай болж, start_action = trap эхний тохирох пакет дээр өргөнө.

WireGuard нэг жагсаалттай бөгөөд энэ нь хоёр ажил хийдэг. Хамтрагчийн блокт AllowedIPs = 2001:db8:bb::/48, fd00:bb::/48 нь илгээх үед суулгах маршрут ба хүлээн авах үед хэрэглэх шүүлтүүр хоёулаа: дотоод эх сурвалж нь тухайн хамтрагчийн жагсаалтаас гадуур орсон тайлсан пакетыг чимээгүй хаяна. wg-quick бичлэг бүрт маршрут нэмдэг тул доорх хамтрагчийн блокт тусдаа ip -6 route команд шаардлагагүй.

[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

Хоёр жагсаалт толин харагдах ёстой: B талбай A талбайн префиксийг алсын селектор болгон хүлээн авч буцааж чиглүүлнэ, туннел зөвхөн хоёр чиглэл тохирсон үед ажиллана. Тэгш бус жагсаалт хамгийн их цаг иддэг шинж тэмдгийг өгдөг — эрүүл гар барилт, нэг талд хөдөлж буй тоолуурууд, ба A-аас B руу амжилттай ping, харин B-ээс юу ч A-д хүрэхгүй байгаа.

Дамжуулалт, маршрутууд ба буцах префикс

Linux та хэлэхгүй бол IPv6-г дамжуулахгүй бөгөөд тохиргоо нь интерфейс биш namespace-д хамаарна:

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

Хоёр дахь мөр бол маршрутад суурилсан загварт хүмүүсийн мартдаг мөр юм. Бодлогод суурилсан IPsec префикст тохирох XFRM бодлогыг суулгадаг ч vti6 эсвэл WireGuard-тай маршрутад суурилсан тохиргоо тэр төхөөрөмж рүү чиглэсэн бодит IPv6 маршрут шаарддаг. sysctl-ийг /etc/sysctl.d/ дор хадгал; эс бөгөөс дахин ачаалах нь дамжуулалтыг чимээгүйгээр унтраалттай болгоно.

Дамжуулалт нь мэдэхэд үнэ цэнэтэй дагалдах нөлөөтэй: кернел дараа нь чиглүүлэгчийн зарлалуудыг үл тоомсорлодог, хэрэв net.ipv6.conf.<wan>.accept_ra 2 биш бол, тиймээс WAN хаяг нь SLAAC-аар ирдэг гарц дамжуулалтыг асаасан тэр мөчид өөрийн өгөгдмөл маршрутаа алдаж болно. Тэр интерфейс дээр accept_ra = 2-г ижил файлд тохируулбал маршрут амьд үлдэнэ. B талбайн цөм мөн туннелийн гарцаас 2001:db8:aa::/48-г сурах ёстой — статик маршрут эсвэл туннел дээгүүрх чиглүүлэлтийн протоколоор, эс бөгөөс хариу B-ийн өөрийн сүлжээнд үхнэ.

Эвдрэлийг олох дөрвөн шатлалт шалгалт

Энэ дарааллаар ажиллаж, бүтэлгүйтсэн эхний шатанд зогсо, учир нь дараагийн алхам бүр өмнөхөөсөө хамаарна.

  1. Селекторууд: swanctl --list-sas child SA дээр IPv6 префиксийн хосыг, эсвэл wg show wg0 allowed-ips алсын префиксийг шинэ latest-handshakes-той харуулах ёстой.
  2. Кернелийн маршрут: ip -6 route get 2001:db8:bb::10 туннелийн төхөөрөмжөөр, WAN интерфейсээр биш хариулах ёстой.
  3. Дотоод барилт: tcpdump -ni wg0 ip6 жинхэнэ LAN хостуудын хооронд ping хийх үед. Гарч байгаа ч буцаж ирэхгүй пакетууд B-ийн маршрут эсвэл галт хана руу заана; огт пакет байхгүй нь 1 эсвэл 2-р шат руу буцааж заана.
  4. Очих газар: B хост дээр ss -6 -ltn үйлчилгээ IPv6 дээр сонсож байгааг баталж, орон нутгийн галт ханын тоолуурууд пакет хүлээн авсан эсвэл хаясныг харуулна.

MTU ижил дамжуулалтад хамаарна. IPv6 чиглүүлэгчид хуваахгүй тул хэт том пакетыг хаяж, Packet Too Big илгээгч рүү буцна. Хэрэв гар барилт ба жижиг ping ажиллаж, гэхдээ файл дамжуулалт гацах юм бол ачааг бууруул, дамжин өнгөрөх хүртэл: ping -6 -s 1400 -c 3 2001:db8:bb::10. WireGuard интерфейсүүд өгөгдмөлөөр 1420 байт MTU-тай, IPv4 дээгүүрх IPsec илүү ихийг хасдаг тул дотоод MTU-г тохируулах нь ICMPv6-г хаядаг галт ханаар дамжуулан замын MTU-г илрүүлэхийг хүлээхээс дээр.

Галт ханын асуудал мэт харагдах эвдрэлийн горимууд

Хамгийн түгээмэл нь галт хана огт биш: үйлчилгээ ::-ын оронд 0.0.0.0-д холбогдож, AAAA бичлэг байгаа бөгөөд клиент IPv6-оор хурдан татгалзал авдаг бөгөөд dual-stack хөтөч IPv4 руу буцаж нуудаг. Зөвхөн зарим програмууд бүтэлгүйтвэл дүрмийн багцад хүрэхээс өмнө сонсож буй гэр бүлийг шалга.

Хоёр дахь нь ICMPv6 шүүлт юм. Neighbor Discovery ба Packet Too Big нь хэвийн ажиллагааны хэсэг, оношилгоо биш бөгөөд бүх ICMPv6-г хаядаг бодлого нь холбогдож, баталгаажуулаад дараа нь жижиг пакетаас том бүх зүйл дээр гацдаг туннелийг үүсгэдэг. Замд шаардлагатай төрлүүдийг зөвшөөрч, тоолууруудыг асаалттай үлдээ, ингэснээр хаясан нь харагдана.

Гурав дахь нь туннелд нэмэгдсэн боловч эзэмшиж буй талбайн хаягийн төлөвлөгөөнд хэзээ ч ороогүй префикс тул ямар ч чиглүүлэгч үүнийг зарлахгүй, ямар ч хост үүнээс хариулж чадахгүй. Нэг префикс ба нэг хос хостоос эхэлж, хоёр чиглэлийг дөрвөн шатлалаар батал, дараа нь үлдсэнийг нэм; эвдэрсэн префикс дахин зохион байгуулалтын оронд тохиргоонд нэг мөр хэвээр үлдэнэ. Нээлттэй байлгах нь зүйтэй цорын ганц албан ёсны лавлагаа бол RFC 8200 бөгөөд туннелийн зөөдөг толгойг тодорхойлдог.

Холбоотой нийтлэлүүд