Ngăn chặn mất kết nối SSH sau khi đăng nhập vào VPN trên máy chủ


14

Tôi gặp phải một vấn đề mà tôi không thể giải quyết. Khi tôi đăng nhập vào VPS qua SSH và cố gắng ổn định kết nối VPN trên VPS đó, kết nối SSH giữa VPS và máy của tôi bị mất. Tôi cho rằng vì định tuyến đã bị thay đổi bởi cài đặt VPN. Làm thế nào để ngăn chặn điều đó?


Còn việc kết nối với SSH sau khi thành lập VP thì sao? : p Bạn đúng rằng điều này được gây ra bởi vì VPN ghi đè lên các đường dẫn định tuyến. Những gì bạn có thể làm là giữ cho các đường dẫn ban đầu của bạn không bị ảnh hưởng và chỉ cần thêm đường dẫn VPN bổ sung (Trừ khi bạn muốn sử dụng VPS của mình làm proxy. Đó là một câu chuyện khác). Bạn sử dụng ứng dụng khách nào?
Nikolaidis Fotis

Bạn có ý nghĩa gì với "thử thiết lập kết nối VPN trên VPS đó"? Bạn đang kết nối từ máy của mình đến máy chủ Openvpn trên VPS? VPS của bạn đang kết nối với máy chủ Openvpn đang chạy trên máy chủ thứ ba? Trong trường hợp cuối cùng này, kết nối VPN như vậy đang đẩy lùi một số tuyến đường? Ngoài ra, vui lòng xác nhận rằng không có bản dịch NAT nào để truy cập VPS của bạn (địa chỉ IP được định cấu hình trên giao diện của nó giống với bạn đang chỉ định trong kết nối SSH?
Damiano Verzulli

@NikolaidisFotis Tôi không thể kết nối vì VPN đang chạy. Tôi sử dụng máy khách openvpn. Có một --route-noexectùy chọn để bỏ qua các tuyến được đẩy bởi máy chủ, nhưng như bạn đã đề cập, nó không hữu ích khi tôi muốn sử dụng VPN làm proxy ...
mic22

@DamianoVerzulli tùy chọn thứ hai, có các tuyến được đẩy (nhưng tôi nghĩ rằng nó phải được thực hiện vì tôi cần VPN đó hoạt động như proxy để chặn địa chỉ IP gốc của máy) và không có NAT
mic22

Câu trả lời:


6

Bạn cần thêm route-nopulltùy chọn (và xóa redirect-gatewaynếu nó tồn tại) vào tệp cấu hình của ứng dụng khách OpenVPN trên VPS của bạn.

Bằng cách đó, việc kết nối với máy chủ VPN sẽ không sửa đổi bất kỳ tuyến nào trên VPS của bạn, vì vậy bạn có thể tự mình thiết lập những tuyến bạn cần.


Xin chào, cảm ơn vì lời khuyên này, nhưng bây giờ tôi không thể truy cập internet thông qua tun0. Tôi cho rằng tôi đang thiếu một cổng. Bất kỳ ý tưởng làm thế nào để thêm một cổng cho tun0? Phần có liên quan của ifconfig:inet addr:10.56.10.6 P-t-P:10.56.10.5 Mask:255.255.255.255
Housemd

Bạn cần thêm thủ công một tuyến đến máy chủ VPN thông qua cổng ISP mặc định của mình, sau đó thêm cổng mặc định qua 10.56.10.5 cho tất cả lưu lượng truy cập khác
Anubioz

Tôi xin lỗi, cái gì? Tôi không có ý tuởng những gì bạn vừa nói. Bạn có thể cho một ví dụ?
Housemd

Hãy để tôi làm rõ - tôi không muốn tuyến đường mặc định đi qua tun0, nhưng tôi cần tun0 để có quyền truy cập internet.
Housemd

@Housemd hm bạn cần có quyền truy cập internet thông qua tun0 hoặc bạn cần khách hàng kết nối qua tun0 từ những nơi khác để có quyền truy cập internet?
Anubioz

4

Hãy xem xét kịch bản sau đây:

  1. VPS của bạn có giao diện ethernet duy nhất, được định cấu hình với địa chỉ IP 4.3.2.1/24;
  2. VPS của bạn có thể truy cập Internet thông qua cổng mặc định 4.3.2.254
  3. VPS của bạn đã không chưa kích hoạt bất kỳ kết nối OpenVPN; do đó không có giao diện điều chỉnh hoạt động

Trong trường hợp như vậy, từ máy của bạn (giả sử máy của bạn là 9.8.7.6/24 với def-gw 9.8.7.254), bạn có thể thiết lập thành công kết nối SSH đến 4.3.2.1. Do đó, cả hai máy chủ 4.3.2.1 và 9.8.7.6 đều có thể tiếp cận nhau.

Bây giờ, với kết nối SSH được thiết lập, hãy giả sử:

  1. bạn khởi chạy kết nối OpenVPN từ VPS 4.3.2.1;
  2. như vậy, giao diện tun0 mới sẽ được định cấu hình thực tế (giả sử nó sẽ được gán IP 10.10.10.2, với PTP 10.10.10.1).

Ở giai đoạn này:

  • Nếu không có tuyến đường nào sẽ được đẩy từ máy chủ OpenVPN từ xa sang VPS cục bộ của bạn, thì sẽ không có gì thay đổi về mặt định tuyến và kết nối SSH của bạn sẽ tồn tại mà không gặp vấn đề gì. Trong trường hợp này, lưu lượng truy cập duy nhất đi qua VPN là lưu lượng truy cập hướng tới Máy chủ OpenVPN từ xa (10.10.10.1);

  • NẾU máy chủ OpenVPN từ xa sẽ đẩy lùi một số tuyến đường và đặc biệt là nếu cổng mặc định của VPS sẽ được thay thế bằng 10.10.10.1 (điểm cuối OpenVPN từ xa), THÌ bạn đang gặp vấn đề. Trong trường hợp này, bạn đang tạo đường hầm TẤT CẢ lưu lượng IP gửi đi (ngoại trừ chính OpenVPN) trong VPN.

Trong trường hợp thứ hai này (thay thế def-gw ngay sau khi thiết lập kết nối VPN), kết nối SSH trước đó của bạn sẽ "treo", do định tuyến không đối xứng:

  • Lưu lượng truy cập từ máy của bạn (9.8.7.6) đến VPS (4.3.2.1) sẽ chảy qua đường dẫn trước đó, không bao giờ thay đổi;
  • Lưu lượng truy cập từ VPS (4.3.2.1) đến máy của bạn (9.8.7.6):
    • không có VPN (do đó, ban đầu) đã được định tuyến qua cổng 4.3.2.254;
    • sau khi thiết lập liên kết VPN, với sự thay thế def-gw có liên quan, được định tuyến thông qua VPN (10.10.10.1).

Nói cách khác: ngay khi liên kết VPN được thiết lập, tuyến trở về từ VPS đến máy của bạn sẽ thay đổi và ... đây không phải là điều tốt (một số thiết bị mạng, dọc theo đường trở về, có thể nhận ra như vậy không đối xứng đường dẫn và chỉ cần thả gói tin).

Hơn nữa, rất có thể máy chủ OpenVPN từ xa của bạn hoạt động như một hộp NAT: tất cả lưu lượng truy cập đến từ VPN sẽ được NAT với Địa chỉ IP công cộng của Máy chủ OpenVPN từ xa. Nếu điều này là đúng, thì mọi thứ không còn nữa ... "không tốt", nhưng chắc chắn là "xấu", đối với kết nối SSH của bạn: lưu lượng truy cập trở lại, ngoài việc quay lại theo một tuyến đường khác, sẽ quay trở lại máy của bạn với một IP nguồn khác nhau (một trong những giao diện chung của máy chủ VPN).

Làm thế nào để giải quyết vấn đề này?

Khá dễ dàng, thực sự.

Chỉ cần hướng dẫn máy chủ VPS của bạn không định tuyến lưu lượng truy cập đến máy của bạn dọc theo VPN, nhưng, thay vào đó, dựa vào tuyến đường trước đó . Nó phải dễ dàng như thêm, trước khi bắt đầu OpenVPN:

     route add -host 9.8.7.6 gw 4.3.2.254

Ở đâu:

  • 9.8.7.6 là địa chỉ IP công khai trên máy của bạn
  • 4.3.2.254 là cổng mặc định ban đầu của VPS của bạn.

PS: bằng cách cung cấp một câu hỏi chi tiết hơn nhiều, bạn sẽ nhận được câu trả lời nhanh hơn nhiều :-)


