Problem z nawiązaniem połączenia między klientem a serwerem w różnych sieciach

0

Siemanko

Przeszukałem chyba cały internet polski i angielski i nie mogę znaleźć nic na ten temat. Oczywiście jest w cholerę różnych przykładów klient serwer czy to w c++ czy innych językach, ale wszystko to działa jedynie w tej samej sieci lokalnej. Zależy mi, żeby dowiedzieć się jak napisać programy, które komunikują się ze sobą, będąc w innych sieciach, czyli przez sieć WAN.
Wszystkie programy, które świetnie komunikują się na różnych komputerach w tej samej sieci lokalnej, nie działają tak jak bym chciał kiedy odpalam je w różnych sieciach (oczywiście wpisuje do nich adresy publiczne ip oraz adresy portów komputerów na których jest drugi program) ale komunikacji brak. Ten cały NAT i PAT mnie przerasta.

Słyszałem że trzeba konfigurować router pod kątem PATa, ale przecież utorrent , klient kryptowalut i wszystkie inne programy p2p nie potrzebują konfiguracji routerow, serwerów itp.
Czy ktoś jest w stanie mi pomóc?

3

Musisz mieć serwer z publicznym IP. Tym serwerem może być jeden z klientów ale inni muszą znać jego adres. Potrzebne to jest przynajmniej do rozpoczęcia komunikacji (przy udp punch hole - google) albo cały czas ("standardowa" komunikacja).
Alternatywą jest VPN - wtedy wszyscy są "w tej samej sieci"

0

Nie odpowiedziałem od razu, bo w sumie nie miałem tak naprawdę co. Musiałem zrobić research i jakoś tak sobie zapomniałem.
Wracam po pół roku i przez ten czas zdążyłem trochę podowiadywać się o komunikacji przez internet, ale widzę, że przez firewall'e nie jest to takie proste.
Udało mi się nawiązać dwustronne połączenie ze zdalnym ubuntu na wykupionym VPS'ie. Połączenie nawiązałem za pomocą klienta pythonowego na socketach (UDP).

Jak nietrudno się domyślić klient na PC nie akceptuje połączenia z VPS'a, dopóki PC sam czegoś nie wyśle do VPS'a. Więc wygląda na to, że wszystko śmiga.

Problem pojawia się gdy chciałem skomunikować ze sobą 2 komputery (A i B), które były w innych sieciach (Laptop A podłączyłem do internetu z telefonu a PC A do internetu domowego).
Postępowałem zgodnie z tym co jest na angielskiej wikipedii o "UDP hole punching",

screenshot-20200626215340.png

(Na wszystkich urządzeniach host A, host B i server VPS, były proste programy pythonowe napisane przeze mnie do komunikacji.
czyli

  1. wysyłam z A i B datagram na IP:port VPS'a. Przez ssh dowiaduje się jakie są zewnętrzne (publiczne) adresy (IP:port) hostów A i B.
  2. Następnie wysyłam z A na adres (odczytany przez z vps (na którym był odpalony receiver.py) przez ssh) B wiadomośc.
  3. Następnie wysyłam wiadomość z B do A.
  4. powtarzam kroki 2 i 3.

Komunikacji niestety nie uzyskałem między hostami A i B. Natomiast udało mi się uzyskać między vps - A oraz vps - B.

Na wikipedi jest napisane (na dole screenu, który podesłałem), że czasami pobliskie porty otwierają się, przy hole punchingu (kiedy próbuje uzyskać połączenie A-B), a nie ten, który był wykorzystywany do komunikacji z vps'em (vps - A oraz vps - B). To też testowałem łącząc się z portami od - 100 mniejszymi do 100 większymi, ale też nie udało uzyskać się połączenia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1