- Pemilihan komponen
- Luncurkan Antarmuka Jaringan
- Mengatur Titik Akses 802.11ac (5 GHz)
- Mengkonfigurasi SSID virtual menggunakan hostapd
Selama sepuluh tahun terakhir, saya telah membeli peralatan jaringan murah dan menginstal
DD-WRT untuk mengembalikan "fungsi" lebih dari $ 500 yang dihapus dari kernel Linux, yang menjadi dasar dari firmware saham.
Terlepas dari build yang tidak stabil, kesalahan yang tidak diperbaiki dan
perselisihan , DD-WRT masih lebih baik daripada stock firmware. Tapi sekarang komponen yang layak lebih murah dari sebelumnya, dan komunitas DIY telah sepenuhnya beralih ke Linux (saya melihat Anda, Mr. Raspberry), jadi mengapa tidak membangun router nirkabel Anda sendiri untuk selamanya?
Pemilihan komponen
Pertama-tama, Anda perlu memutuskan platform:
x86 atau
ARM ? Saya tidak akan
membahas secara rinci perbedaan utama , tetapi secara singkat: yang pertama memiliki kinerja yang lebih baik, sedangkan yang kedua lebih murah dan lebih hemat energi. Papan Raspberry Pi (dan setara) sangat murah dan mungkin lebih kuat daripada kebanyakan router komersial nirkabel, tetapi platform x86 tersebar luas dan memiliki keunggulan faktor bentuk standar dan port ekspansi.
Tentu saja, detail terpenting adalah chipset. Saat ini, standar de facto adalah
802.11n (2.4 GHz) dan
802.11ac (5 GHz), tetapi mengambil driver untuk Linux
masih merupakan tantangan , terutama dengan dukungan untuk mode AP (titik akses). Singkatnya, jika Anda tidak ingin masalah, maka pilih chipset
Atheros .
Driver ath9k dan
ath10k didukung dengan baik, Anda dapat dengan mudah menemukannya dengan antarmuka USB dan / atau mini-PCIe.
Setidaknya satu pengontrol antarmuka jaringan (NIC) adalah minimum yang diperlukan, dan pilih RAM dan penyimpanan sesuai selera Anda.
Daftar Bahan
Setelah mengorbankan harga dan konsumsi daya, saya memilih platform x86 untuk konfigurasi modular yang relatif kuat yang tersedia untuk peningkatan.
Jika Anda tidak membutuhkan ARM, maka kipas tidak diperlukan.Rumahnya luas, dengan dua lubang yang disiapkan untuk steker AC / DC. Memasang motherboard, RAM dan Pico-PSU berjalan dengan lancar:
Besi pornoMemasang mini-PCIe WiFi ternyata yang paling sulit, karena papan hanya mendukung kartu setengah-ukuran: di sini kabel ekstensi mPCIe datang untuk menyelamatkan. Saya mengambil kabel FFC 20 cm (termasuk) untuk menghubungkan kedua sisi adaptor dan memperbaiki mini-PCIe ke sasis menggunakan pita dua sisi.


Mini-PCIe expanderUntungnya, sasis dilengkapi dengan tiga lubang antena pra-potong. Inilah hasil akhirnya:


Perangkat lunak
Jelas kita menempatkan Linux. Tergantung pada perangkat kerasnya, itu bisa berupa distribusi yang dioptimalkan seperti
Raspbian (untuk Raspberry Pi) atau distribusi Linux lain yang Anda suka. Karena saya telah menggunakan Ubuntu selama bertahun-tahun, saya memilih
Ubuntu Server 18.04 LTS , yang saya lebih terbiasa bekerja dengannya dan yang memiliki dukungan jangka panjang.
Sisa dari artikel ini mengasumsikan bahwa Anda menggunakan distribusi berbasis Debian.Jika instalasi berjalan dengan baik dan Anda pergi ke konsol, tentukan nama antarmuka:
$ ip -br a | awk '{print $1}' lo enp1s0 enp2s0 wlp5s0
Ada dua NIC
enp1s0
pada motherboard: ini adalah
enp1s0
dan
enp2s0
. Kartu nirkabel muncul sebagai
wlp5s0
dan mendukung mode AP, sebagaimana dimaksud:
$ iw list ... Supported interface modes: * managed * AP * AP/VLAN * monitor * mesh point
Sekarang kita dapat menguraikan apa yang kita butuhkan: kita meletakkan NIC pertama sebagai port WAN, dan yang kedua kita terhubung ke antarmuka nirkabel:

