Saya memiliki VPS yang menjalankan CentOS 7 yang saya sambungkan dengan SSH. Saya ingin menjalankan klien OpenVPN pada VPS sehingga lalu lintas internet dialihkan melalui VPN, tetapi masih memungkinkan saya untuk terhubung ke server melalui SSH. Ketika saya memulai OpenVPN, sesi SSH saya terputus dan saya tidak bisa lagi terhubung ke VPS saya. Bagaimana saya bisa mengkonfigurasi VPS agar koneksi SSH (port 22) yang masuk terbuka pada IP aktual VPS (104.167.102.77), tetapi masih merutekan lalu lintas keluar (seperti dari browser web pada VPS) melalui VPN?
Layanan OpenVPN yang saya gunakan adalah PrivateInternetAccess, dan contoh file config.ovpn adalah:
klien dev tun proto udp remote nl.privateinternetaccess.com 1194 resolv-coba lagi tak terbatas bangsawan tetap ada tetap bertahan ca ca.crt tls-klien server remote-cert-tls auth-user-pass comp-lzo kata kerja 1 reneg-detik 0 crl-verifikasi crl.pem
Ip addr VPS:
1: lo: mtu 65536 status noqueue qdisc TIDAK DIKETAHUI link / loopback 00: 00: 00: 00: 00 brd 00: 00: 00: 00: 00: 00 inet 127.0.0.1/8 host lingkup lo valid_lft selamanya prefer_lft selamanya inet6 :: 1/128 ruang lingkup host valid_lft selamanya prefer_lft selamanya 2: ens33: mtu 1500 qdisc pfifo_fast state UP qlen 1000 tautan / eter 00: 50: 56: be: 16: f7 brd ff: ff: ff: ff: ff: ff: ff inet 104.167.102.77/24 brd 104.167.102.255 ruang lingkup ens33 global valid_lft selamanya prefer_lft selamanya inet6 fe80 :: 250: 56ff: febe: 16f7 / 64 link lingkup valid_lft selamanya prefer_lft selamanya 4: tun0: mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100 tautan / tidak ada inet 10.172.1.6 peer 10.172.1.5/32 lingkup global tun0 valid_lft selamanya prefer_lft selamanya
Rute ip VPS:
0.0.0.0/1 via 10.172.1.5 dev tun0 default via 104.167.102.1 dev ens33 proto static metric 1024 10.172.1.1 melalui 10.172.1.5 dev tun0 10.172.1.5 dev tun0 proto kernel lingkup tautan src 10.172.1.6 104.167.102.0/24 dev ens33 proto kernel scope link src 104.167.102.77 109.201.154.177 via 104.167.102.1 dev ens33 128.0.0.0/1 via 10.172.1.5 dev tun0
route
atau denganip route show
) dan menghapusnya?Ini mungkin agak terlambat, tapi ...
Masalahnya adalah gateway default 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 berbeda untuk membuat perbedaan di antara mereka lebih jelas.
===
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:
Di sana "12.345.67.89" harus merupakan gateway non-VPN asli.
sumber
ip route add default
)? Saya mendapatkan "jawaban RTNETLINK: File ada". Saya menjalankan Ubuntu Xenial. "via" tidak membantu. Saya baru saja mencobanya di Arch Linux, pertamaip route add default
tampaknya berhasil, tetapiip route
hasilnya tidak berubah. Setiap proses selanjutnya menghasilkan pesan "file ada".ip route show table all | grep 3412
. Dan tanpa "via" koneksi non-mapan (jika saya tidak salah) berhenti berfungsi (Ubuntu Xenial). Setidaknya saya bisa memperbaiki tabel routing. Namun demikian, saya tidak dapat mengakses server setelah saya menjalankanopenvpn
.Berdasarkan jawaban @MrK, saya telah menulis beberapa kode sederhana di sini untuk membuatnya lebih cepat untuk melakukan pekerjaan sehingga Anda tidak perlu memeriksa antarmuka / IP:
Saya sudah mencoba skrip ini pada 4 VPS saya dan berfungsi dengan baik.
sumber
hmm terdengar seperti ip subnet overlap .... tanpa mengetahui lebih lanjut tentang skema ip Anda, selain ip publik untuk ternpasi vpn Anda seperti nl.privateinternetaccess.com, tidak dapat memastikannya.
jadi misalnya, jika subnet jarak jauh di sisi lain nl.privateinternetaccess.com adalah 10.32.43.0/24, dan instance Anda berada dalam vpc aws yang subnetnya adalah 10.32.44.0/24. tetapi klien ssh sumber Anda hidup di 10.32.43.0/24 (sisi aws vpc Anda), itu tidak akan berfungsi, karena kembalinya lalu lintas ssh akan didorong secara keliru pada vpn ke Belanda.
berikan info ip / subnet lengkap untuk bantuan lebih lanjut dengan ini.
...
ok, jadi ... sepertinya rute default Anda ada di terowongan, setelah Anda terhubung ke nl:
sehingga Anda dapat mengubahnya setelah terhubung. banyak kali server vpn memberi Anda rute palsu. khususnya di korps ceroboh. dalam hal ini, mereka mendorong rute default kepada Anda sehingga semua lalu lintas dari kotak vps akan nl. ubah rute default ke 104.167.102.x atau apa pun gateway subnet Anda ada di penyedia vps Anda.
sumber
Saat Anda menaikkan VPN, gateway default Anda diganti. Ini berarti bahwa setiap lalu lintas yang dihasilkan dari atau dialihkan melalui kotak Anda akan diteruskan ke gateway VPN.
Solusi sederhana adalah menyaring semua lalu lintas yang Anda tidak ingin rute melalui VPN dan melakukan sesuatu yang lain dengannya. Satu kemungkinan adalah untuk mengambil lalu lintas yang dihasilkan dari kotak Anda dengan alamat sumber lokal Anda dan rutekan melalui gateway lokal Anda. Ini memungkinkan layanan seperti SSH bekerja dengan baik.
Kami akan melakukannya di sini. Pertama, buat tabel routing baru dan tambahkan rute default yang merutekan semuanya melalui gateway lokal Anda:
Selanjutnya, buat aturan filter paket baru yang menandai semua lalu lintas meninggalkan kotak Anda dari alamat sumber yang diberikan dengan beberapa pengidentifikasi.
Akhirnya, buat kebijakan perutean yang memilih semua lalu lintas bertanda yang disebutkan di atas dan rutekan menggunakan tabel yang dibuat di atas.
Sekali lagi, nilai-nilai
<mark>
dan<table>
merupakan pengidentifikasi pilihan Anda yang sewenang-wenang.sumber
Bagi saya dengan menjalankan server OpenVPN sendiri di pfSense adalah menghapus centang pengaturan "Paksa semua lalu lintas IPv4 yang dihasilkan klien melalui terowongan."
sumber