ssh ke server yang terhubung ke layanan VPN

22

Saya memiliki server pribadi virtual, yang ingin saya jalankan server web ketika server saya terhubung ke layanan VPN

Ketika koneksi VPN ke provider saya tidak aktif, saya dapat melakukan apapun yang saya inginkan dengan server ini, ssh, scp, http dll.

Setelah openvpn berjalan dan terhubung ke layanan VPN penyedia, server tidak dapat diakses dengan cara apa pun dan tentu saja untuk alasan yang baik

Gambarannya kira-kira seperti ini:

           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

Hal-hal yang perlu diklarifikasi:

  • Semua alamat IP dan nomor port di atas dan di bawah adalah fiktif
  • Garis dengan nomor port xx, yy dan apa pun di antaranya adalah asumsi saya, bukan sesuatu yang saya tahu pasti.
  • Saya mengatur pekerjaan cron yang menjalankan setiap menit ping VPS saya yang lain, menjalankan apache2 Dalam log apache2, saya bisa melihat alamat IP asli berubah dari 50.1.2.3 ke 175.41.42.43, ketika VPN aktif, sehingga VPN bekerja dengan baik

Log OpenVPN menunjukkan ini:

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

Pada titik ini, saya ingin dapat melakukan ssh dari myhomeke My VPSdalam gambar, sedangkan VPN naik dan menggunakan Putty.

Di masa lalu, di salah satu tempat kerja saya, saya telah diberi urutan yang sangat aneh untuk ssh menjadi satu server yang sangat aman yang memiliki tiga @tanda di string. Jadi, itu melompat dari kotak ke kotak seperti yang saya bayangkan, tetapi karena kotak melompat menjalankan beberapa versi OS windows dan aplikasi berpemilik pada itu, tidak ada visibilitas bagi saya untuk melihat apa yang terjadi di bawah bungkus. Jadi saya tidak terlalu memperhatikan. Sekarang saya mulai menyadari, saya mungkin berada dalam situasi yang sama atau serupa.

Menggunakan alamat IP dan porta dalam diagram dan / atau potongan log, dapatkah seseorang memberi tahu saya bagaimana saya bisa melintasi terowongan ini dan mengakses server saya?

Scott
sumber

Jawaban:

10

Anda terkunci dari VPS karena setelah layanan VPN dinyalakan, paket ssh Anda dialihkan melalui VPN, bukan IP publik VPS Anda 50.2.1.3.

Mari kita asumsikan server Anda:

  • IP Publik adalah 50.1.2.3 (sesuai pengaturan contoh Anda)
  • Subnet IP Publik adalah 50.1.2.0/24
  • Gateway default adalah xxx1
  • eth0 adalah perangkat untuk gateway

Lakukan hal berikut menggunakan 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

Kemudian jalankan konfigurasi klien OpenVPN Anda: openvpn --config youropenvpn-configfile.ovpn &

Anda kemudian dapat ssh ke server Anda saat server Anda terhubung ke layanan vpn.

Anda perlu menambahkan filter iptable yang sesuai untuk membatasi akses ke IP publik Anda dari non-ssh: 22 sesi.

hcb
sumber
Ini bekerja dengan baik.
Anthony Giorgio
3
Itu juga bekerja untuk saya. Namun, saya masih kesulitan memahami apa yang dilakukan ini tepatnya; maukah Anda menjelaskan jenis koneksi yang diizinkan / tidak diizinkan ini?
The Coding Monk
Ya saya juga ingin penjelasan. "Lakukan hal berikut menggunakan iproute2" tidak secara eksplisit menjelaskan apa itu iproute2, atau pada mesin apa yang melakukan tindakan ini.
deanresin
Bagaimana cara saya mendapatkan Subnet IP Publik saya? Saya telah mencari web untuk sementara dan tidak dapat menemukannya. Apa itu sebenarnya?
Tony Friz
2

Ini mungkin agak terlambat, tapi ...

Masalahnya adalah bahwa gateway default akan diubah oleh OpenVPN, dan itu memutuskan koneksi SSH Anda saat ini kecuali Anda mengatur rute yang sesuai sebelum Anda memulai OpenVPN.

Berikut ini bekerja untuk saya. Ini menggunakan iptables dan ip (iproute2). Di bawah ini, diasumsikan bahwa antarmuka gateway standar sebelum OpenVPN dimulai adalah "eth0". Idenya adalah untuk memastikan bahwa ketika koneksi ke eth0 dibuat, bahkan jika eth0 bukan antarmuka gateway default lagi, paket respon untuk koneksi kembali pada eth0 lagi.

Anda bisa menggunakan nomor yang sama untuk tanda koneksi, tanda firewall dan tabel routing. Saya menggunakan angka yang berbeda untuk membuat perbedaan di antara mereka lebih jelas.

# 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

===

MEMPERBARUI:

Di atas berfungsi dengan baik untuk saya di Debian Jessie. Tetapi pada sistem Wheezy yang lebih lama saya baru saja menemukan bahwa saya perlu menambahkan "via" ke entri tabel routing:

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

Di sana "12.345.67.89" harus merupakan gateway non-VPN asli.

John Doe
sumber
Haruskah ini juga bekerja dengan ExpressVPN? Mereka memiliki penginstal yang dilengkapi dengan alat baris perintah "expressvpn" dan Anda dapat memanggil "connect" atau "disconnect. Saya sudah mencoba apa yang Anda posting dan tidak berhasil. Apakah itu harus OpenVPN?
Tony Friz
Aku tidak bisa melakukan ini ... membuatku gila. Jawaban di atas oleh @hcb berhasil. Tetapi saya benar-benar ingin tahu mengapa jawaban Anda tidak bekerja untuk saya! Sesuatu hilang, yang saya asumsikan menyebabkan aturan MANGLE tidak dieksekusi
Motsel