ორი VPN კლიენტი, ორი საჯარო მისამართი: შეასრულეთ SNAT
წყაროზე დაფუძნებულ SNAT-ს შეუძლია საჯარო მისამართის არჩევა, მაგრამ მხოლოდ მანამ, სანამ კარიბჭე ჯერ კიდევ ახერხებს კლიენტების გარჩევას. წესის დაწერამდე შეამოწმეთ დარჩენილი წყარო.
ორ VPN კლიენტს შეუძლია ორი სხვადასხვა საჯარო IPv4 მისამართით გასვლა, და ამის მომქმედი წესი უფრო მოკლეა, ვიდრე უმეტესობა ელოდება. მას ამუშავებს არა iptables-ის სინტაქსი, არამედ პაკეტის მდგომარეობა, როცა ის გასასვლელ ჯაჭვს აღწევს: იქაური წყაროს მისამართი ჯერ კიდევ უნდა ასხვავებდეს კლიენტებს. თუ ადრინდელმა masquerade-მა ორივე უკვე ერთ მისამართზე გააერთიანა, ვერც ერთი კლიენტის წესი ვერ აღადგენს განსხვავებას. ჯერ ეს საკითხი გადაწყვიტეთ, შემდეგ დაწერეთ თარგმანი.
რომელი იდენტობა აღწევს კარიბჭემდე
წესი ემთხვევა პაკეტის წყაროს მისამართს, არა VPN მომხმარებლის სახელს და არა იმ სახელს, რომელსაც კლიენტის აპლიკაცია აჩვენებს. ყველაფერი, რაც პაკეტს გზაზე ადრე თარგმნის, განსაზღვრავს, თუ რას ხედავს თქვენი წესი ჯერ კიდევ. გაუშვით nat ცხრილი თანმიმდევრობით და იპოვეთ წერტილი, სადაც წყარო ჯერ კიდევ თითოეული კლიენტისთვის ცალკეა.
iptables -t nat -S POSTROUTING
წაიკითხეთ ეს სია ზემოდან. ზედა ნაწილთან ახლოს მყოფი masquerade წესი თავიდან წერს წყაროს ყოველი შესაბამისი ნაკადისთვის, და მის შემდეგ ჩასმული კლიენტური ჩანაწერები ემთხვევა მისამართს, რომელიც აღარ არსებობს. როცა ორი LAN მოწყობილობა ერთ გვირაბს იზიარებს და ერთი შიდა მისამართით ჩამოდის, დიზაინი უნდა შეიცვალოს ქსელური ფარის შეცვლამდე: შეინარჩუნეთ მათი წყაროს დიაპაზონები ცალკე ან მიეცით თითოეულს საკუთარი შიდა მისამართი.
დაუკავშირეთ შიდა მისამართის მინიჭება ავთენტიფიცირებულ კლიენტს. ამ მისამართის სხვა მოწყობილობაზე გადაცემა გადასცემს გასასვლელ პოლიტიკასაც, და წყაროს თარგმნა თავისთავად იდენტობის დამადასტურებელი არ არის.
თარგმანს არ შეუძლია მისამართის გამოგონება
ყოველი საჯარო მისამართი უნდა მიენიჭოს ან გადამისამართდეს ამ გასასვლელ წერტილზე, და პასუხებმა უნდა იპოვონ უკან დაბრუნების გზა. წესი, რომელიც ტრაფიკს აგზავნის მისამართიდან, საითაც არავინ უკან არ მარშრუტიზებს, შორეულ ბოლოში იყრება ან პასუხდება ჰოსტს, რომელსაც არასდროს უთხოვია. ღრუბლოვანი პროვაიდერის ინსტანციას ჩვეულებრივ საჯარო მისამართი კერძო ინტერფეისის მისამართად აქვს გარდაქმნილი პაკეტის გასვლამდე, ამიტომ SNAT-ის წყარო უნდა იყოს მისამართი, რომელსაც პროვაიდერი მიიღებს, და არა მნიშვნელობა, რომელსაც კონსოლი აჩვენებს. წაიკითხეთ პროვაიდერის მისამართების მოდელი და მიჰყევით მას, ნაცვლად იმისა, რომ საჯარო მნიშვნელობა ყველა პაკეტში დააკოპიროთ.
პრაქტიკაში ეს ნიშნავს, რომ ქსელურ ფარზე შეხებამდე პროვაიდერის კონსოლში შეამოწმოთ მარშრუტიზებული პრეფიქსი, და როცა დაკავშირება ერთ-ერთზეა, კერძო ინტერფეისის მისამართი გამოიყენოთ თარგმანის წყაროდ. ქვემოთ მოცემულ მაგალითებში გამოყენებული მისამართები დოკუმენტაციის დიაპაზონებიდან არის აღებული, ამიტომ პირველი, რაც უნდა შეიცვალოს, თავად მისამართის ტექსტია.
ჩასვით ზოგადი masquerade-ის წინ
ნებისმიერი რამის დამატებამდე დაადასტურეთ გასასვლელი ინტერფეისი და მიმდინარე ჯაჭვი. პირველი განსაზღვრავს, რომელ პაკეტებს შეიძლება წესი შეესაბამოს, და მეორე აჩვენებს, რა დგას უკვე მის წინ.
ip -4 route show default
iptables -t nat -L POSTROUTING -n -v --line-numbers
პირველი ბრძანება ასახელებს ინტერფეისს, რომლითაც ინტერნეტისკენ მიმავალი პაკეტი რეალურად გადის. მეორე ბეჭდავს ჯაჭვს სტრიქონების ნომრებით. ზოგადი masquerade ჩანაწერი არის ის სტრიქონი, რომლის ზემოთაც უნდა დარჩეთ.
iptables -t nat -I POSTROUTING 1 -s 10.88.4.20/32 -o ens3 -j SNAT --to-source 198.51.100.77
iptables -t nat -I POSTROUTING 1 -s 10.88.4.21/32 -o ens3 -j SNAT --to-source 198.51.100.78
ზემოთ მოცემული ორი წესი თითო შიდა მისამართს ემთხვევა, ზღუდავს დამთხვევას გასასვლელ ინტერფეისზე და ცხადად აყენებს წყაროს. ჩასვით და არ დაამატოთ: პოზიცია 1-ზე ისინი masquerade სტრიქონამდე ფასდება. ორივეს შორის რიგითობას მნიშვნელობა არ აქვს, რადგან მათი წყაროები განსხვავდება. შეცვალეთ ens3 იმით, რაც მარშრუტის ბრძანებამ შეატყობინა, და მოარიდეთ სხვა ქსელური ფარის მმართველები იმავე კაუჭებს, რადგან ორი ხელსაწყოს მიერ ერთი ცხრილის წერა ჩვეულებრივი მიზეზია, რის გამოც სწორ წესს ეფექტი არ აქვს.
დაამტკიცეთ წყარო ახალი ნაკადით
Stateful NAT თარგმანს აკავშირებს, როცა ნაკადი იწყება, და ხელახლა იყენებს მას შემდგომი პაკეტებისთვის, ამიტომ ცვლილებამდე გახსნილი სესია ცვლილების შემდეგაც ინარჩუნებს ძველ წყაროს. მხოლოდ ახლად დაწყებული კავშირი ამტკიცებს წესს.
conntrack -L -s 10.88.4.20 -p tcp --dport 443
წაიკითხეთ ამ ჩანაწერის პასუხის მიმართულება: მისი დანიშნულებაა მისამართი, რომელსაც შორეული ბოლო წყაროდ ხედავს. შეადარეთ იგი თქვენს მიერ განზრახულ საჯარო მისამართს, და ძველი მისამართის მქონე ჩანაწერი მიიჩნიეთ ძალიან ადრე დაწყებული ნაკადის მტკიცებულებად და არა გატეხილი წესისა. სთხოვეთ კლიენტს ახალი კავშირის გახსნა, შემდეგ გაიმეორეთ მოთხოვნა. მთელი თვალთვალის ცხრილის გასუფთავება ტესტის იძულებისთვის წყვეტს კარიბჭეზე ყველა სხვა სესიას.
თარგმანი კვლავ არ ირჩევს მარშრუტს, არ უშვებს ნაკადს ფილტრში და არ აქვეყნებს შემავალ სერვისს. არასწორი მარშრუტი და დაკარგული ნებართვის წესი სრულყოფილი SNAT წესის შემდეგაც აგრძელებენ წარუმატებლობას. შეამოწმეთ ასევე IPv6 და ნებისმიერი მეორადი გასასვლელი გზა, შემდეგ ჩაწერეთ შიდა-საჯარო წყვილები ქსელური ფარის დოკუმენტაციაში, რათა შემდეგი ცვლილება დაიწყოს დაკავშირებიდან და არა წესის ტექსტიდან.