Jaringan
Jika Anda memiliki Ubuntu 18.04, segera singkirkan
netplan
untuk kembali ke dukungan untuk / etc / network / interfaces:
$ sudo apt-get install ifupdown bridge-utils $ sudo systemctl stop networkd-dispatcher $ sudo systemctl disable networkd-dispatcher $ sudo systemctl mask networkd-dispatcher $ sudo apt-get purge nplan netplan.io
Sebagai server DHCP / DNS, pilih
dnsmasq :
$ sudo apt-get install dnsmasq
Karena kita akan memulai dan mengkonfigurasi proses
dnsmasq
melalui
post-up
hook, ingatlah untuk menonaktifkan daemon saat boot:
$ sudo sed -i "s/^ENABLED=1$/ENABLED=0/g" /etc/default/dnsmasq
Kami akan menulis konfigurasi
awal antarmuka jaringan sesuai dengan diagram, termasuk konfigurasi minimum
dnsmasq
:
$ cat /etc/network/interfaces
Dokumentasi /etc/network/interfaces
di siniSeperti yang Anda lihat dari bagian
post-up
, dnsmasq dimulai segera setelah jembatan naik. Konfigurasi ini dilakukan hanya dengan argumen baris perintah (
--conf-file=/dev/null
), dan proses akan berhenti ketika antarmuka dimatikan.
Antarmuka
bridge_ports
tidak secara khusus ditentukan dalam
wlp5s0
, karena
hostapd
akan menambahkannya ke jembatan secara otomatis (brctl dapat menolak untuk melakukan ini sebelum hostapd mulai mengubah mode antarmuka).
Lihat dokumentasi dnsmasq
.Sekarang Anda dapat me-restart jaringan (
sudo service networking restart
) atau cukup reboot untuk memverifikasi bahwa konfigurasi jaringan sudah benar.
Harap dicatat: meskipun saat ini kami dapat menerima DHCP dari
enp2s0
, kami tidak akan memiliki
koneksi nirkabel (lebih lanjut tentang ini nanti),
atau akses Internet (lihat di bawah).
Routing
Pada titik ini, Anda perlu merutekan paket antara
enp1s0
LAN (
enp2s0
) dan WAN (
enp1s0
) dan mengaktifkan
terjemahan alamat jaringan .
Mengaktifkan penerusan paket mudah:
$ sudo sysctl -w net.ipv4.ip_forward=1 $ echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
Perintah terakhir memastikan bahwa konfigurasi disimpan sampai reboot berikutnya.Terjemahan alamat jaringan adalah masalah lain, biasanya Anda harus berurusan dengan (atau lebih tepatnya melawan)
iptables
. Untungnya, Zaman Batu sudah lama berlalu, dan orang-orang dari FireHol melakukan banyak upaya untuk menambahkan tingkat abstraksi yang diperlukan:
$ sudo apt-get install firehol
FireHOL adalah bahasa firewall aman yang canggih, konfigurasinya mudah dipahami dan diakses. Anda tidak perlu lagi menulis pernyataan
iptables
: file konfigurasi itu sendiri diterjemahkan ke dalam pernyataan
iptables
dan diterapkan sesuai kebutuhan. Tidak ada daemon di latar belakang.
Mengaktifkan penerjemahan alamat jaringan untuk antarmuka LAN dengan tambahan aturan firewall minimum dilakukan secara mendasar:
$ cat /etc/firehol/firehol.conf version 6
FireHOL ditulis oleh orang untuk orang, dokumentasinya ada di sini .Anda dapat memeriksa pengaturan dengan memulai secara manual
firehol
(
sudo firehol start
) dan menghubungkan laptop ke port LAN:
sekarang Anda dapat online jika port WAN terhubung.
Sebelum me-reboot,
pastikan untuk mengedit
/etc/default/firehol
untuk memungkinkan FireHol untuk memulai saat boot:
$ sudo sed -i -E "s/^START_FIREHOL=.+$/START_FIREHOL=YES/g" /etc/default/firehol
Saya tidak akan membahas rincian seluruh sintaks firehol
, file konfigurasi menjelaskan sendiri, saya sarankan firehol
pada dokumentasi jika konfigurasi lebih kompleks. Jika Anda benar-benar tertarik dengan apa yang dilakukan firehol
dengan iptables
, ketikkan saja sudo firehol status
di baris perintah.Hotspot nirkabel
Jelas, kami akan mengelola titik akses menggunakan
hostapd :
$ sudo apt-get install hostapd
Di bawah ini Anda akan menemukan file konfigurasi 802.11 n / 2.4 Ghz / WPA2-AES yang minimal dan hampir tidak dapat dijelaskan:
$ cat /etc/hostapd/hostapd-simple.conf
Lihat hostpad.conf
dokumentasi di /usr/share/doc/hostapd/examples/hostapd.conf
.
Konfigurasi yang dijelaskan dapat diuji secara manual:
$ sudo hostapd /etc/hostapd/hostapd-simple.conf
Jika semuanya berjalan dengan baik,
koneksi nirkabel akan muncul . Jika Anda puas dengan hasilnya,
jangan lupa untuk mengubah konfigurasi untuk memulai
hostapd
segera setelah antarmuka naik (seperti yang ditunjukkan di bawah).
Inilah akhir /etc/network/interfaces:
$ cat /etc/network/interfaces
Mengatur Titik Akses 802.11ac (5 GHz)
Pemindaian pasif
Menurut
dokumentasi Airetos AEX-QCA9880-NX , chipset mendukung 802.11ac, sehingga kita dapat meninggalkan saluran 2,4 GHz yang ramai ke surga 5 GHz.
Mari kita lihat frekuensi apa yang didukung:
$ iw list ... Frequencies: * 2412 MHz [1] (20.0 dBm) * 2417 MHz [2] (20.0 dBm) * 2422 MHz [3] (20.0 dBm) * 2427 MHz [4] (20.0 dBm) * 2432 MHz [5] (20.0 dBm) * 2437 MHz [6] (20.0 dBm) * 2442 MHz [7] (20.0 dBm) * 2447 MHz [8] (20.0 dBm) * 2452 MHz [9] (20.0 dBm) * 2457 MHz [10] (20.0 dBm) * 2462 MHz [11] (20.0 dBm) * 2467 MHz [12] (disabled) * 2472 MHz [13] (disabled) * 2484 MHz [14] (disabled) ... Frequencies: * 5180 MHz [36] (17.0 dBm) (no IR) * 5200 MHz [40] (17.0 dBm) (no IR) * 5220 MHz [44] (17.0 dBm) (no IR) * 5240 MHz [48] (17.0 dBm) (no IR) * 5260 MHz [52] (23.0 dBm) (no IR, radar detection) * 5280 MHz [56] (23.0 dBm) (no IR, radar detection) * 5300 MHz [60] (23.0 dBm) (no IR, radar detection) * 5320 MHz [64] (23.0 dBm) (no IR, radar detection) * 5500 MHz [100] (23.0 dBm) (no IR, radar detection) * 5520 MHz [104] (23.0 dBm) (no IR, radar detection) * 5540 MHz [108] (23.0 dBm) (no IR, radar detection) * 5560 MHz [112] (23.0 dBm) (no IR, radar detection) * 5580 MHz [116] (23.0 dBm) (no IR, radar detection) * 5600 MHz [120] (23.0 dBm) (no IR, radar detection) * 5620 MHz [124] (23.0 dBm) (no IR, radar detection) * 5640 MHz [128] (23.0 dBm) (no IR, radar detection) * 5660 MHz [132] (23.0 dBm) (no IR, radar detection) * 5680 MHz [136] (23.0 dBm) (no IR, radar detection) * 5700 MHz [140] (23.0 dBm) (no IR, radar detection) * 5720 MHz [144] (23.0 dBm) (no IR, radar detection) * 5745 MHz [149] (30.0 dBm) (no IR) * 5765 MHz [153] (30.0 dBm) (no IR) * 5785 MHz [157] (30.0 dBm) (no IR) * 5805 MHz [161] (30.0 dBm) (no IR) * 5825 MHz [165] (30.0 dBm) (no IR) ...
Dalam daftar di atas, kita melihat bahwa chipset mendukung saluran 1-14 (2,4 GHz) dan saluran 36-165 (5 GHz), tetapi apakah Anda melihat
no IR
tanda
no IR
?
Bendera
no IR
menunjukkan
radiasi tanpa inisiasi (mis.
Pemindaian pasif ). Ini berarti bahwa mode ini dilarang dalam kasus ketika perangkat adalah yang pertama kali memulai radiasi (termasuk
suar ). Dengan kata lain,
Anda tidak dapat menjalankan jalur akses di saluran ini !
Persyaratan peraturan
Situasi di atas dijelaskan oleh
persyaratan peraturan Linux , yang mengatur penggunaan spektrum frekuensi radio
tergantung pada negara .
Tapi hei!
Saya tinggal di AS, dan tautannya mengatakan bahwa saya memiliki hak untuk memulai radiasi pada saluran 36-48, jadi ada apa? Mari kita lihat domain peraturan mana yang sedang digunakan:
$ iw reg get country 00: DFS-UNSET (2402 - 2472 @ 40), (N/A, 20), (N/A) (2457 - 2482 @ 40), (N/A, 20), (N/A), NO-IR (2474 - 2494 @ 20), (N/A, 20), (N/A), NO-OFDM, NO-IR (5170 - 5250 @ 80), (N/A, 20), (N/A), NO-IR (5250 - 5330 @ 80), (N/A, 20), (0 ms), DFS, NO-IR (5490 - 5730 @ 160), (N/A, 20), (0 ms), DFS, NO-IR (5735 - 5835 @ 80), (N/A, 20), (N/A), NO-IR (57240 - 63720 @ 2160), (N/A, 0), (N/A)
Masalahnya menunjukkan bahwa domain
dunia saat ini aktif (atau tidak diinstal), yaitu
nilai minimum yang diperbolehkan di setiap negara .
Sayangnya, Anda tidak dapat menginstal secara manual
sudo iw reg set
domain, karena domain tersebut dilindungi di EEPROM:
$ dmesg | grep EEPROM [ 12.123068] ath: EEPROM regdomain: 0x6c
Tambalan!
Untungnya, persyaratan peraturan diproses pada tingkat driver, sehingga dapat dengan mudah diubah: kami menemukan tambalan dalam
kode sumber Open-WRT .
Pertama-tama, jangan lupa menghubungkan repositori kode sumber dari
/etc/apt/sources.list
:
$ cat /etc/apt/sources.list ... deb-src http://us.archive.ubuntu.com/ubuntu/ bionic main restricted ...
Kemudian siapkan lingkungan dengan menginstal dependensi yang diperlukan:
$ sudo apt-get install build-essential fakeroot $ sudo apt-get build-dep linux
Unduh sumber kernel Anda:
$ apt-get source linux
Karena patch Open-WRT yang asli tidak dapat diterapkan "apa adanya" ke pohon kernel Ubuntu karena perbedaan halus dalam sistem build, saya harus memperbaikinya:
$ VERSION=$(uname -r) $ cd linux-${VERSION%%-*} $ wget -O - https://gist.github.com/renaudcerrato/02de8b2e8dc013bc71326defd2ef062c/raw/a2db325e520e6442c8c12f7599d64ac1b7596a3e/402-ath_regd_optional.patch | patch -p1 -b
Semuanya siap untuk perakitan:
$ fakeroot debian/rules clean $ fakeroot debian/rules binary-generic
Jika tidak ada masalah, sekarang Anda dapat menginstal kernel tetap di atas yang sebelumnya:
$ cd .. $ sudo dpkg -i linux*.deb
Nyalakan kembali, dan voila:
$ sudo iw reg set US $ iw list ... Frequencies: * 5180 MHz [36] (17.0 dBm) * 5200 MHz [40] (17.0 dBm) * 5220 MHz [44] (17.0 dBm) * 5240 MHz [48] (17.0 dBm) * 5260 MHz [52] (23.0 dBm) (radar detection) * 5280 MHz [56] (23.0 dBm) (radar detection) * 5300 MHz [60] (23.0 dBm) (radar detection) * 5320 MHz [64] (23.0 dBm) (radar detection) * 5500 MHz [100] (23.0 dBm) (radar detection) * 5520 MHz [104] (23.0 dBm) (radar detection) * 5540 MHz [108] (23.0 dBm) (radar detection) * 5560 MHz [112] (23.0 dBm) (radar detection) * 5580 MHz [116] (23.0 dBm) (radar detection) * 5600 MHz [120] (23.0 dBm) (radar detection) * 5620 MHz [124] (23.0 dBm) (radar detection) * 5640 MHz [128] (23.0 dBm) (radar detection) * 5660 MHz [132] (23.0 dBm) (radar detection) * 5680 MHz [136] (23.0 dBm) (radar detection) * 5700 MHz [140] (23.0 dBm) (radar detection) * 5720 MHz [144] (23.0 dBm) (radar detection) * 5745 MHz [149] (30.0 dBm) * 5765 MHz [153] (30.0 dBm) * 5785 MHz [157] (30.0 dBm) * 5805 MHz [161] (30.0 dBm) * 5825 MHz [165] (30.0 dBm) ...
Untuk menghindari pembaruan otomatis, Anda mungkin perlu memperbaiki versi kernel Linux .Konfigurasi
hostapd
konfigurasi
hostapd
baru akan sangat sederhana:
hw_mode=a
termasuk band 5 GHz, dan
ieee80211ac=1
termasuk 802.11ac (VHT). Opsi
ieee80211d=1
dengan
country_code=US
menentukan domain pengaturan di mana kami beroperasi.
Untuk memanfaatkan bandwidth secara
ht_capab
,
ht_capab
dan
vht_capab
harus mencerminkan kemampuan peralatan:
$ iw list ... Band 1: Capabilities: 0x19e3 RX LDPC HT20/HT40 Static SM Power Save RX HT20 SGI RX HT40 SGI TX STBC RX STBC 1-stream Max AMSDU length: 7935 bytes DSSS/CCK HT40 ... Band 2: VHT Capabilities (0x338001b2): Max MPDU length: 11454 Supported Channel Width: neither 160 nor 80+80 RX LDPC short GI (80 MHz) TX STBC RX antenna pattern consistency TX antenna pattern consistency
Dengan mengingat hal ini,
inilah hostapd.conf
terakhir :
$ cat /etc/hostapd/hostapd.conf
Lihat hostpad.conf
dokumentasi di /usr/share/doc/hostapd/examples/hostapd.conf
.
Pada titik ini, router nirkabel sepenuhnya operasional, dan jika Anda memerlukan konfigurasi yang lebih kompleks, maka sekarang Anda dapat masuk ke file konfigurasi.
Mengkonfigurasi SSID virtual menggunakan hostapd
Terlepas dari apakah Anda ingin mengonfigurasi titik akses tamu atau jaringan nirkabel khusus untuk VPN Anda, pada titik tertentu Anda harus mengonfigurasi SSID virtual.
Bagan
Berdasarkan
konfigurasi saat ini , berikut adalah diagram terbaru dari apa yang ingin kami dapatkan. Dengan asumsi
wlp5s0
adalah antarmuka nirkabel fisik, SSID virtual akan bekerja pada antarmuka virtual
wlan0
menggunakan subnet
192.168.2.0/24
sendiri:

Persiapan
Pertama, periksa apakah perangkat nirkabel Anda mendukung beberapa SSID:
$ iw list ... valid interface combinations: *
Seperti yang Anda lihat, chipset mendukung hingga delapan titik akses pada satu saluran. Ini berarti Anda dapat mengonfigurasi hingga tujuh SSID virtual, dan semuanya akan berfungsi pada saluran yang sama.
Antarmuka jaringan
Menurut dokumentasi di hostapd.conf, ada koneksi yang ketat antara alamat MAC dari antarmuka fisik dan BSSID dari antarmuka virtual:
hostapd akan menghasilkan topeng BSSID berdasarkan pada BSSID yang dikonfigurasi. hostapd akan memverifikasi bahwa dev_addr & MASK == dev_addr . Jika ini bukan masalahnya, alamat MAC radio harus diubah sebelum memulai hostapd. Jika BSSID dikonfigurasi untuk setiap BSS sekunder, batasan ini tidak diterapkan di hostapd dan masker lain dapat digunakan jika driver mendukungnya (mis., Menukar bit yang dikelola secara lokal)
BSSID ditugaskan untuk setiap BSS, kecuali BSSID eksplisit ditentukan menggunakan parameter 'bssid'.
Jika BSSID eksplisit ditentukan, ia harus dipilih sedemikian rupa sehingga:
- menghasilkan MASKER yang valid yang mencakupnya dan dev_addr
- tidak sama dengan alamat MAC radio
- tidak sama dengan BSSID lainnya yang ditentukan secara eksplisit
Untuk memenuhi persyaratan ini dan memungkinkan
hostapd
secara otomatis menetapkan BSSID dari antarmuka virtual, kami memperbarui alamat MAC dari antarmuka nirkabel fisik dengan menghilangkan empat bit paling tidak signifikan. Ini cukup untuk 15 BSSID virtual - lebih dari yang diperlukan.
Pertama, tentukan alamat MAC saat ini:
$ ip addr show wlp5s0 | grep link | awk '{print $2}' 44:c3:06:00:03:eb
Jika Anda menghapus empat bit terakhir dan mengatur bit
U / L , Anda mendapatkan alamat MAC
46:c3:06:00:03:e0
.
Sekarang kami akan memperbarui konfigurasi untuk menetapkan alamat MAC yang benar tepat sebelum memuat antarmuka, dan juga mendeklarasikan antarmuka nirkabel virtual sesuai dengan diagram kami:
$ cat /etc/network/interfaces ...
Bagus Saya menggunakan
dnsmasq
sebagai server DHCP - jangan ragu untuk mengganti dengan apa pun yang Anda suka. Harap perhatikan bahwa agar antarmuka virtual berfungsi dengan benar,
allow-hotplug
diperlukan.
Konfigurasi Titik Akses
Sekarang yang paling sederhana: tambahkan SSID virtual ke konfigurasi
hostapd
saat ini. Tambahkan saja ini
di akhir file
hostapd.conf
ada:
$ cat /etc/hostapd/hostapd.conf ...
Dalam contoh saya menggunakan enkripsi WPA2, tetapi sebagian besar opsi antarmuka radio tersedia di sini (misalnya,
channel
). Anda dapat menambahkan lebih banyak SSID virtual dengan hanya menambahkan baris dalam file konfigurasi sesuai dengan antarmuka virtual yang dinyatakan dan dikonfigurasi dengan benar.
Sekarang reboot - dan lihat SSID baru Anda bersama dengan antarmuka nirkabel baru (perhatikan alamat MAC):
$ ip addr show wlan0 | grep link | awk '{print $2}' 46:c3:06:00:03:e1
Itu dia teman-teman!