Cảm ơn bạn đã trả lời @DamianoVerzulli! Cổng mặc định là không xác định. route addlệnh với SIOCADDRT: Invalid argument
0,0.0.0

Đó là những gì tôi nhận được ngay sau khi openvpn kết nối[server] Peer Connection Initiated with [AF_INET]64.251.27.139:443; 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 10.200.1.251/22 broadcast 10.200.3.255; ERROR: Linux route add command failed: external program exited with error status: 2
mic22

@ mic22: Tôi tự hỏi làm thế nào def-gw VPS của bạn có thể không được chỉ định vì trong trường hợp này, VPS không thể truy cập bất cứ thứ gì bên ngoài mạng con cục bộ (và điều này có nghĩa là cả máy của bạn - có thể kết nối qua SSH-- và máy chủ OpenVpn - mặc dù có thể thiết lập VPN-- nên là "cục bộ" và, như vậy, khá vô dụng!). BTW: khi bạn được kết nối qua SSH, bạn có thể dễ dàng nhận được def-gw bằng "netstat -rn" (dòng bắt đầu bằng 0.0.0.0, cột thứ hai)
Damiano Verzulli

netstat -rnkết quả 0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 venet0VPS tôi đang sử dụng là một tùy chọn cơ bản của OVH với Máy chủ Ubuntu 14.04 trên máy bay
mic22

