ให้การเข้าถึงเซิร์ฟเวอร์กับอินเทอร์เน็ตผ่านการเชื่อมต่อไคลเอ็นต์โดย SSH


17

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

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

ฉันค้นหาบนอินเทอร์เน็ตและดูเหมือนว่าฉันต้องการอุโมงค์ย้อนกลับ แต่ผมพบว่าเพียงการแก้ปัญหาที่พอร์ตถูกเปลี่ยนเส้นทาง แต่ไม่ใช่สิ่งที่ฉันต้องการเนื่องจากฉันไม่ต้องการให้Bเข้าถึงAแต่เชื่อมต่อกับอินเทอร์เน็ต


หากผู้ลงคะแนนคำถามนี้เห็นความคิดเห็นนี้คุณจะแจ้งให้เราทราบว่าเพราะอะไร ฉันไม่เห็นอะไรผิดปกติกับมันแม้ว่าคำตอบคือ "เป็นไปไม่ได้"
strugee

สำเนาซ้ำที่เป็นไปได้ของunix.stackexchange.com/questions/111972/…
Lawrence

ssh ช่วยให้คุณสามารถทำการส่งต่อพอร์ตภายในหรือระยะไกล - เช่นเมื่อแอปพลิเคชันบน B พยายามเปิดโลคอลพอร์ต X ที่ได้รับการส่งต่อไปยัง A เพื่อพยายามเปิดพอร์ตใดก็ตามที่คุณระบุ ดังนั้น A สามารถส่งต่อคำขอนั้นไปยังอินเทอร์เน็ตได้ฟรี คุณยังไม่ได้กล่าวถึงพอร์ตหรือโปรโตคอลใดที่คุณพยายามใช้ซึ่งจะทำให้การสร้างคำตอบโดยละเอียดได้ง่ายขึ้น
Stabledog

ฉันกำลังพยายามใช้นักแต่งเพลงดังนั้นควรเป็นคำขอ HTTP และ HTTPS ถึง github เพื่อดาวน์โหลดแพ็คเกจ
อัล

คำตอบ:


8

คุณสามารถเรียกใช้พรอกซีบนคอมพิวเตอร์ A ที่คอมพิวเตอร์ B จะเชื่อมต่อเพื่อเข้าถึงอินเทอร์เน็ตผ่านคอมพิวเตอร์ A

บางสิ่งเช่นนี้

             +----------+            +-----------+
             |          |+----SSH+-->|           |
             |     A    |            |    B      |
             |+--------+|            |           |
  Internet <-++-+PROXY<++<SSH Tunnel--+          |
             |+--------+|            |           |
             +----------+            +-----------+

ติดตั้งพร็อกซี่เช่นปลาหมึกบน A ซึ่งฟังพอร์ต 3128 แล้วคุณสามารถ ssh ไปยังเซิร์ฟเวอร์ด้วยสิ่งนี้ -
ssh -L 3128:127.0.0.1:3128 user@B

นั่นจะทำให้ B สามารถเข้าถึงอินเทอร์เน็ตผ่าน A


เมื่อเชื่อมต่อกับ B แล้วคำขอไปยังอินเทอร์เน็ตจะถูกเปลี่ยนเส้นทางไปยัง A อย่างไร ไม่มีการกำหนดค่าที่จะเปลี่ยน?
อัล

คุณจะต้องตั้งค่าพร็อกซีเซิร์ฟเวอร์ใน B เป็น 127.0.0.1:3128
Lawrence

10

เพียงเพิ่มขั้นตอนเพิ่มเติมและชัดเจนในคำตอบของ @Lawrence และ @ SpiRail

ทำการตั้งค่าดังนี้:

ตั้งค่าบนโฮสต์ A:

  1. ติดตั้ง Squid proxy server บน Host A โดยค่าเริ่มต้น Squid ฟังพอร์ต 3128
    yum install squid
  2. ความคิดเห็นที่http_access deny allเพิ่มแล้วhttp_access allow allใน / etc /quid/squid.conf
  3. หาก Host A ใช้พร็อกซีบางตัวระบุว่า 10.140.78.130:8080 เพื่อเชื่อมต่ออินเทอร์เน็ตให้เพิ่มพร็อกซี/etc/squid/squid.confดังกล่าวดังนี้:
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
cache_peer 10.140.78.130 parent 8080 0 no-query default
never_direct allow all

