ssh เข้าสู่เซิร์ฟเวอร์ที่เชื่อมต่อกับบริการ VPN


22

ฉันมีเซิร์ฟเวอร์ส่วนตัวเสมือนซึ่งฉันต้องการเรียกใช้เว็บเซิร์ฟเวอร์ในขณะที่เซิร์ฟเวอร์ของฉันเชื่อมต่อกับบริการ VPN

เมื่อการเชื่อมต่อ VPN กับผู้ให้บริการของฉันไม่ทำงานฉันสามารถทำทุกอย่างที่ฉันต้องการกับเซิร์ฟเวอร์นี้, ssh, scp, http เป็นต้น

เมื่อ openvpn ทำงานและเชื่อมต่อกับบริการ VPN ของผู้ให้บริการเซิร์ฟเวอร์จะไม่สามารถเข้าถึงได้ด้วยวิธีการใด ๆ และแน่นอนว่ามีเหตุผลที่ดี

ภาพเป็นดังนี้:

           My VPS                             ------------
         +----------------+                  /            \
         |                |                 /   Internet  /       101.11.12.13
         |        50.1.2.3|-----------------\   cloud    /----<--- me@myhome
         |                |                  /           \
         |     10.80.70.60|                 /             \
         +----------------+                 \              \
                        :                    \_____________/
                        :                           :
                        :                           :
                        :                           :
                        :                           :
                  +------------------+              :
                  |     10.80.70.61  |              :
                  |               \  |              :
                  |                \ |              :
                  | 175.41.42.43:1197|..............:
                  |   175.41.42.43:yy|   
                  |       .....      |
                  |   175.41.42.43:xx|
                  +------------------+



Legend                  
------ Line No VPN connection present
...... Line VPN connection established

สิ่งที่ต้องชี้แจง:

  • ที่อยู่ IP และหมายเลขพอร์ตทั้งหมดด้านบนและด้านล่างเป็นข้อมูลสมมติ
  • บรรทัดที่มีหมายเลขพอร์ต xx, yy และอะไรก็ตามที่อยู่ระหว่างนั้นคือข้อสมมติของฉันไม่ใช่สิ่งที่ฉันรู้จริง
  • ฉันตั้งค่างาน cron ที่รันทุกนาทีส่งเสียง VPS ของฉันอีกอันใช้ apache2 ในบันทึก apache2 ฉันสามารถดูที่อยู่ IP ต้นทางเปลี่ยนจาก 50.1.2.3 เป็น 175.41.42.43 เมื่อ VPN ทำงานอยู่ดังนั้น VPN จึงทำงานได้ดี

บันทึก OpenVPN แสดงสิ่งเหล่านี้:

UDPv4 link remote: [AF_INET]175.41.42.43:1197
[ProviderName] Peer Connection Initiated with [AF_INET]175.41.42.43:1197
TUN/TAP device tun0 opened
do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
sbin/ip link set dev tun0 up mtu 1500
/sbin/ip addr add dev tun0 local 10.80.70.60 peer 10.80.70.61

ณ จุดนี้ผมอยากที่จะสามารถ ssh จากmyhomeไปMy VPSในภาพในขณะที่ VPN คือค่าและการใช้ฉาบ

ในอดีตในที่ทำงานแห่งหนึ่งของฉันฉันได้รับลำดับที่แปลกมากในการรักษาความปลอดภัยเซิร์ฟเวอร์หนึ่งซึ่งมีสาม@สัญญาณในสตริง ดังนั้นมันจึงกระโดดจากกล่องหนึ่งไปยังอีกกล่องอย่างที่ฉันจินตนาการ แต่เนื่องจากกล่องกระโดดกำลังเรียกใช้ windows OS บางรุ่นและแอปที่เป็นกรรมสิทธิ์ของสิ่งเหล่านั้นฉันไม่สามารถมองเห็นสิ่งที่เกิดขึ้นได้ ดังนั้นฉันไม่ได้สนใจอะไรมาก ตอนนี้ฉันเริ่มตระหนักแล้วฉันอาจอยู่ในสถานการณ์เดียวกันหรือคล้ายกัน

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

คำตอบ:


10

คุณถูกล็อคออกจาก VPS ของคุณเพราะเมื่อบริการ VPN หมดแล้วแพ็กเก็ต ssh ของคุณจะถูกกำหนดเส้นทางผ่าน VPN ไม่ใช่ IP สาธารณะ VPS สาธารณะ 50.2.1.3 ของคุณ

ให้ถือว่าเซิร์ฟเวอร์ของคุณ:

  • IP สาธารณะคือ 50.1.2.3 (ตามการตั้งค่าตัวอย่างของคุณ)
  • Public IP Subnet คือ 50.1.2.0/24
  • เกตเวย์เริ่มต้นคือ xxx1
  • eth0 เป็นอุปกรณ์ต่อเกตเวย์