ifconfignetstat -rnđầu ra: goo.gl/TEZ61q
mic22

0

Điều này có thể giúp:

đặt TCPKeepAlive=yestrong của bạn/etc/ssh/sshd_config

Từ

man sshd_config | less +/'^ *TCPKeepAlive'

TCPKeepAlive

Chỉ định xem hệ thống có nên gửi tin nhắn cố định TCP sang phía bên kia không. Nếu chúng được gửi đi, cái chết của kết nối hoặc sự cố của một trong các máy sẽ được chú ý chính xác. Tuy nhiên, điều này có nghĩa là các kết nối sẽ chết nếu tuyến đường tạm thời ngừng hoạt động và một số người cảm thấy phiền phức. Mặt khác, nếu các thủ tục TCP không được gửi, các phiên có thể bị treo vô thời hạn trên máy chủ, khiến người dùng `` ghost '' và tiêu tốn tài nguyên máy chủ.

Mặc định là yes'' (to send TCP keepalive messages), and the server will notice if the network goes down or the client host crashes. This avoids infinitely hanging sessions. To disable TCP keepalive messages, the value should be set tokhông ''.


Tôi đã có TCPKeepAlivetùy chọn được đặt thành yesvì vậy đó không phải là một giải pháp phù hợp
mic22

0

Tôi đã có vấn đề này và đã thử tất cả các giải pháp được đề xuất, và vẫn vậy, vấn đề của tôi vẫn chưa được giải quyết!

Sau nhiều lần thử giải pháp, tôi đã sử dụng screenlệnh. (máy khách VPN của tôi là cisco-any-connect).

$ screen -R VPN
$ openconnect -b "your server"

Sau khi cung cấp thông tin xác thực của bạn, nhấn ctrl + a + d ngay lập tức và quay lại phiên của bạn.


0

Cá nhân tôi thích tất cả các kết nối tới SSH được định tuyến thông qua VPN. Trong trường hợp kết nối ssh hoạt động trước khi VPN được thiết lập, nó phải kết nối lại do tuyến đường thay đổi.

Tôi khuyên bạn nên sử dụng autossh Theo cấu hình máy khách ssh của bạn, chỉ cần thêm.ssh/config

Host *
   ServerAliveInterval 300
   ServerAliveCountMax 2
   BatchMode yes
  • BatchMode là viết tắt của tự động kết nối lại
  • ServerAlive là viết tắt của Keeping Alive

-1

Sau khi kết nối VPN, ssh bị ngắt kết nối vì lưu lượng ssh từ máy chủ đi qua máy chủ VPN. Vì vậy, để tránh điều này hãy chạy lệnh sau trước khi kết nối VPN.

định tuyến thêm -host your-machine-public-ip gw Server-gatway-ip dev eth0

your-machine-public-ip: IP của máy của bạn từ nơi bạn đang thực hiện SSH. Máy chủ-gatway-ip: IP của Gatway / bộ định tuyến của máy chủ đó

Lệnh trên sẽ chuyển hướng lưu lượng truy cập thông qua cổng đã cho không qua VPN Server.


Điều này là khó hiểu, và ngôn ngữ dường như có nó ngược. Bạn có muốn thêm tuyến đường với địa chỉ IP của mục tiêu SSH và cổng mặc định của máy trạm cục bộ không?
rmalayter 04/11/2015
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.