Windows კონტეინერები და VPN: რატომ ზიანდება ლოკალური ქსელი
Windows კონტეინერი ჰოსტის მარშრუტიზაციის ცხრილს იყენებს, ამიტომ ლოკალურ ქვექსელს რომ ბლოკავს VPN, კონტეინერის პრეფიქსსაც თან მიაქვს. Linux რეჟიმი სხვა გზას მიდის.
ერთ ლეპტოპზე, ერთი დაკავშირებული VPN კლიენტით, Linux კონტეინერები ერთმანეთთან საუბარს აგრძელებენ, Windows კონტეინერები კი ჩერდებიან. ცვლადი გამოსახულება არ არის, არამედ გზა, რომლითაც პაკეტები ჰოსტში შედის. ნაგულისხმევ ქსელში Windows კონტეინერები ჰოსტის მარშრუტიზაციის ცხრილსა და ტრანსლაციას სესხულობენ, ამიტომ ჰოსტის მარშრუტიზაციის შემცვლელი პოლიტიკა მათაც ცვლის. დაადასტურეთ ეს მარშრუტის ძიებით, სანამ რაიმეს ხელახლა დააყენებთ.
სად შედის Windows კონტეინერის პაკეტები ჰოსტში
ნაგულისხმევ nat ქსელში მყოფი კონტეინერი მისამართს Host Networking Service-ის პრეფიქსიდან იღებს, ჩვეულებრივ სადღაც 172.16.0.0/12-ის შიგნით, და ჰოსტს ვირტუალური ადაპტერის მეშვეობით აღწევს. ჰოსტი ფლობს ამ პრეფიქსის მარშრუტს და ტრაფიკს იმ ადაპტერისკენ თარგმნის, რომელიც ამჟამად აქტიურია. ამ გზის შუაში ცალკე ვირტუალური მანქანა არ არის.
სწორედ ეს დიზაინი ხდის ხარვეზს მექანიკურად. როცა კონტეინერი პაკეტს აგზავნის, ჰოსტი კონტეინერის პრეფიქსისთვის მარშრუტის ძიებას ასრულებს. რომელი მარშრუტიც მოიგებს, იქ მიდის პაკეტი და კონტეინერს ამაზე აზრი არ აქვს.
რას ცვლის VPN კლიენტი ამ გზაზე
კორპორატიული კლიენტი ხშირად აყენებს მარშრუტების ფართო კრებულს და ფილტრს, რომელიც გვირაბის აქტიურობისას ლოკალურ ქვექსელზე წვდომას უარყოფს. განზრახვა თავდაცვითია: დაზიანებული ლოკალური ქსელი დაცულ მანქანამდე არ უნდა მივიდეს. გვერდითი ეფექტი ისაა, რომ ჰოსტის მარშრუტი კონტეინერის პრეფიქსამდე უკვე აღარ არის ლოკალური NAT ქსელი.
ამის ნაცვლად ძიება გვირაბს ემთხვევა და პაკეტი კარიბჭეს გადაეცემა, რომელსაც ამ კონტეინერის მისამართზე არასოდეს სმენია. Ping ვერ ადის, აპლიკაციის დრო იწურება და კონტეინერი გატეხილად გამოიყურება, სანამ VPN-ის ხატულა ანათებს. შეხედეთ ჰოსტის ცხრილს დაკავშირებისას და კონკურენტი მარშრუტი ჩანს.
| Container mode | Outbound path | Typical result behind the VPN |
|---|---|---|
| Windows, default nat | Host routes and translates container traffic | Container prefix follows the tunnel and fails |
| Windows, transparent | Container sits on the physical link | Depends on the local subnet being allowed |
| Linux engine on Docker Desktop | VM egress proxied by a host process | Often keeps working |
რატომ იქცევიან Linux კონტეინერები სხვანაირად
Linux ძრავი კონტეინერებს მსუბუქი ვირტუალური მანქანის შიგნით ამუშავებს და ამ მანქანიდან გამავალ კავშირებს ჰოსტის მხარეს არსებული პროქსი ხსნის კონტეინერის სახელით. სოკეტს ჰოსტი იწყებს, ამიტომ VPN-ის წესი კონტეინერის პრეფიქსზე მასზე იმავე გზით არ ვრცელდება და დატვირთვა ქსელამდე აღწევას აგრძელებს.
ეს სხვაობა ასევე ხსნის, რატომ არ გადადის Linux-ის რეცეპტები. Linux კონტეინერს, რომელსაც საკუთარი გვირაბი სჭირდება, ეძლევა TUN მოწყობილობა და NET_ADMIN შესაძლებლობა. Windows კონტეინერები არცერთ ინტერფეისს მოწყობილობად არ ამჟღავნებს, ამიტომ ამ ნიმუშს იმ მხარეს ანალოგი არ აქვს.
დაამტკიცეთ მარშრუტი, შემდეგ აირჩიეთ დიზაინი
მტკიცებულებები ჰოსტიდან შეაგროვეთ, კონტეინერიდან არა, რადგან ძიებას ჰოსტი ასრულებს:
docker network inspect nat --format "{{range .IPAM.Config}}{{.Subnet}}{{end}}"
route print -4
Get-NetRoute -AddressFamily IPv4 | Where-Object DestinationPrefix -like "172.16.*"
მარშრუტების გამომავალი ერთხელ გაუშვით VPN-ის დაკავშირებამდე და ერთხელ შემდეგ. თუ მეორე გამომავალში კონტეინერის პრეფიქსი გვირაბის ადაპტერზე მიუთითებს, დიაგნოზი დასრულებულია და კონტეინერების გადატვირთვა არ დაეხმარება.
პირველი ვარიანტი პოლიტიკის გადაწყვეტილებაა: ჰკითხეთ ქსელის მფლობელს, შეიძლება თუ არა ამ მოწყობილობისთვის ლოკალურ LAN-ზე წვდომის დაშვება. რამდენიმე კორპორატიული კლიენტი ამას პარამეტრად გვთავაზობს, მაგრამ ეს განზრახ დაწესებულ საზღვარს ასუსტებს. მოითხოვეთ ის როგორც დოკუმენტირებული გამონაკლისი მფლობელით და გადასინჯვის თარიღით. თითო მოწყობილობის გადამრთველი, რომელზეც არავინ ბრუნდება, იმის გზაა, რომ თავდაცვითი პოლიტიკა ჩუმად ქრება.
სადაც პოლიტიკა უნდა დარჩეს, გადაიტანეთ დატვირთვა მარშრუტთან ბრძოლის ნაცვლად. გამჭვირვალე ქსელი ცხადი ქვექსელით და კარიბჭით კონტეინერებს ლოკალურ რგოლზე აყენებს, Linux დატვირთვა ვირტუალური მანქანის პროქსის უკან მუშაობს და ცალკე ვირტუალური მანქანა საკუთარი კლიენტით ინარჩუნებს საკუთარ პოლიტიკას. აირჩიეთ ერთი განზრახ და გამოსცადეთ კონტეინერის შიგნიდან, რადგან მომხმარებლის მოთხოვნა სწორედ იქ იბადება.