Шлюз можа выдаць вандроўнаму карыстальніку і адрас IPv4, і адрас IPv6, пакуль знешні тунэль па-ранейшаму ідзе праз IPv4. Гэта незалежныя рашэнні, і менавіта спроба разглядаць іх як адно і развальвае двухстэкавыя планы. Унутраныя сямействы кліента, абароненыя прэфіксы, да якіх ён можа дацягнуцца, і транспарт, які нясе інкапсуляцыю, — гэта тры асобныя выбары.

Большасць блытаніны ўзнікае таму, што слова «двухстэкавы» прымяняюць да праекта, які двухстэкавы толькі ў адным месцы. Сэрвіс можа быць двухстэкавым унутры, аднастэкавым на знешнім адрасе і пры гэтым цалкам добра працаваць для кліентаў. Чаго ён не можа — працаваць выпадкова.

Два сямействы ўнутры, адзін шлях звонку

Знешняе злучэнне — гэта IKE паверх UDP, і яму патрэбна адно дасяжнае сямейства адрасоў з таго месца, дзе знаходзіцца кліент. Унутраны адрас IPv6 не патрабуе правайдэра з падтрымкай IPv6, бо ўнутраны пакет — гэта карысная нагрузка ўнутры знешняга. Шмат працоўных разгортванняў перадаюць прэфіксы IPv6 праз канал, які падтрымлівае толькі IPv4.

Што знешні шлях сапраўды абмяжоўвае, дык гэта дасяжнасць і праходжанне NAT. Калі шлюз аб’яўляе толькі адрас IPv4, кліент у сетцы толькі з IPv6 не зможа падключыцца ўвогуле, якія б пулы вы ні наладзілі. Выбірайце знешняе сямейства па сваёй кліенцкай базе, а не па ўнутраным плане адрасоў.

Дайце кліенту адрас у кожным сямействе

Запрос абодвух сямействаў — гэта адзін радок на баку кліента, пры ўмове, што шлюзу ёсць што выдаць. Імянныя пулы трымаюць крыніцы асобна ад сэрвісных сетак, і менавіта гэтая ўласцівасць робіць правілы файрвола чытальнымі праз шэсць месяцаў.

pools {
  pool4 { addrs = 10.90.0.0/24 }
  pool6 { addrs = fd42:90::/64 }
}
connections {
  private-access {
    version = 2
    pools = pool4, pool6
    local  { auth = pubkey  certs = gateway.pem  id = vpn.example.com }
    remote { auth = pubkey  cacerts = ca.pem  vips = 0.0.0.0, :: }
    children {
      private { local_ts = 10.60.0.0/16, fd42:60::/48  remote_ts = dynamic }
    }
  }
}

Значэнне vips запытвае адрас кожнага сямейства, а спіс пулаў вызначае, адкуль бяруцца гэтыя адрасы. Дакументацыя strongSwan пра віртуальныя IP-адрасы апісвае мноства запытаў і размеркаванне па пулах, у тым ліку той момант, што кліент, які просіць пэўны адрас, выказвае толькі перавагу, якую адказны бок можа перагледзець. Не будайце правіла доступу, якое мяркуе, што кліент заўсёды атрымлівае адно і тое ж значэнне.

Генеруйце ўласны ўнікальны лакальны прэфікс замест таго, каб капіяваць прыклад. Дзве арганізацыі, якія абедзве fd42::/16 разгорнуць, выявяць канфлікт пры першым злучэнні паміж сабой, і дыягнаставаць гэта непрыемна.

Селектары апісваюць прызначэнні, а не крыніцы

Лакальныя селектары трафіку даччынай SA паказваюць, якія абароненыя сеткі стаяць за шлюзам, а аддаленыя селектары апісваюць, што кліент можа выкарыстоўваць як крыніцу. Адрас віртуальнага пула належыць да боку крыніцы гэтай палітыкі; змяшчаць яго ў спіс прызначэнняў — распаўсюджанае памылковае чытанне канфігурацыі.

Абодвум сямействам патрэбны зваротныя маршруты і дазволены форвардынг на шлюзе. Даданне прэфікса ў селектар без маршруту назад да пула стварае тунэль, які ўзнімаецца, прапускае адзін кірунак трафіку і моўчкі адкідае адказ. Селектар — гэта палітыка, а не маршрутызацыя.

Трымайце пулы і прэфіксы сэрвісаў у асобных блоках плана адрасоў. Калі яны перасякаюцца, маршрут, які павінен дасягнуць абароненага хоста, можа супасці з адрасам пула і знікнуць у тунэлі.

DNS і шлях адказу вызначаюць, ці выглядае гэта завершаным

Адказы рэзалвера не залежаць ад транспарту, якім да яго дабіраюцца. Імя можа вярнуць запіс A, запіс AAAA або абодва, і кліент выбірае паводле сваіх уласных правілаў перавагі . Калі ўнутраны сэрвіс публікуе запіс AAAA, але нішто не маршрутызуе гэты прэфікс, кліенты ў двухстэкавых сетках паспрабуюць шлях IPv6 першым і будуць чакаць, пакуль ён не праваліцца. У канфігурацыі тунэля ў гэты час нічога не выглядае няправільным.

Таму вызначце для кожнага імя, якія сямействы павінны быць прыдатныя, затым праверце, што адпаведны прэфікс ёсць у селектары і мае зваротны маршрут. Гэта рашэнне па кожным сэрвісе. Суцэльная публікацыя абодвух тыпаў запісаў — гэта тое, як працоўны сэрвіс толькі з IPv4 пачынае аддаваць таймаўт палове сваіх карыстальнікаў.

Праверце абодва сямействы, перш чым назваць гэта гатовым

Канфігурацыя, якая загружаецца, — не тое ж самае, што канфігурацыя, якая працуе. Прачытайце стан, які паведамляе дэман, пацвердзіце размеркаванне пулаў, а затым паглядзіце на маршруты, якія кліент фактычна ўсталяваў.

swanctl --list-sas
swanctl --list-pools
ip -6 addr show scope global
ip -6 route get fd42:60::10

Першыя дзве каманды паказваюць усталяваныя даччыныя SA і тое, у якіх пулах яшчэ ёсць адрасы, так што план, які працуе для першага кліента і зрываецца на дзясятым, робіцца бачным. Апошнія дзве паказваюць, ці атрымаў кліент глабальны адрас IPv6 з пула і куды насамрэч пойдзе трафік да абароненага прэфікса. Параўнайце прызначаны адрас з пулам, які вы наладзілі, а не з адрасам, на які спадзяваліся. Калі адказны бок выбраў іншае значэнне па сваёй палітыцы, маршруты і правілы файрвола ўсё роўна павінны адпавядаць яго выбару.

Затым праверце адзін абаронены хост на кожнае сямейства і імя, якое развязваецца ў абодва. Тэст аднаго сямейства нічога не кажа пра тую палову плана, якую вы не задзейнічалі, і менавіта ў ёй звычайна хаваецца адсутны маршрут.

Падобныя артыкулы