Membangun router di SOCKS di laptop dengan Debian 10

Selama satu tahun penuh (atau dua) saya menunda publikasi artikel ini karena alasan utama - saya sudah menerbitkan dua artikel di mana saya menggambarkan proses membuat router di SOCKS dari laptop biasa dengan Debian.

Namun, sejak itu versi stabil Debian telah diperbarui ke Buster, cukup banyak orang telah mengirimi saya permintaan pribadi untuk membantu dengan konfigurasi, yang berarti bahwa artikel saya sebelumnya tidak lengkap. Yah, saya sendiri menduga bahwa metode yang ditetapkan di dalamnya tidak sepenuhnya mengungkapkan semua seluk-beluk mengkonfigurasi Linux untuk routing di SOSKS. Selain itu, mereka ditulis untuk Debian Stretch, dan setelah upgrade ke Buster, dalam sistem inisialisasi systemd, saya melihat perubahan kecil dalam interaksi layanan. Ya, dan dalam artikel itu sendiri, saya tidak menggunakan systemd-networkd, meskipun ini paling cocok untuk konfigurasi jaringan yang kompleks.

Selain perubahan di atas, layanan seperti hostapd ditambahkan ke konfigurasi saya - layanan untuk virtualisasi titik akses, ntp untuk menyinkronkan waktu klien jaringan lokal, dnscrypt-proxy untuk mengenkripsi koneksi DNS dan menonaktifkan iklan pada klien jaringan lokal, serta, seperti yang saya sebutkan sebelumnya, systemd-networkd untuk mengkonfigurasi antarmuka jaringan.

Berikut adalah diagram blok paling sederhana dari struktur internal router tersebut.



Jadi, saya mengingatkan Anda apa tujuan dari siklus artikel ini adalah:

  1. Merutekan semua koneksi OS ke SOCKS, serta koneksi semua perangkat yang berada di jaringan yang sama dengan laptop.
  2. Laptop dalam kasus saya harus tetap sepenuhnya mobile. Artinya, memberi kesempatan untuk menggunakan lingkungan desktop dan tidak terikat ke lokasi fisik.
  3. Poin terakhir melibatkan koneksi dan routing hanya melalui antarmuka nirkabel built-in.
  4. Yah, tentu saja, pembuatan panduan lengkap, serta analisis teknologi yang tepat sesuai dengan pengetahuan sederhana saya.

Apa yang akan dipertimbangkan dalam artikel ini:

  1. git - unduh repositori proyek tun2socks yang diperlukan untuk merutekan lalu lintas TCP ke SOCKS, dan create_ap - sebuah skrip untuk mengotomatisasi konfigurasi titik akses virtual menggunakan hostapd .
  2. tun2socks - membangun dan menginstal layanan systemd pada sistem .
  3. systemd-networkd - mengkonfigurasi antarmuka nirkabel dan virtual, tabel routing statis, dan penerusan paket.
  4. create_ap - instal layanan systemd pada sistem, konfigurasikan dan luncurkan titik akses virtual.

Langkah opsional:

  • ntp - instal dan konfigurasikan server untuk menyinkronkan waktu pada klien dari titik akses virtual.
  • dnscrypt-proxy - mengenkripsi kueri DNS, merutekannya ke SOCKS dan menonaktifkan domain iklan untuk jaringan lokal.

Mengapa semua ini?


Ini adalah salah satu cara untuk mengamankan koneksi TCP pada LAN. Keuntungan utama adalah bahwa semua koneksi menuju SOCKS jika rute statis melalui gateway asli tidak dibangun untuk mereka. Ini berarti bahwa tidak perlu meresepkan pengaturan server SOCKS untuk masing-masing program atau klien di jaringan lokal - mereka semua pergi ke SOCKS secara default, karena ini adalah gateway default hingga kami menentukan yang sebaliknya.

Bahkan, kami menambahkan router enkripsi kedua sebagai laptop di depan router asli dan menggunakan koneksi Internet dari router asli untuk permintaan SOCKS laptop yang sudah dienkripsi, yang, pada gilirannya, merutekan dan mengenkripsi permintaan klien jaringan lokal.

Dari sudut pandang penyedia, kami selalu terhubung ke server yang sama dengan lalu lintas terenkripsi.

Dengan demikian, semua perangkat terhubung ke titik akses virtual laptop.

Sebelum kamu memulai


Hampir semua konfigurasi tersedia di repositori .

Instal tun2socks ke dalam sistem


Selama Anda memiliki internet di mesin Anda, unduh semua alat yang diperlukan.

apt update

apt install git make cmake

Unduh paket badvpn
git clone https://github.com/ambrop72/badvpn

Folder badvpn akan muncul di sistem Anda . Buat folder build terpisah

mkdir badvpn-build

Pergi padanya

cd badvpn-build

Bangun tun2socks

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

Instal ke sistem

make install

  • The -DBUILD_NOTHING_BY_DEFAULT = 1 parameter menonaktifkan perakitan semua komponen badvpn repositori .
  • DBUILD_TUN2SOCKS = 1 termasuk komponen tun2socks dalam perakitan .
  • make install - menginstal bin2 tun2socks pada sistem Anda di / usr / local / bin / badvpn-tun2socks.

