Artikel ini adalah tentang bagaimana saya berhasil memulai server VPN di belakang NAT penyedia rumah (tanpa alamat IP putih). Saya akan segera membuat reservasi: bahwa
kinerja implementasi ini secara langsung tergantung pada jenis NAT yang digunakan oleh penyedia Anda, serta router .
Jadi, saya harus terhubung dari ponsel cerdas Android saya ke komputer di rumah, kedua perangkat terhubung ke Internet melalui penyedia NAT, ditambah komputer terhubung melalui router rumah, yang juga memiliki koneksi NAT.
Skema klasik menggunakan VPS / VDS sewaan dengan alamat IP putih, serta menyewa alamat IP putih dari penyedia, tidak dipertimbangkan karena beberapa alasan.
Berdasarkan
pengalaman dari artikel sebelumnya , setelah melakukan beberapa percobaan dengan STUN dan penyedia NAT. Saya memutuskan eksperimen kecil dengan menjalankan perintah pada router rumah yang menjalankan firmware OpenWRT:
$ stun stun.sipnet.ru
mendapat hasilnya:
STUN klien versi 0.97
Primer: Pemetaan Independen, Filter Independen, port acak, akan menyematkan rambut
Nilai kembali adalah 0x000002
Terjemahan literal:
Pemetaan Independen - Pemetaan Independen
Filter Independen - Filter Independen
port acak - port acak
akan jepit rambut - akan ada jepit rambut
Setelah menjalankan perintah serupa di PC saya, saya dapat:
STUN klien versi 0.97
Primer: Pemetaan Independen, Port Dependent Filter, port acak, akan menyematkan rambut
Nilai kembali adalah 0x000006
Port Dependent Filter - filter tergantung port
Perbedaan dalam output perintah menunjukkan bahwa router rumah membuat kontribusinya terhadap proses penyiaran paket dari Internet, ini dimanifestasikan dalam kenyataan bahwa ketika perintah dieksekusi di komputer:
stun stun.sipnet.ru -p 11111 -v
Saya mendapat hasilnya:
...
MappedAddress = XX.1XX.1X4.2XX: 4398
...
pada saat ini, sesi UDP dibuka untuk sementara waktu, jika pada saat itu permintaan UDP dikirim (misalnya: netcat XX.1XX.1X4.2XX 4398 -u), maka permintaan datang ke router rumah, yang dikonfirmasi oleh TCPDump yang menjalankannya, tetapi permintaan tidak mencapai komputer - IPtables menjatuhkannya di router sebagai penerjemah NAT.

Tetapi kenyataan bahwa permintaan UDP melewati ISP NAT memberi harapan untuk berhasil. Karena router berada di yurisdiksi saya, saya memecahkan masalah dengan mengarahkan port UDP / 11111 ke komputer:
iptables -t nat -A PREROUTING -i eth1 -p udp -d 10.1XX.2XX.XXX --dport 11111 -j DNAT --to-destination 192.168.X.XXX
Dengan demikian, saya dapat memulai sesi UDP dan menerima permintaan dari Internet dari alamat IP apa pun. Pada titik ini, saya meluncurkan server OpenVPN (setelah mengonfigurasinya) mendengarkan port UDP / 11111, yang ditunjukkan pada smartphone alamat IP eksternal dan port (XX.1XX.1X4.2XX: 4398) dan berhasil terhubung dari smartphone ke komputer. Tetapi dalam implementasi ini, muncul masalah, perlu untuk entah bagaimana mempertahankan sesi UDP sampai klien OpenVPN terhubung ke server, saya tidak suka opsi memulai klien STUN secara berkala - Saya tidak ingin menyia-nyiakan server STUN untuk apa pun.
Juga menarik perhatian pada entri "
akan jepit rambut - akan ada jepit rambut ", mode ini
Hairpinning memungkinkan satu mesin di jaringan lokal untuk NAT untuk mengakses mesin lain di jaringan yang sama di alamat eksternal router.

Akibatnya, masalah mempertahankan sesi UDP diselesaikan - saya meluncurkan klien di komputer yang sama dengan server.
Ini berfungsi seperti ini:
- meluncurkan klien STUN dengan port lokal 11111
- Menerima respons dengan alamat IP eksternal dan port XX.1XX.1X4.2XX: 4398
- mengirim data dengan alamat IP eksternal dan port to mail (layanan lain dimungkinkan) dikonfigurasikan pada smartphone
- meluncurkan server OpenVPN di komputer dengan port UDP / 11111 mendengarkan
- meluncurkan klien OpenVPN di komputer dengan indikasi XX.1XX.1X4.2XX: 4398 untuk terhubung
- kapan saja saya memulai klien OpenVPN pada smartphone dengan alamat IP dan port (dalam kasus saya, alamat IP tidak berubah) untuk menghubungkan

