Алаң аралық туннельге 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, ол туннель тасымалдайтын тақырыпты анықтайды.

Қатысты мақалалар