გვირაბი ვარდება, გამორთვის ღილაკი აცხადებს, რომ ჩაერთო, და ჩამოტვირთვა გრძელდება. IPv4-ის წესებში არაფერია გატეხილი. აპლიკაცია უბრალოდ გადავიდა გზაზე, რომლისთვისაც ეს წესები არასდროს დაწერილა.

ორმაგი დასტის მოწყობილობებს გასვლის ორი დამოუკიდებელი გზა აქვთ. ერთი მათგანის ბლოკირება ნახევარი ბლოკირებაა.

ორი წესების ნაკრები, ორი ნაგულისხმევი

Linux-ზე iptables და ip6tables ცალკე ცხრილებია ცალკე პოლიტიკებით. IPv4 ცხრილის INPUT და OUTPUT ჯაჭვების DROP-ზე დაყენება არაფერს ცვლის IPv6 ცხრილში, სადაც ნაგულისხმევი ჩვეულებრივ ACCEPT-ია. იგივე გაყოფა არსებობს nftables-ში, სადაც შეგიძლიათ შეამოწმოთ ერთი ოჯახი და აღმოაჩინოთ, რომ მხოლოდ ერთი მათგანი ატარებს თქვენს წესებს. ეს ასიმეტრია ნორმალურია და მთელი პრობლემა სწორედ ისაა.

ამიტომაც გამორთვის ღილაკი შეიძლება საფუძვლიანად გამოიყურებოდეს და ნაწილობრივ იმოქმედოს. სკრიპტი, რომელმაც IPv4-ის წესები დაწერა, გაეშვა, მთვლელები იზრდება, ჟურნალის ხაზი ჩნდება, და IPv6 პაკეტი ფიზიკური ინტერფეისიდან სრულიად ხელუხლებელი გადის.

წაიკითხეთ, რას ამონტაჟებს თქვენი კლიენტი სინამდვილეში და არა რასაც მარკეტინგის გვერდი ჰპირდება. ზოგი კლიენტი IPv6-ს გვირაბში ამისამართებს, ზოგი განზრახ ბლოკავს, ზოგი კი ასე ტოვებს, სანამ პლატფორმის დონის ჩაკეტვა სხვა წესს ამოქმედებს. აქ ვენდორის დოკუმენტაცია ერთადერთი სანდო წყაროა.

რას გეუბნებათ ინტერფეისის კონფიგურაცია

wg-quick-ის სახელმძღვანელოს გვერდი თავის მაგალითურ კონფიგურაციაში IPv6 წესებს მოიცავს, და მიზეზი სწორედ ეს ნაპრალია. მაგალითი დეკორაცია არ არის. ის არსებობს იმიტომ, რომ მხოლოდ IPv4 წესები მეორე ოჯახს ღიად დატოვებდა.

მაგალითის ნახევრის კოპირება პოლიტიკის ნახევარს იძლევა. ეს ამ გაჟონვის ყველაზე გავრცელებული წყაროა. ბლოგის პოსტმა მაგალითი სიგრძის გამო შეამოკლა. შემდეგ შემოკლებული ვერსია გახდა ის შაბლონი, რომელიც ყველამ ხელახლა გამოიყენა.

# what is actually installed, per family?
sudo iptables -S OUTPUT | head -20
sudo ip6tables -S OUTPUT | head -20

# nftables: inspect each family separately
sudo nft list ruleset inet | head -40

# does this host even have a usable IPv6 path?
ip -6 route show default

თუ მეორე ბრძანება ნებადართულ პოლიტიკას ბეჭდავს, პირველი კი DROP-ს, პასუხი იპოვეთ კლიენტზე ხელის შეხების გარეშე. ეს ასიმეტრია არის ხარვეზი.

რატომ არ არის ერთი ძებნა მთელი ამბავი

ერთ სახელს შეუძლია დააბრუნოს როგორც A ჩანაწერი, ისე AAAA ჩანაწერი, და აპლიკაციები ყველა ერთნაირად არ ირჩევს. ბრაუზერმა შეიძლება IPv6-ს უპირატესობა მისცეს, როცა ქსელი სთავაზობს, და წარუმატებლობისას უკან დაიხიოს, მაშინ როცა ფონური სინქრონიზაცია ან განახლების პროგრამა საკუთარ რეზოლვერსა და საკუთარ უპირატესობას იყენებს. ამიტომ IPv4-ზე ერთი წარმატებული ტესტი ერთ გზას ამტკიცებს და არა პოლიტიკას.

ქსელის გადასვლები პასუხსაც ცვლის. სხვა Wi-Fi ქსელზე მიერთებამ, ძილიდან გამოღვიძებამ ან მობილურზე გადასვლამ შეიძლება მოწყობილობას ახალი IPv6 პრეფიქსი მისცეს, და პოლიტიკა, რომელიც ოფისის LAN-ზე საკმარისად გამოიყურებოდა, შეიძლება არ ფარავდეს მას.

შეამოწმეთ მდგომარეობა, როცა გვირაბი გამორთულია

დაკავშირებულ მდგომარეობაში ტესტირება გეუბნებათ, რომ გვირაბი მუშაობს. საინტერესო ტესტი მიუწვდომელი მდგომარეობაა, რადგან სწორედ მაშინ უნდა გაუძლოს გამორთვის ღილაკმა. განზრახ გააჩერეთ გვირაბი, შემდეგ სცადეთ მნიშვნელოვანი დანიშნულებები თქვენს მიერ დაცული აპლიკაციიდან.

# with the tunnel stopped, does anything still leave?
ip -6 route get 2606:4700:4700::1111
curl -6 -sS -o /dev/null -w '%{http_code}\n' --max-time 5 https://ipv6.example.net/
curl -4 -sS -o /dev/null -w '%{http_code}\n' --max-time 5 https://ipv4.example.net/

ორივე ოჯახი დახურულად უნდა ჩავარდეს. თუ IPv4 მოთხოვნა დროის ამოწურვით სრულდება და IPv6 მოთხოვნა სტატუსის კოდს აბრუნებს, პოლიტიკა არასრულია, და გვირაბის რამდენჯერ ხელახალი ტესტირებაც არ შეცვლის ამას.

შეინარჩუნეთ დოკუმენტირებული გამონაკლისებიც იმ ტესტში. ლოკალური ქსელის აღმოჩენა, DHCP-ის განახლება ან VPN-ის ბოლო წერტილამდე ჩატვირთვის გზა შეიძლება საჭიროებდეს ხელმისაწვდომად დარჩენას, და ეს გამონაკლისები პოლიტიკაში სახელდებული უნდა იყოს, და არა გათიშვის დროს აღმოჩენილი. გაჟონვის ტესტი, რომელიც იმიტომ ჩავარდება, რომ გვირაბი ვერ ბრუნდება, უსაფრთხოების აღმოჩენა არ არის, ეს კავშირის აღმოჩენაა.

დაკავშირებული სტატიები