Server VPN di Google Compute Engine dengan OpenVPN

13

Saya mencoba menggunakan server Google Compute Engine sebagai server VPN untuk semua lalu lintas saya (saya tinggal di Rusia, kami memiliki beberapa masalah dengan sensor di sini).

Ada mini-tutorial tentang VPN di GCE , tapi ini tentang jaringan antara 2 server di dalam GCE dan bukan dengan OpenVPN.

Saya telah membuat semua langkah dari tutorial lain, tentang pengaturan VPN dengan OpenVPN pada Debian , saya dapat terhubung ke VPN dari klien, tetapi kemudian saya tidak dapat membuka koneksi (bahkan tidak bisa ping google). Di server saya dapat melakukan ping dan mengunduh semuanya seperti biasa.

Saya memiliki VPN di Linode dengan pengaturan yang sama dan berfungsi dengan baik. Jadi masalah ada dalam aturan jaringan atau firewall GCE.

Saya sudah mencoba banyak varian tetapi tidak ada yang berhasil. Tolong, lihat pengaturan dan katakan padaku apa yang harus saya ubah.

// baris config dihapus, karena masalah terpecahkan //

ONS_
sumber
Apakah ada cara untuk mengaktifkan penerusan ip? gema 1> / proc / sys / net / ipv4 / ip_forward
Alec Istomin
@AlecIstomin, ya, sudah selesai. Saya memiliki VPN di Linode dengan pengaturan yang sama dan berfungsi dengan baik. Jadi masalah ada dalam aturan jaringan atau firewall GCE.
OZ_
Mungkin meminta dukungan GCE? Sepertinya ini hal yang bisa mereka jawab dengan cepat.
Bill Weiss
Harga @BillWeiss untuk rencana dukungan mereka mulai dari $ 150 / bulan, tetapi jika masalah ini tidak akan diselesaikan dalam seminggu, saya pikir saya akan membayar mereka. Saya juga akan mencoba mencari seseorang di oDesk untuk memperbaikinya dan kemudian akan menulis tutorial di blog saya.
OZ_
odesk.com/jobs/~01c4b1438a64f31fdd - jangan ragu untuk mendaftar, jika Anda dapat membantu, kawan .
OZ_

Jawaban:

7

Pertama-tama, terima kasih kepada @Shivox untuk jawabannya .

