რატომ არ იცავს სახლის NAT თქვენს VPN ინტერფეისს
სახლის როუტერი გადასცემს გვირაბს, მაგრამ ჰოსტი განსჯის გაშიფრულ პაკეტს. წაიკითხეთ მსმენელი, შიდა გზა და შესვლის პოლიტიკა ცალ-ცალკე.
სახლის როუტერის უკან მყოფი ლეპტოპები პორტების გადამისამართების გარეშე კვლავ იღებენ VPN-ით მომავალ SSH კავშირებს. ეს წინააღმდეგობა არ არის, რადგან ორი განსხვავებული მოწყობილობა ორ განსხვავებულ პაკეტს განსჯის. როუტერი გადასცემს დაშიფრულ ტრანსპორტს, ჰოსტი კი წყვეტს, რა ვუყოთ გაშიფრულ პაკეტს, რომელიც მის გვირაბის ინტერფეისამდე აღწევს. ამ ორი გადაწყვეტილების განცალკევება მთელი სავარჯიშოა.
როუტერი გადასცემს გვირაბს, ჰოსტი განსჯის პაკეტს
დახაზეთ გზა შორეული წყაროდან სერვისამდე, სანამ ერთ წესსაც კი შეხედავთ. გარე ნაწილი VPN ტრანსპორტია, რომელსაც როუტერი და კარიბჭე მართავენ. შიდა ნაწილი იწყება მაშინ, როცა საბოლოო წერტილი ხსნის გვირაბის ფენას და ჰოსტი იღებს პაკეტს, რომელიც მის VPN მისამართზეა მიმართული.
გააერთიანეთ ეს ორი ნაწილი და როუტერი ჰოსტის მიერ მიღებული გადაწყვეტილების დამსახურებას იღებს. პორტების გადამისამართების გვერდი ან როუტერის ჟურნალი მხოლოდ გარე საუბრებს აღწერს და არც ერთი არ ამბობს, რომელ გაშიფრულ ტრაფიკს მიიღებს ჰოსტი. ჰოსტი თავის შესვლის პოლიტიკას შიდა პაკეტზე ავრცელებს, ისე, როგორც ინტერფეისზე მოსულ ნებისმიერ პაკეტზე. სწორედ ამ პოლიტიკაში წყდება გამოვლენის საკითხი.
ჯოკერის მსმენელი არ არის საჯარო სერვისი
Linux-ში INADDR_ANY-ზე მიბმა ნიშნავს ყველა ლოკალურ მისამართს, ამიტომ სერვისს შეუძლია უპასუხოს გვირაბის ინტერფეისზე, რომელიც არასოდეს დაუსახელებია. IP სოკეტის ცნობარი ამ მიბმას აღწერს და ღირს მისი წაკითხვა მსმენელთა სიიდან დასკვნების გამოტანამდე. ჯოკერის ჩანაწერი სოკეტის შესახებ ფაქტია, ხელმისაწვდომობის შესახებ განცხადება არა.
ქვემოთ მოცემული ორი ხაზი ერთი და იმავე სერვისის ორი განსხვავებული მიბმაა და განსხვავება ინტერფეისის მნიშვნელობის კითხვის სრული პასუხია. პირველ რიგში წაიკითხეთ, რომელ მისამართზე ზის სოკეტი.
ss -lntp "sport = :22"
LISTEN 0 4096 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=812,fd=3))
LISTEN 0 4096 10.8.0.6:22 0.0.0.0:* users:(("sshd",pid=812,fd=4))
დაასახელეთ განლაგება, რომელსაც პორტამდე მიღწევა შეეძლო
სამი განლაგება დებს პაკეტს ამ ინტერფეისზე და მათ სხვადასხვა მესაკუთრე ჰყავთ. სწორის დასახელება წყვეტს, ვინ უნდა შეცვალოს პოლიტიკა.
| Arrangement | What reaches the port | Where the decision lives |
|---|---|---|
| Another permitted VPN peer | A packet from the same tunnel subnet | Gateway forwarding policy and host input rules |
| A deliberate public forward | Traffic the gateway publishes on purpose | Gateway service definition |
| A subnet routed behind the gateway | Client traffic from the far side | Gateway route and host input rules |
ბრაუზერის შედეგი, რომელიც საჯარო გასასვლელ მისამართს აჩვენებს, სამიდან არც ერთზე არაფერს ამბობს, რადგან აღწერს, როგორ გამოდის გამავალი ტრაფიკი და არა რა არის ნებადართული შემავალი ტრაფიკისთვის. ნაცვლად ამისა იმუშავეთ უკუღმა მსმენელიდან და სერვისის ჟურნალში მოცემული წყაროს მისამართიდან. თუ წყარო სხვა გვირაბის პარტნიორია, კარიბჭის პოლიტიკა საინტერესო დოკუმენტია. თუ ეს თარგმნილი მისამართია, იპოვეთ თარგმანი წესის შეცვლამდე.
შეზღუდეთ სერვისი იმ გზით, რომელიც განიზრახეთ
თუ SSH მხოლოდ მართვის გზიდან არის საჭირო, ჩაწერეთ ეს გზა წყაროს დიაპაზონად და ინტერფეისად. შემდეგ შეზღუდეთ ჰოსტის შესვლის წესები ინტერფეისის, დანიშნულებისა და წყაროს მიხედვით და არა ქსელის სახელის მიხედვით, რადგან კერძო შთამბეჭდაობის სახელი ნებისმიერ მისამართს შეიძლება ნიშნავდეს. დატოვეთ მარშრუტი იმ ადამიანისთვის, ვინც შემდეგ პრობლემას გადაჭრის.
nft add rule inet filter input iifname "tun0" ip saddr 10.8.0.0/24 tcp dport 22 accept
nft list chain inet filter input
წესი, რომელიც ასახელებს გვირაბის ინტერფეისს და მართვის დიაპაზონს, განზრახვას ერთ ადგილას გამოხატავს. შეადარეთ ის Wi-Fi ქსელისთვის დაწერილ წესს, რომელიც გაშიფრულ გვირაბის ტრაფიკზე არაფერს ამბობს. როცა ორი ფენა არ თანხმდება, ჰოსტის პოლიტიკაა ის, რასაც პაკეტი ხვდება.
დატოვეთ შესვლები და პაჩები ზუსტად იქ, სადაც არიან; პორტამდე მიღწევა არასოდეს ყოფილა იგივე, რაც მისი გამოყენების უფლება. ჩაწერეთ მისამართების ოჯახი და დრო ნებისმიერი უცნობი წყაროსთვის და გამოიკვლიეთ, სანამ რომელიმე ფუნქციას ან სისუსტეს დაადანაშაულებთ. წესი, რომელიც ყველა გვირაბის პარტნიორს უშვებს, სხვა დიზაინია, ვიდრე ის, რომელიც მართვის ქვექსელს უშვებს, და არც ერთი ჟურნალის ხაზი არ იტყვის, რომელი იყო განზრახული.
მიიღეთ შესწორება ერთი წარმატებით და ერთი უარით
დაამტკიცეთ ორივე ნახევარი: ერთი დამტკიცებული კავშირი წარმატებით სრულდება და ერთი გამორიცხული გზა უარყოფილია. უარი არის ის ნახევარი, რომელსაც ხალხი გამოტოვებს და სწორედ ის აჩვენებს, რომ წესი მუშაობს და არ დგას ნებადამრთველი ნაგულისხმევის გვერდით. გამოსცადეთ გამორიცხული მხრიდან და ნუ დაუწყებთ მასზე მსჯელობას.
გაიმეორეთ წყვილი ხელახალი დაკავშირების შემდეგ, რადგან სხვა ინტერფეისის სახელით დაბრუნებულმა გვირაბმა შეიძლება ჩუმად აუაროს გვერდი ძველზე შეზღუდულ წესს. მნიშვნელოვანი ზღვარი ის არის, რომელსაც ჰოსტი რეალურად მიღებულ პაკეტებზე ავრცელებს.