Membangun router di SOCKS di laptop dengan Debian 10
Selama satu atau dua tahun penuh saya menunda penerbitan artikel ini karena alasan utama - saya telah menerbitkan dua artikel di mana saya menjelaskan proses membuat router di SOCKS dari laptop biasa dengan Debian.
Namun, sejak itu versi stabil Debian telah diperbarui ke Buster, cukup banyak orang yang menghubungi saya secara pribadi untuk meminta bantuan dalam pengaturan, yang berarti artikel saya sebelumnya tidak lengkap. Yah, saya sendiri menebak bahwa metode yang diuraikan di dalamnya tidak sepenuhnya mengungkapkan semua seluk-beluk pengaturan Linux untuk perutean di SOCKS. Selain itu, mereka ditulis untuk Debian Stretch, dan setelah memutakhirkan ke Buster, di sistem init systemd, saya melihat perubahan kecil dalam interaksi layanan. Dan dalam artikel itu sendiri, saya tidak menggunakan systemd-networkd, meskipun ini paling cocok untuk konfigurasi jaringan yang kompleks.
Selain perubahan di atas, layanan berikut ditambahkan ke konfigurasi saya: hostapd - layanan untuk virtualisasi titik akses, ntp untuk menyinkronkan waktu klien jaringan lokal, dnscrypt-proxy untuk mengenkripsi koneksi melalui DNS dan menonaktifkan iklan di klien jaringan lokal, dan juga, seperti yang saya sebutkan sebelumnya, systemd-jaringan untuk mengkonfigurasi antarmuka jaringan.
Berikut adalah diagram blok sederhana dari struktur internal router tersebut.
Jadi, izinkan saya mengingatkan Anda apa tujuan dari rangkaian artikel ini:
Rutekan semua koneksi OS ke SOCKS, serta koneksi dari semua perangkat di jaringan yang sama dengan laptop.
Laptop dalam kasus saya harus tetap mobile sepenuhnya. Artinya, memberikan kesempatan untuk menggunakan lingkungan desktop dan tidak terikat dengan lokasi fisik.
Poin terakhir menyiratkan koneksi dan perutean hanya melalui antarmuka nirkabel internal.
Ya, dan tentu saja, pembuatan panduan komprehensif, serta analisis teknologi yang relevan sejauh pengetahuan saya yang sederhana.
Apa yang akan dibahas dalam artikel ini:
git — unduh repositori proyek tun2socksdiperlukan untuk merutekan lalu lintas TCP ke SOCKS, dan buat_ap — skrip untuk mengotomatiskan pengaturan titik akses virtual menggunakan hostapd.
tun2socks — membangun dan menginstal layanan systemd pada sistem.
systemd-jaringan — mengkonfigurasi antarmuka nirkabel dan virtual, tabel perutean statis, dan pengalihan paket.
buat_ap — instal layanan systemd pada sistem, konfigurasikan dan luncurkan titik akses virtual.
Langkah opsional:
ntp — menginstal dan mengkonfigurasi server untuk menyinkronkan waktu pada klien titik akses virtual.
dnscrypt-proxy — kami akan mengenkripsi permintaan DNS, mengarahkannya ke SOCKS dan menonaktifkan domain periklanan untuk jaringan lokal.
Mengapa semua ini?
Ini adalah salah satu cara untuk mengamankan koneksi TCP di jaringan lokal. Keuntungan utamanya adalah semua koneksi dibuat di SOCKS, kecuali jika rute statis dibuat untuk koneksi tersebut melalui gateway asli. Ini berarti Anda tidak perlu menentukan pengaturan server SOCKS untuk masing-masing program atau klien di jaringan lokal - semuanya masuk ke SOCKS secara default, karena ini adalah gateway default sampai kami menyatakan sebaliknya.
Pada dasarnya kami menambahkan router enkripsi kedua sebagai laptop di depan router asli dan menggunakan koneksi Internet router asli untuk permintaan SOCKS yang sudah dienkripsi pada laptop, yang pada gilirannya merutekan dan mengenkripsi permintaan dari klien LAN.
Dari sudut pandang penyedia, kami selalu terhubung ke satu server dengan lalu lintas terenkripsi.
Oleh karena itu, semua perangkat terhubung ke titik akses virtual laptop.
Instal tun2socks pada sistem
Selama mesin Anda memiliki internet, unduh semua alat yang diperlukan.
apt update
apt install git make cmake
Unduh paket badvpn
git clone https://github.com/ambrop72/badvpn
Sebuah folder akan muncul di sistem Anda badvpn. Buat folder terpisah untuk build
NetworkManager-tunggu-online adalah layanan yang menunggu koneksi jaringan berfungsi sebelum systemd melanjutkan memulai layanan lain yang bergantung pada keberadaan jaringan. Kami menonaktifkannya saat kami beralih ke analog systemd-networkd.
Mari kita aktifkan segera:
systemctl enable systemd-networkd-wait-online
Siapkan antarmuka jaringan nirkabel
Buat file konfigurasi systemd-networkd untuk antarmuka jaringan nirkabel /etc/systemd/network/25-wlp6s0.network.
Nama adalah nama antarmuka nirkabel Anda. Identifikasikan dengan perintah ip a.
IP Maju - arahan yang memungkinkan pengalihan paket pada antarmuka jaringan.
Alamat bertanggung jawab untuk menetapkan alamat IP ke antarmuka nirkabel. Kami menentukannya secara statis karena dengan arahan yang setara DHCP=yes, systemd-networkd membuat gateway default pada sistem. Kemudian semua lalu lintas akan melewati gateway asli, dan bukan melalui antarmuka virtual masa depan pada subnet yang berbeda. Anda dapat memeriksa gateway default saat ini dengan perintah ip r
Buat rute statis untuk server SOCKS jarak jauh
Jika server SOCKS Anda bukan lokal, tetapi jarak jauh, maka Anda perlu membuat rute statis untuk server tersebut. Untuk melakukan ini, tambahkan bagian Route di akhir file konfigurasi antarmuka nirkabel yang Anda buat dengan konten berikut:
[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
Gateway — ini adalah gateway default atau alamat titik akses asli Anda.
Destination — Alamat server SOCKS.
Konfigurasikan wpa_supplicant untuk systemd-networkd
systemd-networkd menggunakan wpa_supplicant untuk terhubung ke titik akses yang aman. Saat mencoba "menaikkan" antarmuka nirkabel, systemd-networkd memulai layanan wpa_supplicant@имяDimana nama adalah nama antarmuka nirkabel. Jika Anda belum pernah menggunakan systemd-networkd sebelum titik ini, maka layanan ini mungkin tidak ada di sistem Anda.
Jadi buatlah dengan perintah:
systemctl enable wpa_supplicant@wlp6s0
saya menggunakan wlp6s0 sebagai nama antarmuka nirkabelnya. Nama Anda mungkin berbeda. Anda dapat mengenalinya dengan perintah ip l.
Sekarang layanan yang dibuat wpa_supplicant@wlp6s0 akan diluncurkan ketika antarmuka nirkabel "diangkat", namun, pada gilirannya, akan mencari pengaturan SSID dan kata sandi titik akses dalam file /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Oleh karena itu, Anda perlu membuatnya menggunakan utilitas wpa_passphrase.
dimana SSID adalah nama titik akses Anda, kata sandi adalah kata sandi, dan wlp6s0 — nama antarmuka nirkabel Anda.
Inisialisasi antarmuka virtual untuk tun2socks
Buat file untuk menginisialisasi antarmuka virtual baru di sistem/etc/systemd/network/25-tun2socks.netdev
[NetDev]
Name=tun2socks
Kind=tun
Nama adalah nama yang systemd-networkd akan tetapkan ke antarmuka virtual masa depan ketika diinisialisasi.
Jenis adalah jenis antarmuka virtual. Dari nama layanan tun2socks sudah bisa ditebak menggunakan antarmuka seperti tun.
netdev adalah ekstensi dari file itu systemd-networkd Digunakan untuk menginisialisasi antarmuka jaringan virtual. Alamat dan pengaturan jaringan lainnya untuk antarmuka ini ditentukan dalam .jaringan-file.
Buat file seperti ini /etc/systemd/network/25-tun2socks.network dengan konten sebagai berikut:
Name — nama antarmuka virtual yang Anda tentukan netdev-mengajukan.
Address — Alamat IP yang akan ditetapkan ke antarmuka virtual. Harus berada di jaringan yang sama dengan alamat yang Anda tentukan di layanan tun2socks
Gateway — Alamat IP “router” tun2socks, yang Anda tentukan saat membuat layanan systemd.
Jadi antarmuka tun2socks memiliki alamat 172.16.1.2, dan layanan tun2socks - 172.16.1.1, yaitu gerbang untuk semua koneksi dari antarmuka virtual.
Siapkan titik akses virtual
Instal dependensi:
apt install util-linux procps hostapd iw haveged
Unduh repositori buat_ap ke mobil Anda:
git clone https://github.com/oblique/create_ap
Buka folder repositori di mesin Anda:
cd create_ap
Instal di sistem:
make install
Konfigurasi akan muncul di sistem Anda /etc/create_ap.conf. Berikut adalah opsi pengeditan utama:
GATEWAY=10.0.0.1 — lebih baik menjadikannya subnet khusus yang terpisah.
NO_DNS=1 - nonaktifkan, karena parameter ini akan dikelola oleh antarmuka virtual systemd-networkd.
NO_DNSMASQ=1 - matikan karena alasan yang sama.
WIFI_IFACE=wlp6s0 — antarmuka nirkabel laptop.
INTERNET_IFACE=tun2socks - antarmuka virtual yang dibuat untuk tun2socks.
SSID=hostapd — nama titik akses virtual.
PASSPHRASE=12345678 - kata sandi.
Jangan lupa untuk mengaktifkan layanan:
systemctl enable create_ap
Aktifkan server DHCP di systemd-networkd
Layanan create_ap menginisialisasi antarmuka virtual dalam sistem ap0. Secara teori, dnsmasq hang pada antarmuka ini, tetapi mengapa menginstal layanan tambahan jika systemd-networkd berisi server DHCP bawaan?
Untuk mengaktifkannya, kami akan menentukan pengaturan jaringan untuk titik virtual. Untuk melakukan ini, buat file /etc/systemd/network/25-ap0.network dengan konten sebagai berikut:
Setelah layanan create_ap menginisialisasi antarmuka virtual ap0, systemd-networkd akan secara otomatis memberinya alamat IP dan mengaktifkan server DHCP.
Senar EmitDNS=yes и DNS=10.0.0.1 mengirimkan pengaturan server DNS ke perangkat yang terhubung ke titik akses.
Jika Anda tidak berencana menggunakan server DNS lokal - dalam kasus saya ini adalah dnscrypt-proxy - Anda dapat menginstalnya DNS=10.0.0.1 в DNS=192.168.1.1Dimana 192.168.1.1 — alamat gateway asli Anda. Kemudian permintaan DNS untuk host dan jaringan lokal Anda tidak akan terenkripsi melalui server penyedia.
EmitNTP=yes и NTP=192.168.1.1 mentransfer pengaturan NTP.
Hal yang sama berlaku untuk garis NTP=10.0.0.1.
Instal dan konfigurasikan server NTP
Instal di sistem:
apt install ntp
Edit konfigurasinya /etc/ntp.conf. Komentari alamat kumpulan standar:
Tambahkan alamat server publik, misalnya Google Public NTP:
server time1.google.com ibrust
server time2.google.com ibrust
server time3.google.com ibrust
server time4.google.com ibrust
Berikan akses ke server kepada klien di jaringan Anda:
restrict 10.0.0.0 mask 255.255.255.0
Aktifkan siaran ke jaringan Anda:
broadcast 10.0.0.255
Terakhir, tambahkan alamat server ini ke tabel perutean statis. Untuk melakukan ini, buka file konfigurasi antarmuka nirkabel /etc/systemd/network/25-wlp6s0.network dan tambahkan ke akhir bagian Route.
Setelah reboot atau restart, Anda akan memiliki titik akses kedua yang mengarahkan host dan perangkat LAN ke SOCKS.
Seperti inilah hasilnya ip a laptop biasa:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: tun2socks: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 500
link/none
inet 172.16.1.2/24 brd 172.16.1.255 scope global tun2socks
valid_lft forever preferred_lft forever
inet6 fe80::122b:260:6590:1b0e/64 scope link stable-privacy
valid_lft forever preferred_lft forever
3: enp4s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether e8:11:32:0e:01:50 brd ff:ff:ff:ff:ff:ff
4: wlp6s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 4c:ed:de:cb:cf:85 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.2/24 brd 192.168.1.255 scope global wlp6s0
valid_lft forever preferred_lft forever
inet6 fe80::4eed:deff:fecb:cf85/64 scope link
valid_lft forever preferred_lft forever
5: ap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 4c:ed:de:cb:cf:86 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.1/24 brd 10.0.0.255 scope global ap0
valid_lft forever preferred_lft forever
inet6 fe80::4eed:deff:fecb:cf86/64 scope link
valid_lft forever preferred_lft forever
Sebagai hasilnya,
Penyedia hanya melihat koneksi terenkripsi ke server SOCKS Anda, yang berarti mereka tidak melihat apa pun.
Namun ia melihat permintaan NTP Anda, untuk mencegahnya, hapus rute statis untuk server NTP. Namun, belum ada kepastian apakah server SOCKS Anda mengizinkan protokol NTP.
Kruk terlihat di Debain 10
Jika Anda mencoba memulai ulang layanan jaringan dari konsol, itu akan gagal karena kesalahan. Hal ini disebabkan karena sebagiannya yang berupa antarmuka virtual terikat dengan layanan tun2socks, yang artinya sedang digunakan. Untuk memulai ulang layanan jaringan, Anda harus menghentikan layanan tun2socks terlebih dahulu. Tapi menurut saya, jika Anda membaca sampai akhir, ini pasti tidak menjadi masalah bagi Anda!