Instal layanan tun2socks di systemd


Buat file /etc/systemd/system/tun2socks.service dengan konten 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 - menerima nama antarmuka virtual yang kami inisialisasi dengan systemd-networkd .
  • --netif-ipaddr - alamat jaringan tun2socks "router" yang terhubung dengan antarmuka virtual. Lebih baik membuat subnet yang disediakan secara terpisah .
  • --socks-server-addr - menerima soket ( alamat: port server SOCKS).

Jika server SOCKS Anda memerlukan otentikasi, Anda dapat menentukan --username dan parameter --password .

Selanjutnya, daftarkan layanan

systemctl daemon-reload

Dan nyalakan

systemctl enable tun2socks

Sebelum memulai layanan, kami akan menyediakannya dengan antarmuka jaringan virtual.

Pergi ke systemd-networkd


Nyalakan systemd-networkd :

systemctl enable systemd-networkd

Nonaktifkan layanan jaringan saat ini.

systemctl disable networking NetworkManager NetworkManager-wait-online

  • NetworkManager-wait-online adalah layanan yang menunggu koneksi jaringan yang berfungsi sebelum systemd terus memulai layanan lain tergantung pada ketersediaan jaringan. Kami menonaktifkannya, saat kami beralih ke analog systemd-networkd .

Mari kita nyalakan segera:

systemctl enable systemd-networkd-wait-online

Atur 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
IPMasquerade=yes

  • Nama adalah nama antarmuka nirkabel Anda. Identifikasi itu dengan perintah ip a .
  • IPMasquerade adalah arahan yang mencakup penyamaran dan penerusan paket pada antarmuka jaringan.
  • Alamat bertanggung jawab untuk menetapkan alamat IP ke antarmuka nirkabel. Kami menentukannya secara statis karena dengan direktif DHCP yang setara = ya , systemd-networkd membuat gateway default di sistem. Kemudian semua lalu lintas akan melalui gateway asli, dan bukan melalui antarmuka virtual masa depan di subnet yang sangat baik. 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 jauh, maka Anda perlu membuat rute statis untuk itu. Untuk melakukan ini, tambahkan bagian Rute di akhir file konfigurasi nirkabel yang Anda buat dengan konten berikut:

[Route]
Gateway=192.168.1.1
Destination=0.0.0.0

  • Gateway adalah gateway atau alamat default titik akses asli Anda.
  • Tujuan - alamat server SOCKS.

Konfigurasikan wpa_supplicant untuk systemd-networkd


systemd-networkd menggunakan wpa_supplicant untuk terhubung ke jalur akses yang aman. Ketika Anda mencoba untuk "menaikkan" antarmuka nirkabel, systemd-networkd memulai layanan @ nama wpa_supplicant , di mana nama adalah nama antarmuka nirkabel. Jika Anda belum pernah menggunakan systemd-networkd sebelum titik ini, maka pasti layanan ini tidak tersedia di sistem Anda.

Oleh karena itu, buat dengan perintah:

systemctl enable wpa_supplicant@wlp6s0

Saya menggunakan wlp6s0 sebagai nama antarmuka nirkabel saya. Nama Anda mungkin berbeda. Anda bisa mengetahuinya dengan timnya
ip l
.

Sekarang layanan yang dibuat wpa_supplicant @ wlp6s0 akan dimulai ketika antarmuka nirkabel "terangkat", namun, pada gilirannya, akan mencari pengaturan SSID dan kata sandi dari titik akses di file / etc / wpa_supplicant / wpa_supplicant-wlp6s0 . Oleh karena itu, Anda harus membuatnya menggunakan utilitas wpa_passphrase .

Untuk melakukan ini, jalankan perintah:

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

di mana SSID adalah nama titik akses Anda, kata sandi adalah kata sandi, dan wlp6s0 adalah 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 akan ditetapkan oleh systemd-networkd ke antarmuka virtual di masa depan ketika diinisialisasi.
  • Kind adalah jenis antarmuka virtual. Berdasarkan nama layanan tun2socks , Anda dapat menebak bahwa ia menggunakan antarmuka seperti tun .
  • netdev adalah ekstensi file yang digunakan systemd-networkd untuk menginisialisasi antarmuka jaringan virtual. Alamat dan pengaturan jaringan lainnya untuk antarmuka ini ditentukan dalam file .network .

Buat file /etc/systemd/network/25-tun2socks.network dengan konten berikut:

[Match]
Name=tun2socks

[Network]
Address=172.16.1.2/24
Gateway=172.16.1.1

  • Name - nama antarmuka virtual yang Anda tentukan dalam file netdev .
  • Alamat - alamat IP yang akan ditugaskan ke antarmuka virtual. Harus berada di jaringan yang sama dengan alamat yang Anda tentukan di tun2socks
  • Gateway - alamat IP tun2s β€œrouter” yang Anda tentukan saat membuat layanan systemd .

