Menggunakan Raspberry Pi sebagai router?

50

Adakah yang menggunakan Raspberry Pi sebagai perangkat perutean?

Terutama saya ingin menggunakannya untuk memonitor jaringan saya, dan akan lebih bagus jika memiliki input dan output untuk Ethernet, tetapi tidak, jadi saya bertanya-tanya apakah sangat efektif untuk memonitor jaringan dengan memiliki input Ethernet dan kemudian menggunakan dongle USB sebagai router Wi-Fi. Adakah yang melakukan hal seperti ini? Apakah Internet memperlambat banyak?

Clifgray
sumber
3
Tergantung seberapa cepat koneksi internet Anda. Tambang saya 100MB, jadi saya cukup yakin itu akan memperlambatnya;)
John La Rooy
3
Saya sudah memiliki koneksi internet 30Mbps, dan saat ini dengan lalu lintas 5Mbps, raspberry pi inline saya dengan snort menghabiskan ~ 50-95% CPU dan 85% memori. Pengaturan saya belum selesai, tetapi saya ingin menunjukkan beberapa angka nyata.
Pipa
tidak ada yang tahu bagaimana alokasi badwidth bekerja dengan router yang disesuaikan menggunakan raspberry pi? seperti, saya punya kecepatan koneksi internet 3Mbps, saya punya 10 pengguna. dapatkah Anda menjelaskan bagaimana hal itu akan dibagi? kecepatan 3Mbps. Terima kasih. Semoga kamu mengerti. :)
kirbs
2
Halo kirb. Harap jangan mengajukan pertanyaan pada pertanyaan lain. Alih-alih buka pertanyaan baru dengan tautan Ajukan Pertanyaan di bagian atas halaman. Terima kasih.
Mungkin ini? learn.adafruit.com/…
zengr

Jawaban:

30

Saya telah menggunakan model B saya sebagai router dengan traffic traffic, hanya menggunakan satu port Ethernet. Inilah cara cepat dan kotor tentang caranya:

  1. Aktifkan Penerusan IPv4 , sehingga Pi Anda bertindak sebagai router dengan meneruskan lalu lintas yang diterimanya
  2. Konfigurasikan Pi Anda dengan konfigurasi jaringan statis sehingga tidak akan dipengaruhi oleh perubahan DHCP yang disarankan di bawah ini. Berikut ini isi /etc/network/interfacesreferensi saya sebagai:

    # pi@flux:/home/pi/projects/adsl/rrdlogger (master *)
    # cat /etc/network/interfaces 
    auto lo
    
    iface lo inet loopback
    #iface eth0 inet dhcp
    iface eth0 inet static
            address 192.168.1.1
            netemask 255.255.255.0
            gateway 192.168.1.254    # IP of my ADSL router box
    
    allow-hotplug wlan0
    iface wlan0 inet manual
    wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
    iface default inet dhcp
    
  3. Sekarang ubah pengaturan DHCP jaringan Anda sehingga gateway / router default adalah Pi Anda. Ini kemungkinan berarti mengubah pengaturan pada kotak router ADSL Anda yang ada. Dalam contoh saya di atas, alamat IP Pi saya adalah 192.168.1.1.

Ketika perangkat Anda kembali terhubung ke jaringan, mereka akan diberi tahu Pi Anda adalah gerbang mereka ke internet, dan semua lalu lintas yang terikat internet akan dikirim ke sana. Pi Anda pada gilirannya akan menyampaikan semua lalu lintas itu ke router Anda yang biasa. Anda mungkin perlu memutuskan koneksi dan kemudian menghubungkan kembali perangkat Anda agar perubahan ini berlaku.

Sekarang Anda dapat membuat atau menginstal alat untuk melakukan pemantauan untuk Anda, seperti vnstat .

Traffic Shaping

Adapun traffic shaping, inilah panduan cepat kotor-dan-lain yang akan memanfaatkan varian pribadi saya sendiri wondershaper .

