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

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

რა შეუძლია და რა არ შეუძლია DNS პასუხს

dnsmasq-ს შეუძლია პასუხებიდან მისამართების კოპირება nftables სიმრავლეში, რაც კვებაა და არა მარშრუტიზაციის გადაწყვეტილება. ეს პარამეტრი, დოკუმენტირებული dnsmasq-ის სახელმძღვანელოში, ასახელებს ოჯახს, ცხრილსა და სიმრავლეს, და მისი წინა 4# მხოლოდ A ჩანაწერებს ირჩევს, ამიტომ v6 დანიშნულებებს საკუთარი მოწყობა სჭირდება. სიმრავლე უკვე უნდა არსებობდეს, რადგან ამომხსნელი ელემენტებს ამატებს იმას, რაც ცეცხლოვანი კედლის მფლობელმა შექმნა. ამ საფეხურზე არაფერი ირჩევს ინტერფეისს, ცხრილს ან წყვილს.

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

სიმრავლე შეყვანაა, არა მარშრუტი

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

nft add set inet vpn_select office_v4 { type ipv4_addr\; }
ip rule add fwmark 0x40 table 200
ip route add default dev wg0 table 200
wg show wg0 allowed-ips

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

ნიშნები, ცხრილები და წყვილის დაფარვა

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

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

გამოსცადეთ თითოეული სიცოცხლე ცალკე

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

dig +short office.example
nft list set inet vpn_select office_v4
conntrack -L -d 10.60.8.15
ip rule show

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

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

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