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

ერთი ping ყოფს პრობლემას ორად

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

ip addr show tun0

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

net30 subnet-ის წინააღმდეგ, წაკითხული კლიენტის მხრიდან

What you observenet30subnet
Client netmask/30 with a peer addressThe pool's own mask
Peers a client can address directlyOne, the serverEvery client in the pool
AddressingOne /30 block per client, with the server as the only peerOne pool mask shared by all clients
Effect of client-to-clientRequired for any peer trafficRequired for peer traffic, still no broadcast

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

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

client-to-client ცალკე კარიბჭეა

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

ეს არ ვრცელდება broadcast-ზე. პარამეტრი unicast-ს გადასცემს კლიენტებს შორის; ის გვირაბს საერთო სეგმენტად არ აქცევს, და მისი არც ერთი რაოდენობა multicast აღმოჩენის მოთხოვნას ყველა თანასწორს არ მიაწვდის.

TUN TAP-ის წინააღმდეგ, და რისი ტარება შეუძლია თითოეულს

PropertyTUNTAP
LayerLayer 3, IP packetsLayer 2, Ethernet frames
Broadcast and multicastNot carriedCarried
Bridging to the LANNot applicableRequired for a shared segment
Client platform supportEverywhereMissing on Android and iOS, limited on macOS

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

ორი ან სამი სამუშაო სადგურისთვის, რომლებსაც სახელების ამოხსნა სჭირდებათ, hosts ჩანაწერი ან unicast მისამართი გაცილებით იაფია ხიდზე. TAP-ს მიმართეთ მაშინ, როცა პროტოკოლი, რომელსაც ვერ შეცვლით, მე-2 დონის აღმოჩენაზეა დამოკიდებული, და არა ადრე.

იმავე subnet-ის კლიენტები ხიდის გარეშე

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

ip neigh add proxy 10.50.1.250 dev eth0

Proxy ARP ამ ხარვეზს ხურავს: სერვერი კლიენტის ნაცვლად პასუხობს. დიაპაზონისთვის parpd ჩანაწერებს მართავს, სანამ კლიენტები მოდიან და მიდიან, ხოლო sysctl net.ipv4.conf.eth0.proxy_arp=1 პასუხობს ყველაფერზე, რაც სხვაგან მარშრუტირდება, რაც საკმარისად ფართოა, რომ დატვირთულ სეგმენტზე საკუთარი სიურპრიზები შექმნას.

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

სანამ რამეს შეცვლით, დაიჭირეთ ერთი ცდა სერვერზე tcpdump -ni tun0-ით და დაადასტურეთ, საერთოდ მოდის თუ არა თანასწორის პაკეტი. მოსვლა და გადაგდება client-to-client-ზე მიუთითებს; არასოდეს მოსვლა ტოპოლოგიაზე ან მარშრუტიზაციაზე. OpenVPN 2.6-ის სახელმძღვანელო აღწერს ორივე საკვანძო სიტყვას და ნაგულისხმევ ტოპოლოგიას, რაც ღირს თქვენს ვერსიასთან შედარება ფორუმის პოსტიდან სტრიქონის კოპირებამდე.

  • tun ინტერფეისი აუზის ნიღაბს აჩვენებს და არა /30 თანასწორთა წყვილს.
  • პირდაპირი ping მეორე გვირაბის მისამართზე წარმატდება აღმოჩენის შემოწმებამდე.
  • სერვერის კონფიგურაცია შეიცავს client-to-client-ს, როცა თანასწორებმა პაკეტები უნდა გაცვალონ.
  • დაასახელეთ ის აღმოჩენის პროტოკოლი, რომელსაც ამოწმებთ, იმის ნაცვლად რომ თქვათ, აპლიკაცია ვარდება.
  • TAP გამოიყენეთ მხოლოდ მაშინ, როცა ჯგუფის ყველა კლიენტის პლატფორმა მხარს უჭერს მას.
  • NAT მოარიდეთ გვირაბსა და LAN-ს შორის გზას, როცა იმავე subnet-ში ხელმისაწვდომობა მნიშვნელოვანია.

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