ทราฟฟิกของเซิร์ฟเวอร์ Tunneling ผ่าน SSH เมื่อพอร์ตที่ส่งต่อบนเครือข่ายใช้งานไม่ได้?


0

ติดตั้ง

ที่บ้านฉันมีราสเบอรี่น้อย 3 ที่ให้บริการที่เปิดรับอินเทอร์เน็ต ตัวอย่างเช่นกำลังเรียกใช้เซิร์ฟเวอร์ HTTP ฉันจะเรียกเซิร์ฟเวอร์raspberryนี้ ฉันสามารถจัดการraspberryจากระยะไกลผ่าน SSH: ผมได้เปิดพอร์ต22บนเราเตอร์ของฉันที่บ้านและดังนั้นการเข้าชม IP raspberryสาธารณะของฉันสำหรับพอร์ตนี้จะถูกส่งต่อไปยัง จนถึงตอนนี้ดีมาก

raspberryสถาปัตยกรรมของมันคือarm64และมันทำงานFreeBSDซึ่งทำให้เป็นไปไม่ได้ (เห็นได้ชัดว่าฉันลองแฮ็ค แต่ไม่มีลูกเต๋า) สำหรับฉันที่จะเรียกใช้เซิร์ฟเวอร์เกม (UrbanTerror 4.3)

ฉันยังมีเครื่องอื่นซึ่งเป็น ThinkPad (ต่อมาเมื่อ: thinkpad) ทำงานOpenBSDและก็มีamd64สถาปัตยกรรมซึ่งไม่ในความเป็นจริงให้ฉันไปใช้เซิร์ฟเวอร์ที่ต้องการ จากthinkpadฉันสามารถเข้าถึงได้raspberryโดยใช้ SSH

คำถาม

ตอนนี้ฉันไม่ได้อยู่บ้านแต่อยู่ในเครือข่ายที่ต่างออกไป ฉันมีความต้องการที่ไม่อาจต้านทานได้ในการโฮสต์เซิร์ฟเวอร์ของฉันในตอนนี้ แต่ฉันไม่สามารถจัดการกับมันได้raspberryดังที่ฉันพูด

จะเป็นไปได้ไหมที่จะใช้เซิร์ฟเวอร์thinkpadและเปิดช่องทางรับส่งข้อมูลทั้งหมดraspberry(เนื่องจากฉันสามารถเปิดเผยอินเทอร์เน็ตได้ในขณะที่ต่างประเทศที่นี่ฉันไม่มีสิทธิ์ของผู้ดูแลระบบสำหรับเราเตอร์)

โดยพื้นฐานแล้วสิ่งที่ฉันต้องการคือการเปิดใช้งานเซิร์ฟเวอร์thinkpadเหมือนกำลังเปิดใช้งานraspberryในแง่ของเครือข่าย นั่นคือเซิร์ฟเวอร์จะปรากฏในเซิร์ฟเวอร์เบราว์เซอร์และผู้เล่นจะสามารถที่จะเชื่อมต่อการจราจรจะมาถึงที่raspberryผ่านพอร์ตเช่น27900และมันจะถูกส่งผ่านทางอินเทอร์เน็ตผ่านทาง SSH thinkpadไป

ป.ล. ฉันรู้ว่าสิ่งนี้อาจส่งผลให้ประสิทธิภาพการทำงานลดลงเนื่องจากการส่งสัญญาณข้อมูลผ่าน SSH แต่ฉันยังคงต้องการลอง

ขอบคุณล่วงหน้าและขออภัยสำหรับการโพสต์ยาว!

แก้ไข 2018-12-14: นี่คือสิ่งที่ฉันได้ลองไปแล้ว

ดังนั้นฉันต้องการอุโมงค์ SSH แบบย้อนกลับสำหรับสิ่งนี้ ฉันสร้างอุโมงค์จากthinkpadชอบ

ssh -N -R :27960:localhost:27960 <raspberry's public IP>

สร้างอุโมงค์สำเร็จแล้ว ฉันตรวจสอบด้วยnetstatเปิดraspberryและฟังอยู่*:27960(แต่ TCP นี่เป็นปัญหาหรือไม่ UrbanTerror เช่นเกมอื่นใช้ UDP) ตอนนี้ฉันเปิดตัวเซิร์ฟเวอร์thinkpadครั้งแล้วครั้งเล่าด้วยnetstatฉันเห็นว่ามันกำลังฟัง*:27960(UDP)

ฉันลองเปิดไคลเอนต์ UrbanTerror thinkpadและเชื่อมต่อกับ<raspberry's IP>แต่มันไม่ทำงาน ในการแก้ไขปัญหาฉันพยายามทำสิ่งเดียวกันขณะที่ทำงาน

tcpdump -n -e -ttt -i ue0 | grep 27960

raspberryบน เมื่อฉันพยายามเข้าร่วมเซิร์ฟเวอร์ของฉันผ่านraspberryจาก UrbanTerror ต่อไปนี้จะปรากฏในการถ่ายโอนข้อมูล:

188.112.111.89.27961 > 192.168.0.33.27960: UDP, length 16
192.168.0.33 > 188.112.111.89: ICMP 192.168.0.33 udp port 27960 unreachable

(ฉันถอดเอาท์พุทสำหรับความกะทัดรัด)

188.112.111.89คือประชาชนในปัจจุบันทรัพย์สินทางปัญญาthinkpadและเป็นของหลักสูตร192.168.0.33 raspberryทำไมพอร์ตถึง27960ไม่สามารถเข้าถึงได้? เห็นได้ชัดว่าตามnetstat, thinkpadฟังพอร์ตที่

