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:- Merutekan semua koneksi OS ke SOCKS, serta koneksi semua perangkat yang berada di jaringan yang sama dengan laptop.
- Laptop dalam kasus saya harus tetap sepenuhnya mobile. Artinya, memberi kesempatan untuk menggunakan lingkungan desktop dan tidak terikat ke lokasi fisik.
- Poin terakhir melibatkan koneksi dan routing hanya melalui antarmuka nirkabel built-in.
- Yah, tentu saja, pembuatan panduan lengkap, serta analisis teknologi yang tepat sesuai dengan pengetahuan sederhana saya.
Apa yang akan dipertimbangkan dalam artikel ini:- 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 .
- tun2socks - membangun dan menginstal layanan systemd pada sistem .
- systemd-networkd - mengkonfigurasi antarmuka nirkabel dan virtual, tabel routing statis, dan penerusan paket.
- 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 badvpngit clone https://github.com/ambrop72/badvpn
Folder badvpn akan muncul di sistem Anda . Buat folder build terpisahmkdir badvpn-build
Pergi padanyacd badvpn-build
Bangun tun2sockscmake ../badvpn -DBUILD_NOTHING_BY_DEFAULT=1 -DBUILD_TUN2SOCKS=1
Instal ke sistemmake 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 layanansystemctl daemon-reload
Dan nyalakansystemctl 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 timnyaip 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:
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
- Penyedia hanya melihat koneksi terenkripsi ke server SOCKS Anda, yang berarti tidak melihat apa-apa.
- 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
- Routing Statis di Linux - IBM
- systemd-networkd.service - Freedesktop.org
- Tun2socks ambrop72 / badvpn wiki github
- oblique / create_ap: Script ini membuat Access Point WiFi NATed atau Bridged.
- dnscrypt-proxy 2 - Proxy DNS yang fleksibel, dengan dukungan untuk protokol DNS terenkripsi.