ทำสิ่งต่อไปนี้โดยใช้ iproute2:

ip rule add table 128 from 50.1.2.3
ip route add table 128 to 50.1.2.0/24 dev eth0
ip route add table 128 default via x.x.x.1

จากนั้นรันการกำหนดค่าไคลเอนต์ OpenVPN ของคุณ: openvpn --config youropenvpn-configfile.ovpn &

จากนั้นคุณจะสามารถ ssh ลงในเซิร์ฟเวอร์ของคุณในขณะที่เซิร์ฟเวอร์ของคุณเชื่อมต่อกับบริการ vpn

คุณจะต้องเพิ่มตัวกรอง iptable ที่เหมาะสมเพื่อ จำกัด การเข้าถึง IP สาธารณะของคุณจากเซสชันที่ไม่ใช่ ssh: 22


มันทำงานได้อย่างสวยงาม
Anthony Giorgio

3
มันก็ใช้ได้สำหรับฉันเช่นกัน ถึงกระนั้นฉันมีปัญหาในการทำความเข้าใจสิ่งนี้ทำสิ่ง; คุณจะอธิบายให้ฟังว่าการเชื่อมต่อนี้อนุญาตหรือไม่อนุญาต
The Coding Monk

ใช่ฉันต้องการคำอธิบายเพิ่มเติมเช่นกัน "ทำสิ่งต่อไปนี้โดยใช้ iproute2" ไม่ได้อธิบายอย่างชัดเจนว่า iproute2 คืออะไรหรือบนเครื่องที่จะใช้ดำเนินการนี้
deanresin

ฉันจะรับ Public IP Subnet ได้อย่างไร ฉันค้นหาเว็บมาระยะหนึ่งแล้วหาไม่เจอ มันคืออะไรกันแน่?
Tony Friz

2

อาจจะช้าไปหน่อย แต่ ...

ปัญหาคือเกตเวย์เริ่มต้นได้รับการเปลี่ยนแปลงโดย OpenVPN และทำให้การเชื่อมต่อ SSH ปัจจุบันของคุณหยุดชะงักเว้นแต่ว่าคุณจะตั้งค่าเส้นทางที่เหมาะสมก่อนที่จะเริ่ม OpenVPN

สิ่งต่อไปนี้ใช้ได้ผลสำหรับฉัน มันใช้ iptables และ ip (iproute2) ด้านล่างจะถือว่าอินเตอร์เฟสเกตเวย์เริ่มต้นก่อนที่จะเริ่ม OpenVPN คือ "eth0" แนวคิดคือเพื่อให้แน่ใจว่าเมื่อทำการเชื่อมต่อกับ eth0 แม้ว่า eth0 จะไม่ใช่เกตเวย์เริ่มต้นอินเตอร์เฟสอีกต่อไปแพ็กเก็ตตอบกลับสำหรับการเชื่อมต่อจะกลับไปที่ eth0 อีกครั้ง

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

# set "connection" mark of connection from eth0 when first packet of connection arrives
sudo iptables -t mangle -A PREROUTING -i eth0 -m conntrack --ctstate NEW -j CONNMARK --set-mark 1234

# set "firewall" mark for response packets in connection with our connection mark
sudo iptables -t mangle -A OUTPUT -m connmark --mark 1234 -j MARK --set-mark 4321

# our routing table with eth0 as gateway interface
sudo ip route add default dev eth0 table 3412

# route packets with our firewall mark using our routing table
sudo ip rule add fwmark 4321 table 3412

===

UPDATE:

ผลงานดังกล่าวดีสำหรับฉันใน Debian Jessie แต่ในระบบ Wheezy ที่เก่ากว่าฉันเพิ่งพบว่าฉันต้องเพิ่ม "ผ่าน" ลงในรายการตารางการเราต์:

# our routing table with eth0 as gateway interface
sudo ip route add default dev eth0 via 12.345.67.89 table 3412

ที่นั่น "12.345.67.89" จะต้องเป็นเกตเวย์ที่ไม่ใช่ VPN ดั้งเดิม


สิ่งนี้ควรใช้กับ ExpressVPN ได้หรือไม่ พวกเขามีโปรแกรมติดตั้งที่มาพร้อมกับเครื่องมือบรรทัดคำสั่ง "expressvpn" และคุณสามารถเรียกว่า "เชื่อมต่อ" หรือ "ตัดการเชื่อมต่อฉันลองสิ่งที่คุณโพสต์และใช้งานไม่ได้มันต้องเป็น OpenVPN หรือไม่
Tony Friz

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