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

რატომ არ შეუძლია კლიენტს ამის შეთავაზება

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

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

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

Linux: მონიშნე პროცესი, შემდეგ დაამარშრუტე ნიშანი

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

iptables -t mangle -A OUTPUT -m owner --uid-owner 1001 -j MARK --set-mark 0x1
ip rule add fwmark 0x1 table 200
ip route add 192.168.1.0/24 dev eth0 src 192.168.1.0 table 200
ip route add default via 192.168.1.1 dev eth0 table 200

1001 მომხმარებლის პაკეტები შემდეგ 200 ცხრილს ეკითხება და ჩვეულებრივი კარიბჭით გადის, ხოლო მთავარი ცხრილი კვლავ გვირაბში აგზავნის ყველაფერს დანარჩენს. owner დამთხვევა მხოლოდ ლოკალურად წარმოქმნილ პაკეტებს ეხება, რაც ზუსტად ის ტრაფიკია, რაც აქ მნიშვნელოვანია, და მას არ შეუძლია სხვა ჰოსტისთვის გადაგზავნილი პაკეტების კლასიფიცირება. გადაამოწმე ხელსაწყოებით და არა განზრახვით: ss -tnp აჩვენებს დამყარებული კავშირების ლოკალურ მისამართსა და მფლობელ პროცესს, ხოლო ip route get 1.1.1.1 mark 0x1 აჩვენებს, რომელ ცხრილს ირჩევს ნიშანი.

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

ip netns add novpn
ip link add veth-host type veth peer name veth-ns
ip link set veth-ns netns novpn
ip addr add 10.200.0.1/24 dev veth-host
ip netns exec novpn ip addr add 10.200.0.2/24 dev veth-ns
ip netns exec novpn ip route add default via 10.200.0.1

Windows: დანიშნულება კვლავ წყვეტს

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

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

გადაიტანე გადაწყვეტილება, როცა ერთი პროცესი არასწორი ერთეულია

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

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

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