เพียงเพื่อทดสอบการเชื่อมต่อผมพยายามทำงานnc -l 27960บนthinkpadและnc localhost 27960บนraspberry: ผมสามารถสื่อสารได้ทั้งสองทิศทาง w / o ปัญหา

ฉันคิดว่ามันยังมีมูลค่าการกล่าวขวัญว่าฉันมีOpenBSD's pfกรองแพ็คเก็ตที่ทำงานบนเครื่องทั้งสอง แต่ฉันต้องปิดการใช้งานสำหรับการแก้ไขปัญหา


คุณลองทำอะไรไปแล้ว? "การส่งต่อพอร์ตระยะไกล" ส่งเสียงกริ่งหรือไม่ คุณได้อ่านman ssh? ในคำถามนี้การตั้งค่าคล้ายกัน (แปล: "Plex" -> "thinkpad"; "เซิร์ฟเวอร์ระยะไกล" -> "raspberry")
Kamil Maciorowski

1
ใช่คุณสามารถทำได้ คำหลักคือ "ssh" และ "tunnel" (ไม่น่าแปลกใจ) ทั้งหน้าคนและเว็บมีรายละเอียดมากมาย หากคุณไม่สามารถตั้งค่าได้ให้แก้ไขคำถามของคุณด้วยสิ่งที่คุณได้ลองและสิ่งที่ใช้ไม่ได้
dirkt

@dirkt ฉันได้ปรับปรุงคำถามของฉันตามที่คุณถาม
bertalanp99

คำตอบ:


1

มีหลายวิธีที่คุณสามารถทำได้ ที่ง่ายที่สุดคือการสร้าง ssh tunnel ไปยังเราเตอร์เว็บอินเตอร์เฟสผ่านทางraspberryชั่วคราว เปิด UDP บนเราเตอร์ไปที่thinkpad(เซิร์ฟเวอร์ UrbanTerror ใช้ UDP เท่านั้นและพอร์ตเริ่มต้นคือ 27960) หลังจากนั้นผู้เล่นจะสามารถเชื่อมต่อกับไอพีสาธารณะของคุณได้

หากคุณไม่ต้องการเปิดพอร์ตอื่นบนเราเตอร์ ผู้เล่นแต่ละคนจะต้องมีการเข้าถึง SSH ของคุณraspberryและสร้างช่องทางส่งต่อพอร์ต SSH ผ่าน TCP พอร์ต 22 และทำการถ่ายทอด UDP ไปยัง TCP บนเครื่องของพวกเขา คุณสามารถทำได้ด้วย socat:

Raspberry side: socat tcp4-listen:27900,reuseaddr,fork UDP:`thinkpad`:27960

Players side: socat -T15 udp4-recvfrom:27960,reuseaddr,fork tcp:localhost:27900

ขออภัยฉันไม่ชัดเจนหรือคุณพลาดบางสิ่งบางอย่าง ฉันไม่สามารถเปิดพอร์ตได้thinkpadเนื่องจากกล่องนั้นไม่ได้อยู่ในเครือข่ายในบ้านของฉัน ฉันไม่แน่ใจเกี่ยวกับโซลูชันที่สองที่คุณให้ฉันต้องการให้ทุกคนสามารถเชื่อมต่อได้โดยไม่ต้องใช้ SSH
bertalanp99

0

ถ้าผมเข้าใจคุณอย่างถูกต้องคุณและคนที่คุณthinkpadมีในต่างประเทศที่raspberryเป็นที่บ้านและระยะไกลคุณสามารถกำหนดค่าเราเตอร์ของคุณที่บ้านraspberryเปิดพอร์ตใหม่บน

TCP vs UDP สร้างความแตกต่างอย่างมากเนื่องจากsshสามารถสร้างช่องสัญญาณ TCP เท่านั้น ดังนั้นคุณต้องแปลงระหว่างสิ่งเหล่านี้ด้วย

เวลาแฝงในการตั้งค่าเสร็จสมบูรณ์จะเห็นได้ชัดเจนมาก

คุณจำเป็นต้อง

1) การกำหนดค่าเราเตอร์ของคุณที่บ้านเพื่อส่งต่อพอร์ต UDP 27960 raspberryไป

2) บนraspberry, แปลงด้วยsocatระหว่าง UDP และ TCP, หลังพูดบนพอร์ต 27900

3) สร้างอุโมงค์ ssh จากthinkpadไปยังraspberry; ทิศทางจะขึ้นอยู่กับsocatคำสั่ง สมมติว่าพอร์ต 27900 ทั้งสองข้าง

4) ในการthinkpadใช้socatอีกครั้งเพื่อแปลงระหว่าง TCP 27900 และ UDP 27960

IIRC คุณต้องระวังให้ดีว่าจะใช้ UDP รุ่นใดเพื่อsocatให้ทำงานได้ทั้งสองทิศทาง ฉันต้องการทดสอบสิ่งนี้ แต่ฉันไม่มีเวลาตอนนี้ดังนั้นฉันจึงไม่สามารถให้คำสั่งที่ชัดเจนแก่คุณได้ในขณะนี้ คุณต้องตั้งค่าตามลำดับที่ถูกต้องเพื่อให้บริการ "ฟัง" เริ่มต้นก่อนที่จะได้รับการเชื่อมต่อจากขั้นตอนอื่น ๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.