Cegah koneksi SSH hilang setelah masuk ke VPN di mesin server

14

Saya menemukan masalah yang tidak bisa saya tangani. Ketika saya masuk ke VPS melalui SSH dan mencoba untuk membuat sambungan VPN pada VPS itu, koneksi SSH antara VPS dan mesin saya hilang. Saya berasumsi itu karena perutean diubah oleh pengaturan VPN. Bagaimana cara mencegahnya?

mik22
sumber
Bagaimana dengan menghubungkan ke SSH setelah pembentukan VP? : p Anda benar bahwa ini disebabkan karena VPN menimpa jalur perutean. Yang dapat Anda lakukan adalah menjaga jalur asli Anda tidak tersentuh dan cukup tambahkan jalur VPN tambahan (Kecuali jika Anda ingin menggunakan VPS sebagai proxy. Itu cerita lain). Klien mana yang Anda gunakan?
Nikolaidis Fotis
Apa yang Anda maksud dengan "mencoba membuat koneksi VPN di VPS itu"? Anda terhubung dari mesin Anda ke server Openvpn di VPS? VPS Anda terhubung ke server Openvpn yang berjalan pada host ketiga? Dalam kasus terakhir ini, koneksi VPN seperti itu mendorong kembali beberapa rute? Selain itu, harap konfirmasikan bahwa tidak ada terjemahan NAT untuk mencapai VPS Anda (alamat IP yang dikonfigurasi pada antarmuka adalah sama dengan yang Anda tentukan dalam koneksi SSH?
Damiano Verzulli
@NikolaidisFotis Saya tidak dapat terhubung karena VPN sedang berjalan. Saya menggunakan klien openvpn. Ada --route-noexecopsi untuk mengabaikan rute yang didorong oleh server tetapi, seperti yang Anda sebutkan, itu tidak membantu ketika saya ingin menggunakan VPN sebagai proxy ...
mic22
@ DamianoVerzulli opsi kedua, ya rute didorong (tapi saya pikir itu harus dilakukan karena saya membutuhkan VPN untuk bertindak seperti proxy untuk menyelubungi alamat IP asli mesin), dan tidak ada NAT
mic22

Jawaban:

6

Anda perlu menambahkan route-nopullopsi (dan menghapus redirect-gatewayjika ada) ke file konfigurasi klien OpenVPN Anda di VPS Anda.

Dengan cara itu menghubungkan ke server VPN tidak akan mengubah rute pada VPS Anda, sehingga Anda akan dapat mengatur yang Anda butuhkan sendiri.

Anubioz
sumber
Hai, terima kasih atas saran ini, tetapi sekarang saya tidak dapat menjangkau internet melalui tun0. Saya kira saya kehilangan gateway. Ada ide bagaimana cara menambahkan gateway untuk tun0? Bagian yang relevan dari ifconfig:inet addr:10.56.10.6 P-t-P:10.56.10.5 Mask:255.255.255.255
Housemd
Anda perlu secara manual menambahkan rute ke server VPN itu sendiri melalui gateway ISP default Anda, kemudian menambahkan gateway default melalui 10.56.10.5 untuk semua lalu lintas lainnya
Anubioz
Maaf, apa? Saya tidak tahu apa yang baru saja Anda katakan. Bisakah Anda memberi contoh?
Housemd
Biarkan saya mengklarifikasi - Saya tidak ingin rute default melalui tun0, tapi saya perlu tun0 untuk memiliki akses internet.
Housemd
@Housemd hm Anda perlu memiliki akses internet melalui tun0 sendiri atau Anda perlu klien terhubung melalui tun0 dari tempat lain untuk memiliki akses internet?
Anubioz
4

Mari pertimbangkan skenario berikut:

  1. VPS Anda memiliki antarmuka ethernet tunggal, yang dikonfigurasi dengan alamat IP 4.3.2.1/24;
  2. VPS Anda dapat mengakses Internet melalui gateway default 4.3.2.254
  3. VPS Anda telah tidak belum diaktifkan koneksi OpenVPN; karenanya tidak ada antarmuka tun aktif

Dalam skenario seperti itu, dari mesin Anda (misalkan mesin Anda 9.8.7.6/24 dengan def-gw 9.8.7.254), Anda dapat berhasil membuat koneksi SSH ke 4.3.2.1. Oleh karena itu kedua host 4.3.2.1 dan 9.8.7.6 dapat berhasil mencapai satu sama lain.

Sekarang, dengan koneksi SSH dibuat, mari kita anggap:

  1. Anda meluncurkan koneksi OpenVPN dari VPS 4.3.2.1 Anda;
  2. dengan demikian, antarmuka tun0 baru akan dikonfigurasikan secara dinamis (misalkan akan diberi IP 10.10.10.2, dengan PTP 10.10.10.1).

Di panggung ini:

  • JIKA tidak ada rute yang akan didorong dari server OpenVPN jauh ke VPS lokal Anda, maka tidak ada yang akan berubah dalam hal perutean, dan koneksi SSH Anda akan bertahan tanpa masalah sama sekali. Dalam hal ini, satu-satunya lalu lintas yang melintasi VPN adalah yang diarahkan ke OpenVPN Server jarak jauh (10.10.10.1);

  • JIKA server OpenVPN jarak jauh akan mendorong kembali beberapa rute, dan terutama jika VPS default-gateway akan diganti dengan 10.10.10.1 (titik akhir OpenVPN jarak jauh), MAKA Anda mengalami masalah. Dalam hal ini Anda melakukan tunneling SEMUA lalu lintas IP keluar (dengan pengecualian OpenVPN sendiri) di dalam VPN.

Dalam kasus kedua ini (mengganti def-gw tepat setelah membuat koneksi VPN), koneksi SSH Anda sebelumnya akan "hang", karena perutean asimetris:

  • Lalu lintas dari mesin Anda (9.8.7.6) ke VPS (4.3.2.1) akan mengalir melalui jalur yang sebelumnya, tidak pernah diubah;
  • Lalu lintas dari VPS (4.3.2.1) ke mesin Anda (9.8.7.6):
    • tanpa VPN (karenanya, pada awalnya) dialihkan melalui gateway 4.3.2.254;
    • setelah pembentukan tautan VPN, dengan penggantian def-gw terkait, dialihkan melalui VPN (10.10.10.1).

Dengan kata lain: segera setelah tautan VPN dibuat, rute kembali Anda dari VPS ke mesin Anda akan berubah dan ... ini bukan hal yang baik (beberapa perangkat jaringan, di sepanjang jalur pengembalian, mungkin mengenali asimetris seperti itu) path dan cukup jatuhkan paket).