Jadi, saya mendapat kesempatan untuk terhubung ke komputer saya dari smartphone. Implementasi ini memungkinkan Anda untuk menghubungkan klien OpenVPN.
Berlatih
Anda akan membutuhkan:
Setelah menulis beberapa skrip, beberapa file konfigurasi, menghasilkan sertifikat yang diperlukan (karena klien pada smartphone hanya bekerja dengan sertifikat), implementasi yang biasa dari server OpenVPN diperoleh.
Script utama di komputer
Skrip untuk mengirim data ke surat:
File konfigurasi server:
proto udp dev tun ca /home/vpn11-srv/ca.crt cert /home/vpn11-srv/server.crt key /home/vpn11-srv/server.key dh /home/vpn11-srv/dh2048.pem server 10.2.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt tls-server tls-auth /home/vpn11-srv/ta.key 0 tls-timeout 60 auth SHA256 cipher AES-256-CBC client-to-client keepalive 10 30 comp-lzo max-clients 10 user nobody group nogroup persist-key persist-tun log /var/log/vpn11-server.log verb 3 mute 20
File konfigurasi klien:
client dev tun proto udp ca "/home/vpn11-srv/ca.crt" cert "/home/vpn11-srv/client1.crt" key "/home/vpn11-srv/client1.key" tls-client tls-auth "/home/vpn11-srv/ta.key" 1 auth SHA256 cipher AES-256-CBC auth-nocache comp-lzo user nobody group nogroup persist-key persist-tun log /var/log/vpn11-clent.log verb 3 mute 20 ping 10 ping-exit 30
Pembuatan sertifikat dilakukan pada
artikel ini .
Menjalankan skrip:
Setelah sebelumnya membuatnya dapat dieksekusi
Di sisi smartphone
Setelah menginstal aplikasi
OpenVPN untuk Android , menyalin file konfigurasi, sertifikat, dan pengaturannya, ternyata seperti ini:
Saya memeriksa email pada ponsel cerdas Saya memperbaiki nomor port di pengaturan Saya meluncurkan klien dan terhubung Dalam proses menulis artikel, saya mentransfer konfigurasi dari komputer ke Raspberry Pi 3 dan mencoba menjalankan semuanya pada modem LTE, tetapi tidak berhasil! Hasil tim
STUN klien versi 0.97
Primer: Pemetaan Independen, Port Dependent Filter, port acak, akan menyematkan rambut
Nilai kembali adalah 0x000006
nilai
Port Dependent Filter tidak memungkinkan sistem untuk memulai.
Tetapi penyedia rumah tanpa masalah membiarkan sistem Raspberry Pi 3 memulai.
Dalam hubungannya dengan webcam, dengan VLC untuk
membuat aliran RTSP dari webcam $ cvlc v4l2:///dev/video0:chroma=h264 :input-slave=alsa://hw:1,0 --sout '#transcode{vcodec=x264,venc=x264{preset=ultrafast,profile=baseline,level=31},vb=2048,fps=12,scale=1,acodec=mpga,ab=128,channels=2,samplerate=44100,scodec=none}:rtp{sdp=rtsp://10.2.0.1:8554/}' --no-sout-all --sout-keep
dan VLC pada smartphone untuk melihat (rtsp stream: //10.2.0.1: 8554 /), ternyata bukan sistem pengawasan video yang buruk di kejauhan, Anda juga dapat meningkatkan Samba dan bertukar file, lalu lintas rute melalui VPN,
mengontrol komputer dari jarak jauh dan masih banyak lagi ...
Kesimpulan
Seperti yang telah ditunjukkan oleh praktik, untuk mengatur server VPN, Anda dapat melakukannya tanpa alamat IP eksternal yang harus Anda bayar, serta untuk VPS / VDS sewaan. Tapi itu semua tergantung pada provider. Tentu saja saya ingin mendapatkan informasi lebih lanjut tentang berbagai penyedia dan jenis-jenis NAT yang digunakan, tetapi ini baru permulaan ...
Terima kasih atas perhatian anda!