Dengan demikian, antarmuka tun2socks memiliki alamat 172.16.1.2 , dan layanan tun2socks adalah 172.16.1.1 , yaitu gateway untuk semua koneksi dari antarmuka virtual.

Konfigurasikan titik akses virtual


Instal dependensi:

apt install util-linux procps hostapd iw haveged

Unduh repositori create_ap ke mesin Anda:

git clone https://github.com/oblique/create_ap

Buka folder repositori di mesin Anda:

cd create_ap

Pasang di sistem:

make install

Config /etc/create_ap.conf akan muncul di sistem Anda . Berikut adalah opsi utama untuk mengedit:

  • GATEWAY = 10.0.0.1 - lebih baik untuk membuat subnet yang disediakan secara terpisah.
  • NO_DNS = 1 - matikan, karena parameter ini akan dikontrol oleh antarmuka systemd-networkd virtual.
  • 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.

Ingatlah untuk mengaktifkan layanan:

systemctl enable create_ap

Aktifkan server DHCP di systemd-networkd


Layanan create_ap menginisialisasi antarmuka virtual ap0 pada sistem . Secara teori, dnsmasq tergantung pada antarmuka ini , tetapi mengapa menginstal layanan tambahan jika systemd-networkd berisi server DHCP bawaan ?

Untuk mengaktifkannya, tentukan pengaturan jaringan untuk titik virtual. Untuk melakukan ini, buat file /etc/systemd/network/25-ap0.network dengan konten 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 sreate_ap menginisialisasi antarmuka virtual Ap0 , systemd-NetworkD secara otomatis menetapkan alamat IP dan mengaktifkan server DHCP.

Garis EmitDNS = ya dan DNS = 10.0.0.1 meneruskan pengaturan server DNS ke perangkat yang terhubung ke titik akses.

Jika Anda tidak berencana untuk menggunakan server DNS lokal - dalam kasus saya ini adalah dnscrypt-proxy - Anda dapat mengatur DNS = 10.0.0.1 ke DNS = 192.168.1.1 , di mana 192.168.1.1 adalah alamat gateway asli Anda. Kemudian permintaan DNS dari host dan jaringan lokal Anda akan tidak dienkripsi melalui server penyedia.

EmitNTP = yadan NTP = 192.168.1.1 mengirimkan pengaturan NTP.

Hal yang sama berlaku untuk baris NTP = 10.0.0.1 .

Instal dan konfigurasikan server NTP


Pasang di sistem:

apt install ntp

Edit config /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 dari jaringan Anda:

restrict 10.0.0.0 mask 255.255.255.0

Ubah siaran menjadi jaringan Anda:

broadcast 10.0.0.255

Akhirnya, tambahkan alamat server ini ke tabel routing statis. Untuk melakukan ini, buka file konfigurasi nirkabel /etc/systemd/network/25-wlp6s0.network dan tambahkan bagian Rute di bagian akhir .

[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 traffic DNS dari provider


apt install dnscrypt-proxy

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

ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53

Mulai ulang systemd:

systemctl daemon-reload

Edit config /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 konfigurasi /etc/resolv.conf yang memberitahu server DNS ke host.

nameserver 127.0.0.1
nameserver 192.168.1.1

Baris pertama termasuk penggunaan dnscrypt-proxy , yang kedua - menggunakan gateway asli, seandainya server dnscrypt-proxy tidak tersedia.

Selesai!


Mulai ulang atau hentikan layanan jaringan yang ada:

systemctl stop networking NetworkManager NetworkManager-wait-online

Dan restart semua yang diperlukan:

systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntp

Setelah mem-boot ulang atau memulai kembali, Anda akan memiliki titik akses kedua yang merutekan perangkat host dan 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

Akhirnya


  1. Penyedia hanya melihat koneksi terenkripsi ke server SOCKS Anda, yang berarti tidak melihat apa-apa.
  2. Namun ia melihat permintaan NTP Anda, untuk mencegahnya, hapus rute statis untuk server NTP. Namun, bukan fakta bahwa server SOCKS Anda memungkinkan NTP.

Crutch terlihat di Debain 10


Jika Anda mencoba me-restart layanan jaringan dari konsol, itu akan gagal dengan kesalahan. Hal ini disebabkan oleh fakta bahwa bagian dari itu dalam bentuk antarmuka virtual terikat dengan layanan tun2socks , yang berarti digunakan. Untuk memulai kembali layanan jaringan, Anda harus terlebih dahulu menghentikan layanan tun2socks . Tapi, saya pikir, jika Anda membaca sampai akhir, bagi Anda itu jelas bukan masalah!

Referensi


  1. Routing Statis di Linux - IBM
  2. systemd-networkd.service - Freedesktop.org
  3. Tun2socks ambrop72 / badvpn wiki github
  4. oblique / create_ap: Script ini membuat Access Point WiFi NATed atau Bridged.
  5. dnscrypt-proxy 2 - Proxy DNS yang fleksibel, dengan dukungan untuk protokol DNS terenkripsi.

All Articles