วิธีกำหนดเส้นทางที่อยู่เฉพาะผ่านอุโมงค์ได้อย่างไร


14

มีเว็บไซต์ / บริการบางอย่างที่ฉันสามารถเข้าถึงได้จากซับเน็ตที่เซิร์ฟเวอร์ของฉันตั้งอยู่เท่านั้น (ลองนึกถึงสถานการณ์ของอินทราเน็ตทั่วไป) มีวิธีในการกำหนดเส้นทางทราฟฟิกที่ไปยังที่อยู่เหล่านี้ผ่านอุโมงค์ SSH หรือไม่?

พิจารณาการตั้งค่าต่อไปนี้:

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

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

คำตอบ:


6

คุณสามารถระบุอินเตอร์เฟสเพื่อกำหนดเส้นทางทราฟฟิกในตารางเส้นทาง:

sudo route add <host.com> -interface <ppp0>

โดยที่ host.com เป็นชื่อโฮสต์หรือ ip ที่คุณต้องการเข้าถึงผ่านส่วนต่อประสานและ ppp0 เป็นตัวระบุลิงก์สำหรับ vpn ของคุณที่แสดงด้วยifconfigคำสั่ง


2
หมายเหตุ: อย่างน้อยใน Ubuntu -interfaceไม่ได้เป็นตัวเลือกrouteดังนั้นคำแนะนำข้างต้นจะทำให้เกิดข้อผิดพลาดในการใช้งาน นอกจากนี้วิธีนี้จะส่งผลในการกำหนดเส้นทางผ่านอุโมงค์ ssh ตามที่ OP ถาม?
arielf

3

OpenSSH เวอร์ชันล่าสุดรองรับอุปกรณ์เครือข่าย tun / tap สำหรับการสนับสนุน VPN ที่แท้จริง ดูhttps://help.ubuntu.com/community/SSH_VPNสำหรับเอกสารพื้นฐานบางอย่าง (เห็นได้ชัดว่ามีไว้สำหรับ Ubuntu แต่ใช้หลักการพื้นฐานอื่น ๆ )


โปรดทราบว่านี่ต้องใช้สิทธิ์รูททั้งบนแล็ปท็อปและเกตเวย์โฮสต์
Riccardo Murri

1

ข้อสงวนสิทธิ์: ฉันไม่ได้ทดสอบสิ่งที่ฉันจะอธิบายและจริง ๆ แล้วมันอาจผิดทั้งหมด แต่คำถามของคุณน่าสนใจมากจนฉันไม่สามารถต้านทานสิ่งล่อใจที่จะร่างคำตอบได้ :-) นอกจากนี้การตั้งค่าที่นี่ขึ้นอยู่กับiptablesฟังก์ชันการทำงานบางอย่างที่อาจมีอยู่บน Linux เท่านั้น

สมมติว่าคุณต้องการเชื่อมต่อจากแล็ปท็อปของคุณไปยังพอร์ตเฉพาะ P1 บนเซิร์ฟเวอร์ X1 ไปยังพอร์ต P2 บนเซิร์ฟเวอร์ X2 เป็นต้น - ฉันจะอธิบายวิธีกำหนดเส้นทางทราฟฟิก TCP ไปยังเซิร์ฟเวอร์ + พอร์ตคู่เหล่านี้ผ่านอุโมงค์ SSH หมายเหตุ:ที่อยู่ IP X1, X2 เป็นต้นเป็นที่อยู่ IP ของเซิร์ฟเวอร์ตามที่เห็นจากโฮสต์เกตเวย์ (ที่อยู่ SSH ที่คุณใช้)

  1. เลือกพอร์ตท้องถิ่นที่ไม่ได้ใช้ L1 (เช่น 10000), L2 (เช่น 10001), ฯลฯ พอร์ต L1, L2, ... ต้องแตกต่างกันทั้งหมดและหมายเลขของพวกเขาควรเท่ากับจำนวนเซิร์ฟเวอร์ที่แตกต่างกัน (Xn, Pn) + คู่พอร์ต

  2. ใช้iptablesเพื่อเปลี่ยนเส้นทางแพ็กเก็ตที่นำไปยัง Xn: Pn ไปยัง localhost: Ln

    iptables -t nat -A เอาท์พุท -p tcp -d X1 - พอร์ต P1 -j DNAT - ไปยังปลายทาง localhost: L1 iptables -t nat - เอาท์พุท -p tcp -d X2 - พอร์ต P2 -j DNAT - โลคัลโฮสต์ไปยังปลายทาง: L2

  3. ตอนนี้ SSH ไปยังเกตเวย์โดยใช้-Lตัวเลือกในการรับส่งสัญญาณข้อมูลจาก localhost: Ln ถึง (Xn, Pn):

    ssh gateway.server -L localhost: L1: X1: P1 -L localhost: L2: X2: P2 ...

ตัวอย่าง:

