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.

Membangun router di SOCKS di laptop dengan Debian 10

Jadi, izinkan saya mengingatkan Anda apa tujuan dari rangkaian artikel ini:

  1. Rutekan semua koneksi OS ke SOCKS, serta koneksi dari semua perangkat di jaringan yang sama dengan laptop.
  2. Laptop dalam kasus saya harus tetap mobile sepenuhnya. Artinya, memberikan kesempatan untuk menggunakan lingkungan desktop dan tidak terikat dengan lokasi fisik.
  3. Poin terakhir menyiratkan koneksi dan perutean hanya melalui antarmuka nirkabel internal.
  4. Ya, dan tentu saja, pembuatan panduan komprehensif, serta analisis teknologi yang relevan sejauh pengetahuan saya yang sederhana.

Apa yang akan dibahas dalam artikel ini:

  1. git — unduh repositori proyek tun2socksdiperlukan untuk merutekan lalu lintas TCP ke SOCKS, dan buat_ap — skrip untuk mengotomatiskan pengaturan titik akses virtual menggunakan hostapd.
  2. tun2socks — membangun dan menginstal layanan systemd pada sistem.
  3. systemd-jaringan — mengkonfigurasi antarmuka nirkabel dan virtual, tabel perutean statis, dan pengalihan paket.
  4. 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

mkdir badvpn-build

Pergi ke sana

cd badvpn-build

Mengumpulkan tun2socks

cmake ../badvpn -DBUILD_NOTHING_BY_DEFAULT=1 -DBUILD_TUN2SOCKS=1

Instal pada sistem

make install
  • Parameter -DBUILD_NOTHING_BY_DEFAULT=1 menonaktifkan pembangunan semua komponen repositori badvpn.
  • -DBUILD_TUN2SOCKS=1 termasuk komponen dalam perakitan tun2socks.
  • make install — akan menginstal biner tun2socks pada sistem Anda di /usr/local/bin/badvpn-tun2socks.

Instal layanan tun2socks di systemd

Buat berkas /etc/systemd/system/tun2socks.service dengan konten sebagai berikut:

[Unit]
Description=SOCKS TCP Relay

[Service]
ExecStart=/usr/local/bin/badvpn-tun2socks --tundev tun2socks --netif-ipaddr 172.16.1.1 --netif-netmask 255.255.255.0 --socks-server-addr 127.0.0.1:9050

[Install]
WantedBy=multi-user.target
  • --tundev - mengambil nama antarmuka virtual yang kita inisialisasi dengan systemd-networkd.
  • --netif-ipaddr — alamat jaringan “router” tun2socks yang terhubung dengan antarmuka virtual. Lebih baik memisahkannya subnet yang dipesan.
  • --socks-server-addr - menerima soket (адрес:порт server SOCKS).

Jika server SOCKS Anda memerlukan autentikasi, Anda dapat menentukan parameternya --username и --password.

Selanjutnya, daftarkan layanannya

systemctl daemon-reload

Dan nyalakan

systemctl enable tun2socks

Sebelum memulai layanan, kami akan menyediakan antarmuka jaringan virtual.

Beralih ke systemd-networkd

Kami termasuk systemd-networkd:

systemctl enable systemd-networkd

Nonaktifkan layanan jaringan saat ini.

systemctl disable networking NetworkManager NetworkManager-wait-online
  • 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.

[Match]
Name=wlp6s0

[Network]
Address=192.168.1.2/24
IPForward=yes
  • 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.

Untuk melakukan ini, jalankan perintah:

wpa_passphrase SSID password>/etc/wpa_supplicant/wpa_supplicant-wlp6s0.conf

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:

[Match]
Name=tun2socks

[Network]
Address=172.16.1.2/24
Gateway=172.16.1.1
  • 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:

[Match]
Name=ap0

[Network]
Address=10.0.0.1/24
DHCPServer=yes

[DHCPServer]
EmitDNS=yes
DNS=10.0.0.1
EmitNTP=yes
NTP=10.0.0.1

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:

#pool 0.debian.pool.ntp.org iburst
#pool 1.debian.pool.ntp.org iburst
#pool 2.debian.pool.ntp.org iburst
#pool 3.debian.pool.ntp.org iburst

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.

[Route]
Gateway=192.168.1.1
Destination=216.239.35.0

[Route]
Gateway=192.168.1.1
Destination=216.239.35.4

[Route]
Gateway=192.168.1.1
Destination=216.239.35.8

[Route]
Gateway=192.168.1.1
Destination=216.239.35.12

Anda dapat mengetahui alamat server NTP Anda menggunakan utilitas host sebagai berikut:

host time1.google.com

Instal dnscrypt-proxy, hapus iklan dan sembunyikan lalu lintas DNS dari penyedia Anda

apt install dnscrypt-proxy

Untuk melayani kueri DNS host dan jaringan lokal, edit soket /lib/systemd/system/dnscrypt-proxy.socket. Ubah baris berikut:

ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53

Mengulang kembali systemd:

systemctl daemon-reload

Edit konfigurasinya /etc/dnscrypt-proxy/dnscrypt-proxy.toml:

server_names = ['adguard-dns']

Untuk merutekan koneksi dnscrypt-proxy melalui tun2socks, tambahkan di bawah ini:

force_tcp = true

Edit konfigurasinya /etc/resolv.conf, yang memberitahukan server DNS ke host.

nameserver 127.0.0.1
nameserver 192.168.1.1

Baris pertama memungkinkan penggunaan dnscrypt-proxy, baris kedua menggunakan gateway asli jika server dnscrypt-proxy tidak tersedia.

Selesai!

Nyalakan ulang atau hentikan layanan jaringan yang berjalan:

systemctl stop networking NetworkManager NetworkManager-wait-online

Dan mulai ulang semua yang diperlukan:

systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntp

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,

  1. Penyedia hanya melihat koneksi terenkripsi ke server SOCKS Anda, yang berarti mereka tidak melihat apa pun.
  2. 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!

referensi

  1. Perutean statis di Linux - IBM
  2. systemd-networkd.service - Freedesktop.org
  3. Tun2socks · ambrop72/badvpn Wiki · GitHub
  4. oblique/create_ap: Skrip ini membuat Titik Akses WiFi NATed atau Bridged.
  5. dnscrypt-proxy 2 — Proksi DNS yang fleksibel, dengan dukungan untuk protokol DNS terenkripsi.

Sumber: www.habr.com