Agar ini bermanfaat, Anda perlu tahu seberapa cepat koneksi internet Anda. Anda biasanya dapat menemukan ini dari antarmuka web router (asli) Anda, tetapi gagal bahwa Anda bisa mendapatkan perkiraan menggunakan speedtest .

  1. sudo apt-get install iptables
  2. wget https://raw.github.com/meermanr/adsl/master/wondershaper/wondershaper
  3. sudo ./wondershaper eth0akan mencetak status pembentukan lalu lintas saat ini. Jelas status yang diharapkan adalah tidak ada pembentukan, yang berarti ada aturan tunggal yang berlaku, yang disebut pfifo_fast:

    • ( eth0adalah nama adaptor jaringan kabel pada model B. Lihat ifconfiguntuk nama antarmuka pada sistem Anda)
    # pi@flux:/home/pi/projects/adsl/wondershaper (master *)
    # sudo ./wondershaper eth0
    qdisc pfifo_fast 0: root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
     Sent 1908 bytes 15 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0
    
  4. sudo ./wondershaper eth0 3000 370di mana:

    • 3000adalah kecepatan downlink koneksi internet saya di kbit . Jadi 3Mbit == 3000kbit
    • 370 adalah kecepatan uplink koneksi internet saya, dalam kbit lagi.
  5. sudo ./wondershaper eth0 seharusnya sekarang menampilkan lebih banyak output:

    # pi@flux:/home/pi/projects/adsl/wondershaper (master *)
    # sudo ./wondershaper eth0
    qdisc htb 1: root refcnt 2 r2q 10 default 0 direct_packets_stat 0
     Sent 1858 bytes 9 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0 
    qdisc sfq 40: parent 1:40 limit 127p quantum 1526b depth 127 divisor 1024 perturb 10sec 
     Sent 1858 bytes 9 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0 
    qdisc sfq 10: parent 1:10 limit 127p quantum 1526b depth 127 divisor 1024 perturb 10sec 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0 
    qdisc sfq 20: parent 1:20 limit 127p quantum 1526b depth 127 divisor 1024 perturb 10sec 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0 
    qdisc sfq 30: parent 1:30 limit 127p quantum 1526b depth 127 divisor 1024 perturb 10sec 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0 
    qdisc ingress ffff: parent ffff:fff1 ---------------- 
     Sent 768 bytes 12 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0 
    class htb 1:1 root rate 370000bit ceil 370000bit burst 10Kb cburst 1599b 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     rate 0bit 0pps backlog 0b 0p requeues 0 
     lended: 0 borrowed: 0 giants: 0
     tokens: 3459453 ctokens: 540531
    
    class htb 1:10 parent 1:1 leaf 10: prio 1 rate 370000bit ceil 370000bit burst 1599b cburst 1599b 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     rate 0bit 0pps backlog 0b 0p requeues 0 
     lended: 0 borrowed: 0 giants: 0
     tokens: 540531 ctokens: 540531
    
    class htb 1:20 parent 1:1 leaf 20: prio 2 rate 246000bit ceil 246000bit burst 1599b cburst 1599b 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     rate 0bit 0pps backlog 0b 0p requeues 0 
     lended: 0 borrowed: 0 giants: 0
     tokens: 813000 ctokens: 813000
    
    class htb 1:30 parent 1:1 leaf 30: prio 3 rate 74000bit ceil 74000bit burst 1599b cburst 1599b 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     rate 0bit 0pps backlog 0b 0p requeues 0 
     lended: 0 borrowed: 0 giants: 0
     tokens: 2702687 ctokens: 2702687
    
    class htb 1:40 root leaf 40: prio 0 rate 100000Kbit ceil 100000Kbit burst 512Kb cburst 1600b 
     Sent 3486 bytes 15 pkt (dropped 0, overlimits 0 requeues 0) 
     rate 0bit 0pps backlog 0b 0p requeues 0 
     lended: 15 borrowed: 0 giants: 0
     tokens: 654609 ctokens: 1250
    

Lalu lintas jaringan keluar Anda sekarang sedang dibentuk oleh Pi Anda, dan lalu lintas masuk Anda sedang sedikit diperketat untuk memastikan bahwa Pi, dan bukan kotak perutean asli Anda, memiliki kendali atas lalu lintas.

Untuk menonaktifkan pembentukan, jalankan saja sudo ./wondershaper eth0 clear. Anda dapat mengubah tingkat uplink dan downlink tanpa membersihkan terlebih dahulu, tetapi tidak ada salahnya.