# access webserver.intranet (port 80) through localhost:10080
iptables -t nat -A OUTPUT -p tcp -d webserver.intranet --dport 80 -j DNAT --to-destination localhost:10080
ssh gateway.server -L locahost:10080:webserver.intranet:80

คำเตือน:

  • ใช้งานได้กับ TCP หากใช้งานได้เลย ...

  • หากคุณต้องการเข้าถึงเซิร์ฟเวอร์มากกว่าหนึ่งเครื่องการติดตั้ง VPN อาจทำได้น้อยกว่า

  • อาจยังง่ายกว่าที่จะใช้-DตัวเลือกSSH เพื่อจำลองพร็อกซี SOCKS และสร้างช่องทางในการรับส่งข้อมูลทั้งหมดของคุณ


ใช้งานได้จริง! (น่าเศร้าที่มันไม่พอดีกับสถานการณ์ที่เฉพาะเจาะจงของฉันที่ฉันต้องการเส้นทางการจราจรที่มาจากเครื่องเสมือนไม่ได้มาจาก localhost.)
pvgoran

1

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

สิ่งที่คุณต้องการคือคำจำกัดความของ VPN

VPN ไม่ควร

ส่งทราฟฟิกทั้งหมด [ของคุณ] ผ่านเซิร์ฟเวอร์หรือไม่

หากเป็นเช่นนั้นแสดงว่าไม่ได้ติดตั้งอย่างถูกต้อง

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

หากคุณมีสถานการณ์ที่ซับซ้อนเช่นเครื่อง X และ Y เท่านั้นและไม่มีอะไรอื่น พนักงานไอทีของคุณสามารถวางเครือข่ายเหล่านั้นไว้บนซับเน็ตให้คุณได้ จากนั้นในคอมพิวเตอร์ไคลเอนต์ของคุณให้กำหนดเส้นทางเฉพาะที่ซับเน็ตลง VPN


0

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

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

กล่าวอีกนัยหนึ่ง: ปริมาณการใช้งานทั้งหมดที่ไปยังซับเน็ตอื่นควรยังคงโดยตรงจากแล็ปท็อปโดยไม่ต้องผ่านเซิร์ฟเวอร์ (ใช้ช่องสัญญาณ)

VPN จะดูแลสิ่งนั้นอีกครั้ง

หากคุณกังวลเกี่ยวกับโซลูชัน "เฮฟวี่เวท" ในการรับทราฟฟิก VPN ที่ปลอดภัย (เช่นคุณไม่ต้องการลิงเพราะมันซับซ้อนเกินไป) คุณควรดูOpenVPNจริง ๆซึ่งจะอธิบายสิ่งที่คุณกำลังอธิบายอย่างแท้จริง ไม่เพียง แต่จะห่อหุ้มทราฟฟิกทั้งหมด แต่สามารถทำได้ในลักษณะที่ทราฟฟิกที่กำหนดไว้สำหรับซับเน็ตเหล่านั้นเท่านั้นที่จะทำให้การเดินทางผ่านไปป์ VPN ฉันจะเตือนคุณว่าคุณยังคงต้องแก้ไขไฟล์ข้อความในเครื่องท้องถิ่นและระยะไกล แต่มันก็ค่อนข้างง่ายที่จะเรียกใช้

สำหรับวัตถุประสงค์ของคุณเนื่องจากคุณไม่ต้องการให้ฝ่ายที่อยู่ตรงกลาง (เซิร์ฟเวอร์) เห็นการรับส่งข้อมูลของคุณคุณจะต้องตั้งค่า VPN เพื่อเชื่อมต่อโดยตรงจากเครื่องของคุณไปยังเครื่องระยะไกล แพ็คเก็ตที่กำหนดเส้นทางใด ๆ จะถูกเข้ารหัสก่อนที่จะออกแล็ปท็อปของคุณดังนั้นคุณจะได้รับความคุ้มครองแบบครบวงจร 100%


0

อย่างที่คนอื่นพูดถ้าคุณต้อง "แค็ปซูลทราฟฟิกทั้งหมดไปยังซับเน็ต" คุณอาจต้องการใช้ VPN

อย่างไรก็ตามเพื่อเข้าถึงบริการเพียงไม่กี่คุณอาจต้องการใช้คุณสมบัติการส่งต่อพอร์ตของ SSH ในพื้นที่ซึ่งเป็นเรื่องง่าย ตัวอย่างเช่นหากคุณป้อน (จากแล็ปท็อปของคุณ):

ssh -N -L 3333:localhost:2222 jump_box

แล้วเชื่อมต่อไปlocalhost:2222จะเป็นเช่นเดียวกับการเชื่อมต่อจากlocalhost:2222 jump_boxคุณสามารถใช้ตัวเลือก -L หลายครั้งและคุณสามารถเชื่อมต่อกับบริการบนโฮสต์อื่น ๆ หาก ssd_config บนjump_boxช่วยให้

คุณสามารถใช้autosshกับsystemdหรือสิ่งที่คล้ายกันเพื่อให้อุโมงค์ทำงานต่อไป

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