Tunnel სახლის თამაშის სერვერს მოთამაშეების მიღების საშუალებას აძლევს port forward-ის გარეშე: შენს მანქანაზე მდგარი პატარა agent საჯარო მისამართის მქონე relay-სთან გამავალ კავშირს ხსნის, ხოლო relay მოთამაშეების ტრაფიკს ამ კავშირით უკან აგზავნის. ასე აყენებენ სერვერებს ონლაინ CGNAT-ის უკნიდან ისეთი სერვისები, როგორიცაა playit.gg, საკუთარ მანქანაზე დაყენებადი ხელსაწყოები, როგორიცაა frp, და WireGuard კავშირი იაფ VPS-თან. ფასი შემოვლაა - ყოველი პაკეტი relay-ზე გადის, რაც რამდენიმე მილიწამიდან ასზე მეტამდე ამატებს, იმის მიხედვით, სად არის ის - და, თუ ყურადღებას არ მიაქცევ, სერვერი ყოველ მოთამაშეს relay-ის მისამართიდან მოსულად ხედავს, რაც IP ban-ებსა და თითო მოთამაშის ლიმიტებს აფუჭებს. გამოიყენე tunnel, როცა პორტს ვერ გადაამისამართებ და სერვერის სახლში დატოვება გინდა. ნუ გამოიყენებ მას ისეთი პრობლემის გამოსასწორებლად, რომელსაც port forward ან ჰოსტინგზე მყოფი სერვერი უფრო მარტივად გადაჭრიდა.
რას აკეთებს tunnel#
NAT-ის უკან მდგარ სახლის სერვერს გარედან დაწყებული კავშირების მიღება არ შეუძლია. თუმცა მას შეუძლია გარეთკენ კავშირების დაწყება, და ისინი ყველგან დაშვებულია. Tunnel ამას აბრუნებს.
- Agent სახლის მანქანაზე გარეთკენ უკავშირდება relay სერვერს საჯარო ინტერნეტში და კავშირს ღიად ინახავს.
- Relay მოთამაშეებისთვის საჯარო მისამართსა და პორტზე უსმენს.
- როცა მოთამაშის პაკეტი relay-ს მიაღწევს, relay მას ღია კავშირით agent-ს უგზავნის.
- Agent მას იმავე მანქანაზე მდგარ თამაშის სერვერს გადასცემს, პასუხები კი იმავე გზით ბრუნდება.
რადგან agent გარეთ რეკავს, სახლში არაფრის გახსნა არ არის საჭირო: არც როუტერზე, არც პროვაიდერის ოპერატორის NAT-ის გავლით. ეს არის მთელი მიმზიდველობა. NAT და CGNAT თამაშის ჰოსტებისთვის ხსნის, რატომ არის პირდაპირი გზა თავიდანვე დახურული.
ვარიანტები#
| ვარიანტი | პროტოკოლები | Relay-ს შენ მართავ? | ტიპური გამოყენება |
|---|---|---|---|
| playit.gg | TCP და UDP | არა | სწრაფი დაყენება Minecraft-ისა და თამაშების უმეტესობისთვის |
| frp | TCP და UDP | დიახ, VPS-ზე | სრული კონტროლი, ბევრი პორტი, მესამე მხარის გარეშე |
| WireGuard პლუს port forwarding VPS-ზე | ნებისმიერი IP | დიახ, VPS-ზე | ყველაზე გამჭვირვალე, მეტი ქსელური სამუშაო |
| ngrok | TCP, UDP-ის გარეშე | არა | მხოლოდ TCP თამაშები, როგორიცაა Minecraft Java |
| Cloudflare Tunnel | HTTP საჯარო ვიზიტორებისთვის | არა | ვებ-პანელები და რუკები, არა თამაშის ტრაფიკი |
| Tailscale ან ZeroTier | ნებისმიერი, კერძოდ | არა | კერძო ჯგუფები, სადაც ყველა კლიენტს აყენებს |
პროტოკოლის სვეტი ვარიანტებს სწრაფად გამორიცხავს. თამაშების უმეტესობა გეიმპლეისთვის UDP-ს იყენებს - Valheim, Source თამაშები, Palworld, Project Zomboid, თითქმის ყველა survival თამაში - ასე რომ ნებისმიერი tunnel, რომელიც მხოლოდ TCP-ს ატარებს, მათთვის უსარგებლოა. Minecraft Java და Terraria TCP-ია და ყველაფერთან მუშაობს. TCP თუ UDP თამაშის სერვერებისთვის ხსნის, რატომ ირჩევენ თამაშები UDP-ს და რას ნიშნავს ეს proxy-ებისთვის.
playit.gg#
playit.gg არის ჰოსტინგზე მყოფი tunnel სერვისი, თამაშის სერვერებზე ორიენტირებული. მის agent-ს უშვებ მანქანაზე, სადაც სერვერია, ბრაუზერში ანგარიშზე მიაბამ და თამაშისთვის tunnel-ს ქმნი: პროტოკოლი, ლოკალური პორტი, და სერვისი მის ქსელში საჯარო მისამართსა და პორტს გაძლევს. მოთამაშეები შენის ნაცვლად ამ მისამართს უკავშირდებიან.
ის TCP-საც და UDP-საც ამუშავებს, და სწორედ ამიტომ არის გავრცელებული პასუხი Valheim-ისთვის ან სხვა UDP თამაშებისთვის CGNAT-ის უკან. უფასო დონე მეგობრების ჯგუფისთვის საკმარისია; ფასიანი დონეები ამატებს ისეთ რამეებს, როგორიცაა მეტი tunnel, პორტებისა და რეგიონების არჩევანი. ზუსტი ლიმიტები იცვლება, ამიტომ მათზე დაგეგმვამდე მიმდინარე შეამოწმე.
სამი რამ, რაც მასზე დაყრდნობამდე უნდა იცოდე:
- მისამართი მათია. თუ სერვისს დატოვებ, მისამართი მასთან ერთად მიდის და მოთამაშეებს ახალი სჭირდებათ. საკუთარი დომენის წინ დაყენება გეხმარება, სადაც თამაში სახელს უჭერს მხარს.
- შენი ტრაფიკი მესამე მხარეზე გადის. თამაშის სერვერისთვის ეს ჩვეულებრივ ნორმალურია; მაინც იცოდე.
- Relay-ის ლოკაცია შენს დაყოვნებას ადგენს. აირჩიე რეგიონი, რომელიც შენი მოთამაშეების შუაგულთან ყველაზე ახლოსაა და არა შენთან.
frp VPS-ზე#
frp არის ღია კოდის reverse proxy ზუსტად ამ საქმისთვის. frps-ს უშვებ პატარა VPS-ზე საჯარო მისამართით, ხოლო frpc-ს სახლში, თამაშის სერვერის გვერდით. ბოლო ვერსიები TOML კონფიგურაციას იყენებენ:
bindPort = 7000auth.token = "a-long-random-shared-secret"serverAddr = "198.51.100.20"serverPort = 7000auth.token = "a-long-random-shared-secret"[[proxies]]name = "valheim-game"type = "udp"localIP = "127.0.0.1"localPort = 2456remotePort = 2456[[proxies]]name = "valheim-query"type = "udp"localIP = "127.0.0.1"localPort = 2457remotePort = 2457ამის შემდეგ მოთამაშეები 198.51.100.20:2456-ზე შედიან. frp-ის ძველი გამოშვებები INI ფორმატს იყენებდნენ სხვა გასაღებების სახელებით, ამიტომ დოკუმენტაცია იმ ვერსიას შეუსაბამე, რომელსაც ჩამოტვირთავ. VPS-ის firewall-ზე გახსენი 7000/tcp და თამაშის პორტები, სახლში კი არაფერი.
frp-ის უპირატესობა კონტროლია: შენი საკუთარი relay, შენი საკუთარი პორტები, იმდენი სერვისი, რამდენიც გინდა, გზაზე მესამე მხარის გარეშე. ფასი ისაა, რომ ახლა VPS-ს შენ მართავ და იცავ, ხოლო relay-ის ლოკაცია და ქსელის ხარისხი შენი პრობლემაა.
WireGuard და port forwarding VPS-ზე#
ყველაზე გამჭვირვალე ვერსია არის უბრალო WireGuard tunnel VPS-სა და სახლის მანქანას შორის, სადაც VPS თამაშის პორტებს IP დონეზე tunnel-ში გადაამისამართებს. არაფერმა იცის თამაშის შესახებ; პაკეტები უბრალოდ მარშრუტიზდება.
# On the VPS: wg0 is the tunnel, 10.8.0.2 is the home server's tunnel address$ sudo sysctl -w net.ipv4.ip_forward=1$ sudo iptables -t nat -A PREROUTING -i eth0 -p udp --dport 2456:2457 \ -j DNAT --to-destination 10.8.0.2$ sudo iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADEMASQUERADE ხაზი მარტივი ვერსიაა: ის მოთამაშეების წყაროს მისამართებს VPS-ის tunnel-ის მისამართზე გადაწერს, ასე რომ სახლის სერვერის პასუხები ბუნებრივად tunnel-ით ბრუნდება. ეს ასევე ნიშნავს, რომ თამაშის სერვერი ყოველ მოთამაშეს როგორც 10.8.0.1-ს ხედავს. ნამდვილი მისამართების შენარჩუნება შესაძლებელია - მოხსენი masquerade და სახლის მანქანას policy routing-ით აიძულე, ამ ტრაფიკის პასუხები tunnel-ით დააბრუნოს - მაგრამ ეს წვრილმანი საქმეა და ამ პროცესში სახლის ქსელის დანარჩენი ნაწილის გაფუჭება ადვილია. წესები და sysctl მუდმივად შეინახე, თორემ გადატვირთვისას გაქრება.
ეს მიდგომა ნებისმიერ პროტოკოლსა და ნებისმიერ თამაშს უცვლელად ატარებს. ის ასევე ყველაზე მეტ ქსელურ ცოდნას მოითხოვს. Firewall-ის წესები, რომლებსაც მნიშვნელობა აქვს განიხილავს, როგორ ჩაკეტო VPS მის ირგვლივ.
რა ჯდება tunnel#
დაყოვნება
ყოველი პაკეტი relay-ზე შემოვლით მიდის. დამატებული დაყოვნება დაახლოებით ორმხრივი დაყოვნებაა სახლის სერვერიდან relay-მდე, ხოლო მოთამაშის ორმხრივი დაყოვნება "მოთამაშიდან შენს სახლამდე"-დან "მოთამაშიდან relay-მდე პლუს relay-იდან შენს სახლამდე"-ზე იცვლება.
| სახლის სერვერი | Relay | მოთამაშეები | ეფექტი |
|---|---|---|---|
| გერმანია | გერმანია | ევროპა | რამდენიმე ms - ძლივს შესამჩნევი |
| გერმანია | ნიდერლანდები ან საფრანგეთი | ევროპა | 5-15 ms დამატებით |
| გერმანია | აშშ-ის აღმოსავლეთი | ევროპა | 80-100 ms დამატებით - მოერიდე |
| გერმანია | აშშ-ის აღმოსავლეთი | აშშ-ის აღმოსავლეთი | მოთამაშეები იგებენ, შენ აგებ |
წესი: relay სერვერთან ან მოთამაშეებთან ახლოს დადგი, იდეალურად ორივესთან. Relay არასწორ რეგიონში კარგ სერვერს ლაგიანად აქცევს. თამაშის სერვერის ping რეგიონების მიხედვით მანძილებს გთავაზობს. უფასო დონეები ზოგჯერ ნებისმიერ ხელმისაწვდომ relay-ზე გაყენებენ; შეამოწმე მოცემული მისამართი და გატესტე.
მოთამაშეების ნამდვილი მისამართები
Relay, რომელიც კავშირებს წყვეტს - tunnel სერვისების უმეტესობა, frp, masquerade სქემა - ყოველ მოთამაშეს relay-იდან მოსულად აჩვენებს. შედეგები:
- IP ban-ები ყველას ბანავს, ან არავის, რადგან ყოველ მოთამაშეს ერთი მისამართი აქვს.
- IP-ზე დაფუძნებული კავშირების ლიმიტები მაშინვე ამოქმედდება, როგორც კი რამდენიმე მოთამაშე შემოვა.
- Log-ები და anti-cheat კარგავენ ინფორმაციას, რომელსაც ეყრდნობიან.
- გეო-ფუნქციები და "იმავე IP-ის alt ანგარიშის" აღმოჩენა მუშაობას წყვეტს.
TCP თამაშებისთვის გამოსავალი PROXY პროტოკოლია: relay წინ პატარა header-ს ამატებს კლიენტის ნამდვილი მისამართით, სერვერი კი მას კითხულობს. Paper ამას უჭერს მხარს proxies.proxy-protocol: true-ით config/paper-global.yml-ში, ხოლო Velocity - haproxy-protocol = true-ით velocity.toml-ში. frp-ს და ზოგ tunnel სერვისს header-ის გაგზავნა შეუძლია. ორივე ბოლო უნდა შეთანხმდეს - სერვერი, რომელიც header-ს ელის, მის გარეშე კავშირებს უარყოფს, ხოლო პირიქით დამახინჯებულ login-ებს იძლევა. UDP თამაშების უმეტესობას ეკვივალენტი არ აქვს, ამიტომ მათთვის მოთამაშეების იდენტიფიცირება ანგარიშის ID-ით დაგეგმე და არა IP-ით.
ტრაფიკი და საიმედოობა
Relay შენს მთელ ტრაფიკს ორჯერ ატარებს - მოთამაშეებიდან შემოსულს, შენი სახლისკენ გასულს და უკან. უფასო დონე ტრაფიკის ლიმიტით ან პატარა VPS ყოველთვიური გადაცემის ლიმიტით ამისთვის უნდა იყოს შერჩეული; თამაშის სერვერის ტრაფიკი თითო მოთამაშეზე ციფრებს თამაშების მიხედვით გთავაზობს. და tunnel კიდევ ერთ კომპონენტს ამატებს, რომელიც შეიძლება ჩავარდეს: თუ agent ჩავარდება ან relay გაითიშება, სერვერი მიუწვდომელია, მიუხედავად იმისა, რომ იდეალურად მუშაობს. Agent სერვისად გაუშვი, რომელიც ჩავარდნისას გადაიტვირთება.
Agent-ის მუშა მდგომარეობაში შენარჩუნება#
Tunnel მხოლოდ იმდენად საიმედოა, რამდენადაც სახლში მდგარი agent. თუ ის გაჩერდება - crash, გადატვირთვა, ლეპტოპის დახურული სახურავი - სერვერი მუშაობას აგრძელებს და მასთან ვერავინ აღწევს, კონსოლი კი არანაირ პრობლემას არ აჩვენებს. Linux-ზე agent systemd სერვისად გაუშვი, რომ ჩართვისას გაეშვას და ჩავარდნისას გადაიტვირთოს:
[Unit]Description=frp clientAfter=network-online.targetWants=network-online.target[Service]ExecStart=/usr/local/bin/frpc -c /etc/frp/frpc.tomlRestart=alwaysRestartSec=5[Install]WantedBy=multi-user.targetჩართე sudo systemctl enable --now frpc-ით. იგივე სქემა სხვა agent-ებზეც მუშაობს; playit.gg Linux-ისა და Windows-ისთვის საკუთარი სერვისის დაყენებით მოდის. Systemd სერვისები შენი აპლიკაციებისთვის unit ფაილს უფრო დეტალურად ხსნის. შემდეგ საჯარო მხარის მონიტორინგი გააკეთე და არა სახლის მხარის: query relay-ის მისამართზე ყოველ რამდენიმე წუთში ერთი შემოწმებით იჭერს მკვდარ agent-ს, მკვდარ relay-ს და მკვდარ თამაშის სერვერს. Query პორტები და A2S გთავაზობს შემოწმებას, რომელიც cron job-ში ეტევა.
Overlay ქსელები: კერძო ალტერნატივა#
თუ ყველა, ვინც თამაშობს, მეგობარია, საჯარო tunnel შეიძლება იმაზე მეტი იყოს, ვიდრე გჭირდება. Overlay ქსელები, როგორიცაა Tailscale, ZeroTier ან ხელით აწყობილი WireGuard mesh, სერვერსა და ყოველ მოთამაშეს ერთ კერძო ქსელში აერთიანებს. მოთამაშეები ამ ქსელში სერვერის კერძო მისამართს უკავშირდებიან, ხოლო საჯარო ინტერნეტიდან საერთოდ არაფერია მისაწვდომი.
ამას რეალური უპირატესობები აქვს: უმეტეს შემთხვევაში relay-ის შემოვლა არ არის, რადგან overlay ხელსაწყოები ძალიან ცდილობენ peer-ების პირდაპირ დაკავშირებას და relay-ს მხოლოდ მაშინ იყენებენ, როცა ორივე მხარის NAT ამას უშლის; არ არის ღია პორტი სკანერებისა და flood-ებისთვის; და ყოველ მოთამაშეს ნამდვილი, განსხვავებული მისამართი აქვს. ფასი ისაა, რომ ყოველი მოთამაშე კლიენტს აყენებს და შენს ქსელს უერთდება, რაც მას ყველაფრისთვის საჯაროსთვის გამორიცხავს და მხარდაჭერის ტვირთს ამატებს ყოველთვის, როცა ვინმე ახალ კომპიუტერს იძენს. ოთხიდან ათამდე ადამიანის ჯგუფისთვის, სადაც ყველა ერთმანეთს იცნობს, ეს ხშირად ამ გვერდზე საუკეთესო პასუხია.
Proxy-ები, რომლებიც tunnel-ები არ არის#
თამაშების ჰოსტინგში proxy-ებს კიდევ ორ რამეს უწოდებენ, და მათი გამიჯვნა ღირს.
თამაშის მცოდნე proxy-ები, როგორიცაა Velocity და BungeeCord Minecraft-ისთვის, ერთი ან რამდენიმე backend სერვერის წინ დგანან და მოთამაშეებს მათ შორის გადაადგილებენ. ისინი ქსელის დიზაინს წყვეტენ და არა მისაწვდომობას - თავად proxy-ს მაინც სჭირდება საჯარო მისამართი. Minecraft-ის Velocity proxy ქსელები მათ განიხილავს.
ზოგადი stream proxy-ები, როგორიცაა nginx-ის stream მოდული, ნედლ TCP-ს ან UDP-ს ერთი მისამართიდან მეორეზე გადაამისამართებენ, რაც სასარგებლოა თამაშის სხვა საჯარო მისამართის უკან დასაყენებლად, რომელსაც უკვე აკონტროლებ:
stream { server { listen 2456 udp; proxy_pass 10.8.0.2:2456; }}ეს ფაქტობრივად tunnel-ის relay-ის ნახევარია, ხელით დაწერილი. ჩვეულებრივ HTTP reverse proxy-ს, ან Cloudflare-ის ნარინჯისფერ ღრუბელს, თამაშის ტრაფიკის ტარება საერთოდ არ შეუძლია; Cloudflare ვებსაიტებისა და თამაშის სერვერებისთვის ხსნის, რატომ.
როდის გამოიყენო და როდის არა#
გამოიყენე tunnel, როცა CGNAT-ის უკან ხარ, პროვაიდერისგან საჯარო IPv4 მისამართს ვერ იღებ, სერვერის საკუთარ აპარატურაზე დატოვება გინდა, და ჯგუფი იმდენად პატარაა, რომ relay-ის ლიმიტებს მნიშვნელობა არ აქვს. ასევე მაშინ, როცა გინდა, შენი სახლის მისამართი ყოველი მოთამაშის სერვერების სიაში არ მოხვდეს - tunnel მას მალავს, რაც ნამდვილი სარგებელია, იმის გათვალისწინებით, რამდენად ხშირად ჟონავს სახლის მისამართები.
ნუ გამოიყენებ, როცა port forward იმუშავებდა. პირდაპირი გზა ყოველთვის უფრო სწრაფი და მარტივია. ხოლო საჯარო ან მზარდი საზოგადოებისთვის tunnel შუალედური გამოსავალია: relay-ში იხდი, დაყოვნებას ამატებ, მოთამაშეების მისამართებს კარგავ და მაინც შენს სახლის კავშირსა და ელექტროენერგიაზე ხარ დამოკიდებული. ამ ეტაპზე relay VPS-ს შეეძლო უბრალოდ თავად გაეშვა სერვერი, ან ჰოსტინგზე მყოფ სერვერს. თამაშის სერვერი სახლში თუ ქირით და port forwarding თუ ჰოსტინგი ამ გადაწყვეტილებას განიხილავს.
RE:NODE-ის VDS frp-ისა ან WireGuard-ისთვის relay-ის endpoint-ად გამოდგება, რადგან root გაქვს და პორტებს თავად ირჩევ - თუმცა VDS-ს გერმანიაში, საჯარო მისამართით, ისევე კარგად შეუძლია თავად თამაშის სერვერის გაშვება, შემოვლის გარეშე.
FAQ#
უსაფრთხოა playit.gg-ის გამოყენება?
ეს ფართოდ გამოყენებული სერვისია ზუსტად ამ მიზნისთვის, და agent მხოლოდ გამავალ კავშირებს ამყარებს. შენი თამაშის ტრაფიკი მათ relay-ებზე გადის, ხოლო შენი სერვერი მისაწვდომია ყველასთვის, ვინც tunnel-ის მისამართი იცის, ამიტომ იგივე სიფრთხილე გამოიჩინე, რაც ნებისმიერ საჯარო სერვერთან: პაროლები ან whitelist-ები და არანაირი ღია ადმინის პორტი.
შემიძლია ngrok გამოვიყენო Valheim-ის ან Palworld-ის სერვერისთვის?
არა. ngrok-ის TCP tunnel-ები UDP-ს არ ატარებს, ეს თამაშები კი გეიმპლეისთვის UDP-ს იყენებენ. გამოიყენე სერვისი ან ხელსაწყო, რომელიც UDP-ს უჭერს მხარს, როგორიცაა playit.gg, frp ან WireGuard.
რამდენ დაყოვნებას ამატებს tunnel?
დაახლოებით ორმხრივ დაყოვნებას შენს სერვერსა და relay-ს შორის. როცა ორივე ერთ ქვეყანაშია, ეს რამდენიმე მილიწამია; როცა relay სხვა კონტინენტზეა, 80 ms ან მეტი. აირჩიე relay სერვერთან და მოთამაშეებთან ახლოს.
რატომ ჩანს ყველა მოთამაშე ერთი და იგივე IP მისამართით?
იმიტომ, რომ relay მათ ტრაფიკს გადაამისამართებს და სერვერი გამგზავნად relay-ს ხედავს. TCP თამაშებისთვის, რომლებიც ამას უჭერენ მხარს, ჩართე PROXY პროტოკოლი relay-ზეც და სერვერზეც, რომ ნამდვილი მისამართები გაატარო. UDP თამაშებისთვის ამის ნაცვლად ანგარიშის ID-ებს დაეყრდენი.
tunnel-ით მაინც მჭირდება port forward?
არა. Tunnel agent გარეთკენ უკავშირდება, რასაც ყოველი სახლის ქსელი უშვებს. შენს როუტერზე არაფერი იხსნება, და სწორედ ამიტომ მუშაობს tunnel-ები CGNAT-ის უკან.




კომენტარები
სრულიად ანონიმურად: ანგარიშის, ელფოსტის და cookie-ის გარეშე. ინახება მხოლოდ სახელი, ტექსტი და დრო - სხვა არაფერი. ბმულების რაოდენობა ლიმიტირებულია.