Selain itu, kemungkinan besar bahwa server OpenVPN remote Anda bertindak sebagai kotak-NAT: semua lalu lintas yang berasal dari VPN akan disatukan dengan alamat IP publik Server OpenVPN jarak jauh. Jika ini benar, maka tidak ada lagi ... "tidak baik", tapi pasti "buruk", seperti untuk koneksi SSH Anda: kembalikan lalu lintas, selain untuk kembali ke rute yang berbeda, akan kembali ke mesin Anda dengan IP sumber yang berbeda (salah satu antarmuka publik dari server VPN).

Bagaimana cara mengatasi masalah ini?

Cukup mudah, memang.

Cukup menginstruksikan server VPS Anda untuk tidak merutekan lalu lintas ke mesin Anda di sepanjang VPN, tetapi, sebaliknya, mengandalkan rute sebelumnya . Seharusnya semudah menambahkan, sebelum memulai OpenVPN:

     route add -host 9.8.7.6 gw 4.3.2.254

dimana:

  • 9.8.7.6 adalah alamat IP publik mesin Anda
  • 4.3.2.254 adalah gateway default asli VPS Anda.

PS: dengan memberikan pertanyaan yang jauh lebih detail, Anda akan mendapat jawaban yang jauh lebih cepat :-)

Damiano Verzulli
sumber
Terima kasih atas jawaban Anda @DamianoVerzulli! Gateway default tidak ditentukan. route addperintah dengan pengembalian SIOCADDRT: Invalid argument
0,0.0.0
Itulah yang saya dapatkan sesaat setelah openvpn terhubung[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: Saya bertanya-tanya bagaimana def-gw VPS Anda tidak dapat ditentukan karena dalam hal ini VPS tidak dapat menjangkau apa pun di luar subnet lokal (dan ini berarti bahwa kedua mesin Anda - dapat terhubung melalui SSH - dan server OpenVpn --mampu membangun VPN-- harus "lokal" dan, dengan demikian, tidak berguna!). BTW: ketika Anda terhubung melalui SSH Anda dapat dengan mudah mendapatkan def-gw dengan "netstat -rn" (baris dimulai dengan 0.0.0.0, kolom kedua)
Damiano Verzulli
netstat -rnhasil 0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 venet0VPS yang saya gunakan adalah opsi dasar OVH dengan Ubuntu 14,04 Server on board
mic22
ifconfigdan netstat -rnoutput: goo.gl/TEZ61q
mic22
0

Ini dapat membantu:

dimasukkan ke TCPKeepAlive=yesdalam/etc/ssh/sshd_config

Dari

man sshd_config | less +/'^ *TCPKeepAlive'

TCPKeepAlive

Menentukan apakah sistem harus mengirim pesan keepalive TCP ke sisi lain. Jika dikirim, kematian koneksi atau kerusakan salah satu mesin akan diperhatikan dengan benar. Namun, ini berarti koneksi akan mati jika rute turun sementara, dan beberapa orang merasa terganggu. Di sisi lain, jika TCP keepalives tidak dikirim, sesi dapat menggantung tanpa batas di server, meninggalkan pengguna "hantu" dan menghabiskan sumber daya server.

Standarnya adalah 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 to''.

Gilles Quenot
sumber
Saya sudah memiliki TCPKeepAliveopsi yang diatur ke yesjadi itu bukan solusi yang tepat
mic22
0

Saya memiliki masalah ini dan mencoba semua solusi yang direkomendasikan, dan masih, masalah saya tidak terpecahkan!

Setelah banyak mencoba solusi, saya menggunakan screenperintah. (Klien VPN saya adalah cisco-any-connect).

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

Setelah memberikan kredensial Anda, tekan ctrl + a + d segera dan kembali ke sesi Anda.

Nima Ghoroubi
sumber
0

Secara pribadi saya lebih suka semua koneksi ke SSH dialihkan melalui VPN. Dalam hal koneksi ssh aktif sebelum VPN dibuat, ia harus terhubung kembali karena rutenya berubah.

Saya sarankan untuk menggunakan autossh Di bawah konfigurasi klien ssh Anda, tambahkan saja.ssh/config

Host *
   ServerAliveInterval 300
   ServerAliveCountMax 2
   BatchMode yes
  • BatchMode adalah singkatan dari auto-reconnect
  • ServerAlive adalah singkatan dari Keeping Alive
Lukáš Viktora
sumber
-1

Setelah menghubungkan VPN, ssh terputus karena, ssh lalu lintas dari server melalui server VPN. Jadi untuk menghindari ini jalankan perintah berikut sebelum menghubungkan VPN.

rute tambahkan -hosting mesin-Anda-publik-ip gw Server-gatway-ip dev eth0

your-machine-public-ip: IP mesin Anda dari tempat Anda melakukan SSH. Server-gatway-ip: IP Gatway / router dari server itu

Perintah di atas akan mengarahkan lalu lintas melalui gateway yang diberikan bukan melalui Server VPN.

Mohamed Sabil
sumber
Ini membingungkan, dan bahasa itu tampaknya mundur. Tidakkah Anda ingin menambahkan rute dengan alamat IP target SSH dan gateway default workstation lokal?
rmalayter