Pembaruan: Anda juga harus menonaktifkan transmisi pengalihan ICMP , karena kami membutuhkan semua lalu lintas untuk melewati Pi agar pembentukan dapat terjadi. Ternyata kernel Linux cukup pintar untuk mengetahui bahwa klien di jaringan rumah Anda dapat berbicara langsung ke kotak ADSL, daripada memantulkan lalu lintas melalui Pi, dan memberitahu mereka hal ini di setiap kesempatan. Klien kemudian mengirimkan lalu lintas mereka langsung ke kotak ADSL Anda, dan Pi tidak mendapatkan kesempatan untuk membentuknya. Nonaktifkan dengan cepat seperti itu (hilang saat Anda reboot berikutnya):

echo 0 | sudo tee /proc/sys/net/ipv4/conf/*/send_redirects

Perbarui yang berikut untuk mengatur ini saat boot: /etc/sysctl.conf

net/ipv4/conf/eth0/send_redirects = 0

(Terima kasih kepada https://unix.stackexchange.com/a/58081/22537 untuk tip ini)

Anda mungkin juga tertarik dengan catatan pribadi saya tentang mengkonfigurasi gateway Linux: http://www.robmeerman.co.uk/unix/gateway

RobM
sumber
bagaimana Anda mengatur nama dan kata sandi jaringan wifi yang dapat disambungkan oleh perangkat lain?
fommil
Panduan yang bagus. Namun saya memiliki pertanyaan tentang wondershapersaran Anda : apakah batas per-klien atau keseluruhan?
Bob
@fommil: Panduan saya di atas mengasumsikan Anda masih menggunakan modem / router / titik akses WiFi yang diberikan ISP Anda, tetapi Anda mengkonfigurasinya sedemikian rupa sehingga semua klien yang terhubung diberi tahu "Kirim lalu lintas ke Pi". Ini biasanya dilakukan dengan memasukkan alamat IP Pi (statis!) Anda ke pengaturan DHCP kotak ISP Anda. Biasanya di bidang yang disebut "Gateway", "Gateway Default", atau mungkin "Rute default".
RobM
@ Bob: Angka yang Anda masukkan adalah total untuk tautan internet Anda. Script wonderershaper daripada upaya untuk membagikan ini secara adil kepada semua klien Anda berdasarkan permintaan . Jadi, jika hanya satu klien yang menggunakan internet, ia harus mendapatkan 100% dari itu. Jika klien lain memulai mereka akan, setelah sedikit "waktu penyelesaian" (~ 10 detik) berakhir dengan menggunakan masing-masing 50%, dan seterusnya.
RobM
Sempurna. Hanya sebuah catatan untuk @fommil, tidak ada router saya (dan saya berasumsi banyak lagi yang sama) memberikan cara mudah untuk mengatur gateway yang ditetapkan melalui DHCP. Saya akhirnya mematikan DHCP pada router dan mengatur server DHCP pada Pi - ini adalah proses yang cukup sederhana (mencari panduan jika Anda mau).
Bob
10

Memiliki sedikit latar belakang jaringan, hal pertama yang terlintas dalam pikiran adalah menggunakannya sebagai kotak Snort, dan kemudian Anda tidak perlu khawatir hanya memiliki satu antarmuka. Anda akan mengatur switch / router Anda untuk meneruskan semua lalu lintas ke Pi, tetapi juga meneruskannya ke perangkat akhir. Ini dikenal sebagai monitor switchport, tetapi perangkat Anda mungkin tidak mendukungnya. Anda mungkin memerlukan sakelar yang dikelola untuk melakukan ini. Snort kemudian akan menganalisis lalu lintas dan melaporkannya. Informasi lebih lanjut tentang Snort http://www.snort.org/

Yang menyenangkan tentang pengaturan semacam ini adalah Pi Anda duduk di samping menonton semua yang dijalankan melalui saklar, daripada duduk sejajar dengan data. Jika Anda memiliki kesalahan perangkat lunak dengan cara ini, lalu lintas masih dapat mengalir, tidak terpantau. Dengan apa yang Anda gambarkan dengan dua antarmuka, program Anda macet, jaringan Anda macet.

Ini tidak menggunakan pi sebagai router, tetapi memungkinkan Anda untuk memonitor dan melaporkan lalu lintas yang bergerak di jaringan Anda.

Mentega
sumber
7

Saya telah menggunakan Raspberry Pi untuk routing, dan itu bekerja dengan baik. Seperti yang Anda katakan, Anda memerlukan setidaknya satu antarmuka jaringan lagi, karena Raspberry Pi hanya memiliki satu port Ethernet. Anda dapat menambahkan antarmuka lain yang terhubung ke port USB. Saya telah menggunakan modem GSM dan tongkat Wi-Fi.

Hal yang perlu diperhatikan:

  • Gunakan hub USB yang aktif. Perangkat Wi-Fi dan GSM menuntut lebih banyak daya daripada apa yang dapat disediakan oleh port USB Raspberry Pi.
  • Jika Anda berbelanja untuk perangkat Wi-Fi, dapatkan satu dengan dukungan Linux yang baik. Anda ingin yang berfungsi dalam mode titik akses, dan tidak semua tongkat melakukannya. Periksa di linuxwireless.org .

Ini adalah posting blog saya tentang perutean, dan yang lainnya tentang pengaturan titik akses Wi-Fi . Panduan ini membantu saya dengan pengaturan perutean. Hal-hal perutean tidak terlalu spesifik untuk Raspberry Pi; apa pun yang bekerja di Linux secara umum harus dimungkinkan. Detailnya sedikit bergantung pada distribusi mana yang Anda gunakan.

Frepa
sumber
4

Saya telah menggunakan Raspberry Pi sebagai router selama sekitar satu bulan sekarang, tanpa masalah. Saya memiliki Port Akses Wi-Fi komersial yang sebenarnya, bukan router Wi-Fi rumah, jadi saya menggunakannya. Saya juga memiliki konverter USB-to-Ethernet yang "dipinjam" dari Wii. Itu masuk ke LAN rumah, dan Raspberry Pi built-in Ethernet pergi ke WAN / Internet.

Dapatkan salinan IPFire untuk Raspberry Pi. Anda menginginkan versi ARM, tanpa konsol serial dan versi stabil terbaru. Klik pada tab ARM. Unduh "Gambar untuk arsitektur armv5tel".

Boot itu. Hubungkan TV dan keyboard HDMI. Jawab beberapa pertanyaan pertama. Konfigurasi lainnya dapat dilakukan dari browser di jaringan rumah, jadi Anda tidak akan memerlukan TV atau keyboard setelah itu.

Itu tidak terlalu sulit, dan bekerja seperti jagoan! Berikut adalah instruksi resmi: http://wiki.ipfire.org/en/hardware/arm/rpi

Satu hal terakhir. Jika Anda akan menggunakan dongle Wi-Fi bertenaga USB, periksa catu daya Raspberry Pi Anda. Catu daya USB 700 mA mungkin cukup untuk memberi daya pada Raspberry Pi, tetapi tidak banyak memberi daya pada Wi-Fi. Baik menggunakan hub USB aktif, atau daya Raspberry Pi dengan catu daya USB 1 hingga 2.
Semoga berhasil!

Bruce Kives
sumber
1

(Tambahan ini mengikuti jawaban saya sebelumnya , yang merupakan panduan tentang cara mengkonfigurasi Pi Anda sebagai gateway internet LAN Anda)

Tidak puas dengan memantau keseluruhan penggunaan internet saya, saya telah menulis alat yang memantau penggunaan internet setiap perangkat di LAN saya. Ini memungkinkan saya untuk melihat penggunaan instan di jendela konsol, dan untuk menghasilkan grafik penggunaan historis sehingga saya bisa melihat apa yang terjadi dalam semalam.


Rhodes , alat untuk memonitor penggunaan jaringan LAN secara real-time dan historis (berdasarkan alamat MAC): https://github.com/meermanr/adsl/tree/master/rhodes

Contoh output konsol:

193 kiB/s TX     17 kiB/s RX   0004edbf98c0   home.gateway (Billion Electric Co.)
  0 kiB/s TX      0 kiB/s RX   2002af18dc15   Samsung Galaxy Tab 10.1, Vicky
  0 kiB/s TX      0 kiB/s RX   34af2c01197b   Nintendo 3DS:XL, Robert
  0 kiB/s TX      0 kiB/s RX   34af2c3af204   Nintendo 3DS:XL, Vicky
  0 kiB/s TX      0 kiB/s RX   34af2c9cfffd   Nintendo WiiU
  0 kiB/s TX      0 kiB/s RX   6045bd9c9dbc   Xbox360 Slim
  0 kiB/s TX      0 kiB/s RX   745e1c56c297   Pioneer SX-LX57
 13 kiB/s TX    109 kiB/s RX   7831c1be0c34   Az Pro (Macbook Pro)
  0 kiB/s TX      0 kiB/s RX   80ea96e6214e   Roberts-AirPort-Time-Capsule
  0 kiB/s TX      0 kiB/s RX   88308a770370   Samsung Galaxy S3, Vicky
189 kiB/s TX    211 kiB/s RX   b827eb8fc0f3   Flux (Raspberry Pi)
  2 kiB/s TX     39 kiB/s RX   b8e8563acb34   Macbook Pro, Vicky
  0 kiB/s TX      0 kiB/s RX   d022be2c26ef   Samsung Galaxy Note 3, Rob
  0 kiB/s TX      0 kiB/s RX   f82fa89368ea

Kolom pertama menunjukkan berapa banyak perangkat yang melakukan transmisi, yang biasanya berarti mengunggah ke internet. Pengecualian untuk hal ini adalah router ADSL itu sendiri (home.gateway dalam contoh di atas) yang mentransmisikan data yang diterima dari ISP perangkat yang memintanya (yaitu unduhan). Tentu saja ia juga mengirimkan unggahan ke internet, tetapi ia melakukannya dengan menggunakan modem ADSL-nya, yang tidak ada di LAN sehingga tidak terlihat oleh alat ini.

Pengecualian lainnya adalah Raspberry Pi ("Flux" di atas) itu sendiri, yang tentu saja mentransmisikan semua data yang dikelolanya, di kedua arah.

Namun terlepas dari pengecualian itu, nomor TX (transmit) merujuk ke unggahan, dan nomor RX (terima) untuk diunduh. Kolom ketiga adalah alamat MAC perangkat (tanpa pemisah ":" atau "-" yang biasa). Kolom keempat menunjukkan nama perangkat yang dapat dibaca manusia, jika diketahui.

Grafik dihasilkan dengan menjalankan ./index.py, yang dimaksudkan untuk dipanggil dari server web seperti lighttpd(dengan index.pyditambahkan ke index-file.namespengaturan konfigurasi di /etc/lighttpd/lighttpd.conf). Anda bisa menjalankannya secara manual, dan itu akan menghasilkan beberapa gambar dan mencetak HTML ke STDOUT. Jadi, Anda ingin mengarahkan kembali ke file yang dapat Anda buka di browser:

./index.py > index.html

Kemudian buka index.html di browser pilihan Anda.

Persyaratan instalasi (semua dapat diinstal dengan apt-get install):

  • tcpdump - Alat baris perintah untuk menangkap dan menggambarkan lalu lintas jaringan
  • rrdtool - Alat Basis Data Round Robin, catatan, dan grafik data deret waktu
  • rrdcached - Round Robin Database Caching Daemon, layanan yang mengurangi overhead ketika bekerja bersamaan dengan beberapa file RRD.
  • pypy-upstream (implementasi cepat bahasa pemrograman Python)

    • Anda dapat menggunakan stok Python sesuka Anda: python rhodes.py( pypyadalah implementasi alternatif dari bahasa pemrograman Python yang melakukan Kompilasi Just-In-Time (JIT), sehingga skrip yang berjalan lama akan menggunakan lebih sedikit siklus CPU dengan biaya lebih banyak memori)

Catatan penggunaan : Alat 'tcpdump' yang digunakan oleh skrip ini membutuhkan hak akses root untuk mengakses lalu lintas jaringan mentah. Ini dicapai dengan meluncurkan sudo tcpdumpketika skrip dimulai, sehingga Anda mungkin diminta untuk memasukkan kata sandi Anda. Secara pribadi, saya telah menambahkan aturan NOPASSWD /etc/sudoersjadi saya tidak pernah diminta.

RobM
sumber