Dan inilah cara cepat untuk:

  • Saya sarankan Anda membuat jaringan tambahan (lihat "Jaringan" tab ") preferensi Dalam jaringan, menambah memungkinkan aturan untuk: tcp: 22 (jika tidak ada), tcp: 9700, tcp:. 17.619 . 17.619 di sini adalah variabel - perubahan untuk setiap port yang Anda suka (kisarannya adalah 9075-65534). Anda hanya perlu 3 aturan dan 2 rute default, tidak ada yang lain.
  • Pergi ke "Buat contoh Mesin Komputasi", klik "Tampilkan opsi lanjutan", izinkan port penerusan, pilih lokasi server.
  • Sekarang (ketika Anda telah memilih lokasi), tambahkan IP statis ke server.
  • Pilih gambar Ubuntu 14.04 (tepatnya versi ini).
  • Buat contoh
  • Terhubung melalui SSH (cara paling mudah - gunakan alat di-browser dari panel GCE)
  • sudo su
  • apt-key update && apt-get update && apt-get -y upgrade && apt-get -y install python-software-properties && apt-get -y install software-properties-common && add-apt-repository -y ppa:pritunl && apt-get update && apt-get -y install pritunl
  • Di browser terbuka https://instance_ip:9700
  • Pada pertanyaan tentang DB, klik "Simpan"
  • Di jendela masuk, gunakan pritunlsebagai nama pengguna dan kata sandi
  • Sekarang ubah nama pengguna dan kata sandi pengguna admin
  • Tambahkan organisasi, lalu 2 pengguna (untuk desktop dan seluler)
  • Klik "Tambah server" di tab "Server"
  • Gunakan nomor port dari langkah pertama ( 17619 sebagai contoh) dan protokol tcp.
  • Lampirkan organisasi ke server
  • Mulai server
  • Dalam kunci unduhan tab "Pengguna" untuk kedua pengguna (arsip tar dengan file ovpn di dalamnya).

Saya menggunakan Viscosity untuk OS X dan OpenVPN terhubung untuk iOS sebagai klien. Dalam Viskositas, aktifkan opsi "Kirim semua lalu lintas melalui koneksi VPN" di tab "Jaringan".

ONS_
sumber
Sebagai catatan: Google Cloud Platform memberikan uji coba gratis dengan $ 300 selama 60 hari.
OZ_
1
Instruksi untuk menginstal Pritunl pada Ubuntu 14.04 berubah: github.com/pritunl/pritunl#ubuntu-trusty
motobói
6

Anda dapat mengatasi masalah tidak dapat menjelajahi web melalui VPN meskipun dapat melakukan ping, traceroute ... dengan salah satu dari dua cara berikut:

Pertama, Anda dapat menggunakan protokol TCP alih-alih UDP, dengan mengubah 'proto udp' menjadi 'proto tcp' di file klien dan server conf.

Kedua, Anda dapat menggunakan perangkat tap alih-alih tun, dengan mengubah 'dev tun' menjadi 'dev tap' di file klien dan server conf.

Tidak yakin apa masalahnya, sepertinya itu masalah dari Google.

Shivox
sumber
1
Kamu adalah pahlawanku! Terima kasih banyak! Beralih ke TCP berhasil. Saya akan memperluas penuh "bagaimana-untuk" dalam jawaban terpisah. Perasaan itu ketika mimpi lama terwujud ... Terima kasih!
OZ_
4

Harap diingat bahwa Google VPC menjatuhkan paket yang memiliki source_ipselain IP internal VM yang memiliki IP eksternal.

Doc ini https://cloud.google.com/compute/docs/vpc/advanced-vpc menyatakan:

Jaringan VPC menulis ulang header IP untuk menyatakan alamat IP eksternal instance sebagai sumber. Jika instance tidak memiliki alamat IP eksternal, panggilan tidak diperbolehkan, dan jaringan VPC menjatuhkan paket tanpa memberi tahu pengirim.

Jadi jika openVPN Anda hanya meneruskan paket-paket dari jaringan lain, maka paket-paket ke internal publik akan dihapus karena source_iptidak cocok dengan IP internal VM yang ada. Untuk alasan ini, Anda perlu NAT paket yang meninggalkan jaringan lokal Anda, misalnya pada simpul VPN Anda.

Chain POSTROUTING (policy ACCEPT)
target      prot opt source              destination         
MASQUERADE  all  --  192.168.0.0/16      !192.168.0.0/16

"Pritunl" yang disebutkan dalam jawaban OZ_ berfungsi, karena mengkonfigurasi NAT secara otomatis.

Piotr Tabor
sumber
3

Ini sebenarnya bukan jawaban, tetapi situs itu tidak mengizinkan saya untuk menambahkannya sebagai komentar untuk pertanyaan Anda.

Namun demikian, saya memiliki konfigurasi yang hampir sama persis dengan yang Anda perincian di atas (saya tidak mengkonfigurasi dnsmaq pada server tangguh)

Sayangnya, VPN tidak berfungsi seperti yang diharapkan. Saya dapat menyelesaikan alamat, melakukan ping ke beberapa host Internet dan bahkan membuat jejak lengkap saat terhubung ke VPN. Namun ketika saya membuka browser dan menavigasi ke suatu situs, koneksi sangat lambat. Saya tidak tahu apa yang bisa memengaruhi koneksi, tetapi ini benar-benar masalah aneh.

Mungkin seseorang dari Google dapat membantu kami mengetahui apa yang sedang terjadi.

PS 1. Seperti yang disarankan orang lain sebelumnya, dapatkah Anda memverifikasi apakah penerusan ip diaktifkan? Bagi saya, satu-satunya cara untuk memastikan nilai net.ipv4.ip_forward dikembalikan dengan benar setelah reboot adalah setelah saya menggunakan aturan khusus di /etc/sysctl.d

Misalnya, Anda bisa menambahkan aturan menggunakan perintah berikut:

$ sudo echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/90-useroverrides.conf

PS 2. Jika penerusan bekerja untuk Anda, dapatkah Anda menguji rute jejak ke host eksternal saat terhubung ke VPN ?. Output yang saya dapatkan ketika saya melakukan ini agak aneh (Mengapa ada beberapa hop pada IP yang sama ????):

$ sudo traceroute www.yahoo.com -T -p 80 -N 1 -z 0.5 -q 1
traceroute to www.yahoo.com (98.139.183.24), 30 hops max, 60 byte packets
 1  209.85.241.26 (209.85.241.26)  0.764 ms
 2  209.85.241.34 (209.85.241.34)  0.668 ms
 3  209.85.241.26 (209.85.241.26)  0.966 ms
 4  209.85.241.36 (209.85.241.36)  0.702 ms
 5  209.85.241.28 (209.85.241.28)  0.865 ms
 6  209.85.241.36 (209.85.241.36)  0.642 ms
 7  209.85.241.26 (209.85.241.26)  0.921 ms
 8  209.85.241.28 (209.85.241.28)  18.837 ms
 9  72.14.238.107 (72.14.238.107)  13.378 ms
10  72.14.237.131 (72.14.237.131)  38.275 ms
11  209.85.254.131 (209.85.254.131)  13.349 ms
12  *
13  ae-8.pat1.bfz.yahoo.com (216.115.101.231)  44.903 ms
14  ae-4.msr1.bf1.yahoo.com (216.115.100.25)  45.323 ms
15  xe-10-3-1.clr1-a-gdc.bf1.yahoo.com (98.139.232.101)  47.382 ms
16  et18-25.fab6-1-sat.bf1.yahoo.com (98.139.128.103)  45.793 ms
17  po-13.bas1-7-prd.bf1.yahoo.com (98.139.129.209)  41.143 ms
18  ir2.fp.vip.bf1.yahoo.com (98.139.183.24)  42.451 ms

PS 3. Satu-satunya hal yang tampaknya berfungsi dengan baik adalah VPN menggunakan IP eksternal dari host saya untuk mengakses Internet

$ sudo curl --interface tun0 checkip.dyndns.org
<html><head><title>Current IP Check</title></head><body>Current IP Address: 107.178.XXX.XXX</body></html>
Mario
sumber
@ OZ_ Senang mendengar Anda sekarang dapat melakukan ping dan traceroute saat terhubung ke VPN. Sekarang, dapatkah Anda memposting hasil dari salah satu traceroute Anda? Saya ingin tahu tentang baris pertama dari output karena sepertinya paket tersebut dialihkan dalam satu lingkaran untuk setidaknya 8 lompatan pertama (meskipun saya bukan pakar jaringan)
Mario
maaf, ini dia: gist.github.com/jamm/028ae858a03e40495740 . Dan ya, itu terlihat aneh. Mungkin kita perlu rute tertentu.
OZ_
1

Anda perlu IP forwarding diaktifkan untuk instance VM Anda di google cloud, jika tidak paket tidak akan mencapai VM Anda. Catatan, ini terpisah dari net.ipv4.ip_forward = 1yang dapat Anda atur di VM Anda.

Penerusan IP hanya dapat diatur satu kali sebelum Anda membuat VM, dan tidak dapat dimodifikasi setelahnya. Untuk mengaktifkannya untuk VM baru klik Management, security, disks, networking, sole tenancy: masukkan deskripsi gambar di sini

Kemudian, di Networkingtab klik Network Interfacedan atur IP Forwarding ke ON:

masukkan deskripsi gambar di sini

Pavel P
sumber
0

Anda perlu menambahkan aturan yang mengizinkan lalu lintas untuk OpenVPN itu sendiri:

iptables -A INPUT -p udp --dport 1194 -j ACCEPT
Paul Rudnitskiy
sumber
ada sebagai aturan # 4
OZ_
0

Tentang Jaringan.

1) Aktifkan semua lalu lintas dari OpenVPN Subnet (mis. 10.8.0.0/24) di Konsol

2) Saya sangat menyarankan Anda untuk menambahkan Masquerade ke jaringan Anda

firewall-cmd --zone=trusted --add-masquerade --permanent
firewall-cmd --reload-all

3) Jangan lupa untuk mengaktifkan perutean paket di kernel

a) satu kali

 echo 1 > /proc/sys/net/ipv4/ip_forward

b) selamanya di /etc/sysctl.conf:

 net.ipv4.ip_forward = 1
Mikolas Pansky
sumber