ตั้งค่าบนโฮสต์ B:

  1. เพิ่มรายการต่อไปนี้ใน / etc / environment
export http_proxy=http://127.0.0.1:3129
export https_proxy=http://127.0.0.1:3129
  1. source /etc/environment

ตอนนี้การตั้งค่าของเราเสร็จสมบูรณ์แล้ว

สร้าง SSH tunnel ด้วย Remote port forwarding

  1. เรียกใช้คำสั่ง SSH ต่อไปนี้จาก Host A
    ssh -R 3129:localhost:3128 user@HostB

    หากคุณต้องการสร้างอุโมงค์ SSH ถาวรคุณสามารถใช้ autossh ดังต่อไปนี้:
    autossh -M 20000 -f -NT -R 3129:localhost:3128 user@HostB
    สำหรับคำสั่ง autossh ด้านบนเพื่อใช้งานคุณควรมีการติดตั้ง SSH Keys จาก HostA ถึง HostB

  2. สิ่งนี้จะทำให้ Host B เข้าถึงอินเทอร์เน็ตผ่าน Host A

ตรวจสอบอินเทอร์เน็ต:

  1. เรียกใช้คำสั่งต่อไปนี้จาก Host B
    wget https://google.com

แผนภาพการไหลของการจราจร : ป้อนคำอธิบายรูปภาพที่นี่


5

คำตอบของลอเรนซ์นั้นดีพอสำหรับฉันที่จะทำให้มันหมดไป แต่นี่คือขั้นตอนที่ละเอียดยิ่งขึ้นที่ฉันใช้

ฉันใช้สิ่งนี้สำหรับการใช้แล็ปท็อปของฉัน 4gg ดองเกิลเพื่อเชื่อมต่ออินเทอร์เน็ตไปยังราสเบอร์รี่ปี่ด้วยการเชื่อมต่อโทรศัพท์พื้นฐานกับเราเตอร์ wifi

หากโฮสต์ของคุณเป็น mac: ติดตั้ง squidman http://squidman.net/squidman/

(ไม่ใช่แค่ปลาหมึกทั่วไปฉันมีปัญหากับการสร้างมันมากเกินไป) การตั้งค่าเริ่มต้นดูดีพอสำหรับฉัน

เชื่อมต่อกับ 4g เชื่อมต่อกับ wifi - กำหนดค่า ip แบบคงที่ใน wifi ของคุณและลบที่อยู่เกตเวย์ (เว้นแต่ว่าคุณกำลังทำสิ่งขั้นสูง) อื่นคุณจะได้รับสองเส้นทางเริ่มต้นและมันน่ารำคาญมาก - ตรวจสอบให้แน่ใจว่าเราเตอร์ไร้สายของคุณไม่ได้ใช้ช่วง 192.168.xy เดียวกัน (กำหนดค่า "x" ที่แตกต่างกันในกรณีนี้)

ssh -R 8080:localhost:8080 pi@<ip address of the pi or target machine>

บน PI

export http_proxy=http://localhost:8080

ด้วย visudo เพิ่มข้อความ:

Defaults env_keep = "http_proxy https_proxy ftp_proxy"

ตอนนี้ wget จะใช้ได้และ sudo apt-get เพื่อให้คุณสามารถติดตั้งแพ็คเกจได้

หากคุณต้องการคอมไพล์เช่นกันที่นี่: /programming/128035/how-do-i-pull-from-a-git-repository-through-an-http-proxy


ขอบคุณสำหรับคำตอบ. บทบาทของvisudoที่นี่คืออะไร? คุณเพิ่มข้อความที่ไหน (ฉันไม่สามารถใช้sudoบนเว็บโฮสติ้งของฉัน)
อัล

ฉันไม่เข้าใจคำถามของคุณจริงๆ แต่ถ้าคุณเพียงพิมพ์ visudo ลงในเทอร์มินัล (คุณอาจต้องใช้ 'sudo visudo') คุณสามารถเพิ่มบรรทัดข้อความด้านล่าง
SpiRail

ไม่มีการเข้าถึงรูทบนเว็บโฮสติ้งของฉัน
อัล

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