Featured image of post เครื่องปลายทางปิดพอร์ตขาเข้า แต่เราต้องการ connect เข้าไป จะทำอย่างไรดี?

เครื่องปลายทางปิดพอร์ตขาเข้า แต่เราต้องการ connect เข้าไป จะทำอย่างไรดี?

bore เครื่องมือเทพสำหรับทำ TCP Tunnel ช่วยให้เรา connect ติดต่อไปยังเครื่องที่พอร์ตไม่เปิดได้

ยกตัวอย่างเหตุการณ์

เคยไหมที่เราต้องการเชื่อมต่อไปยังถังฐานข้อมูลแต่เครื่องเซิฟเวอร์ของฐานข้อมูลนั้นดันปิดพอร์ตที่เราต้องกการติดต่อ จะทำอย่างไรดีหล่ะ เพื่อให้เราสามารถติดต่อเข้าไปได้ เช่น ต้องการ ติดต่อเข้าพอร์ต 3306 จากเครื่องเราไปยังเครื่องเซิฟเวอร์ แต่ติดต่อไม่ได้ ขึ้น connection timeout เพราะพอร์ตมันปิด

หรืออีกกรณี ต้องการยิง api ไปยังเซิฟเวอร์แต่เครื่องเซิฟเวอร์ไม่ได้เปิดพอร์ตให้ภายนอกเข้าถึง before วิธีการที่เราจะลองทำกันก็คือการใช้ bore เครื่องมือที่ใช้สำหรับสร้างท่อระหว่างเซิฟเวอร์ ทำให้เราสามารถติดต่อเข้าไปยังเซอร์วิสที่เราต้องการได้โดยไม่ต้องเปิดพอร์ตภายใน after

สิ่งที่ต้องรู้สำหรับการทำท่านี้

  • การสื่อสารต้องผ่าน TCP ( bore รองรับการใช้งานเฉพาะ TCP ไม่ร้องรับ UDP)
  • จะต้องมีเครื่องที่ใช้สำหรับให้เครื่องเรา connect เข้าไปได้ โดยที่เปิดพอร์ตขาเข้าบางพอร์ตเอาไว้ (เราจะใช้พอร์ตนี้ในการติดต่อเข้าถึงเครื่องเซิฟเวอร์ปลายทางที่เราต้องการ)
  • เครื่องเซิฟเวอร์ปลายทางเราจะต้องสามารถ remote เข้าไปติดตั้งตัว bore ได้ (ถ้าไม่สามารถเข้าไปติดตั้ง bore ที่ฝั่งปลายทางได้ ก็จะไม่สามารถทำท่อต่อออกมาได้)

การติดตั้ง

เราสามารถทำการ download binary ไฟล์ ที่ build เรียบร้อยแล้ว หรือจะใช้ package manager เพื่อทำการติดตั้ง package ลงไปที่เครื่อง หรือจะใช้งานผ่าน docker ก็ได้

using binary file

ทำการ download จาก github release https://github.com/ekzhang/bore/releases

using brew (mac)

1
brew install ekzhang/bore/bore

using docker

1
docker run -it --init --rm --network host ekzhang/bore <ARGS>

การใช้งาน

ที่ฝั่ง bore server (ตัวกลาง)

เราจะทำการติดตั้ง bore ลงไปยังเครื่องที่เราเตรียมไว้และทำการรัน bore ขึ้นมาโดยเป็นโหมด server และตั้งค่าให้ bore รันบนพอร์ตที่เราต้องการ เช่น ถ้าเครื่องที่เราเตรียมไว้ มีพอร์ตที่เปิดอยู่คือพอร์ต 8000 เราจะทำการรัน bore server ด้วยพอร์ต 8000

1
2
# on the server
bore server --secret my_secret_string

เราสามารถเพิ่มความปลอดภัยให้กัท่อของเราได้ด้วยการใช้งาน secret หาก secret ระหว่าง bore server และ bore client ไม่ตรงกัน จะไม่สามารถสื่อสารกันได้

ที่ฝั่ง bore client (เครื่องเป้าหมายของเรา)

สั่งรัน bore โดยทำให้รันเป็น client จากนั้นทำการตั้งค่า ระบุพอร์ตและโฮสท์ให้ชี้ไปหาที่เครืองตัวกลางของเรา

1
2
# on the client
bore local <LOCAL_PORT> --to <TO> --secret my_secret_string

เพียงเท่านี้ เราก็จะสามารถสื่อสารกับพอร์ตที่ปิดตัวอยู่ที่ฝั่งปลายทางโดยผ่านเครื่องตัวกลางได้

Bore repository : https://github.com/ekzhang

อย่าลืมให้กำลังใจสล็อตด้วยการกดไลค์ กดแชร์บทความ กดติดตามเพจ Sloth Coding ด้วยนะฮะ ขอบคุณฮะ ;)