Sử dụng Raspberry Pi làm bộ định tuyến?


50

Có ai đã sử dụng Raspberry Pi của họ như một thiết bị định tuyến chưa?

Chủ yếu tôi muốn sử dụng nó để giám sát mạng của mình và thật tuyệt nếu nó có đầu vào và đầu ra cho Ethernet, nhưng không, vì vậy tôi tự hỏi liệu có hiệu quả khi giám sát mạng bằng cách có đầu vào Ethernet không và sau đó sử dụng khóa USB làm bộ định tuyến Wi-Fi. Có ai đã làm bất cứ điều gì như thế này? Nó có làm chậm Internet nhiều không?


3
Phụ thuộc vào tốc độ kết nối internet của bạn. Của tôi là 100Mb, vì vậy tôi khá chắc chắn rằng nó sẽ làm chậm nó;)
John La Rooy

3
Tôi đã có kết nối internet 30Mbps và tại thời điểm này với lưu lượng 5Mbps, pi mâm xôi nội tuyến của tôi với snort đang tiêu tốn ~ 50-95% CPU và 85% bộ nhớ. Thiết lập của tôi chưa được điều chỉnh, nhưng tôi muốn cho bạn thấy một số số liệu thực sự.
Ống

Có ai không làm thế nào phân bổ băng thông làm việc với một bộ định tuyến tùy chỉnh bằng cách sử dụng raspberry pi? Tôi có tốc độ kết nối internet 3Mbps, tôi có 10 người dùng. bạn có thể giải thích nó sẽ được chia như thế nào? tốc độ 3Mbps. Cảm ơn. Mong là bạn hiểu. :)
kirbs

2
Xin chào kirbs. Xin vui lòng không hỏi một câu hỏi về một câu hỏi khác. Thay vào đó hãy mở một câu hỏi mới với liên kết Hỏi Câu hỏi ở đầu trang. Cảm ơn bạn.

Có lẽ điều này? tìm hiểu.adaf nhung.com / từ
zengr

Câu trả lời:


30

Tôi đã sử dụng mô hình B của mình như một bộ định tuyến với định hình lưu lượng truy cập, chỉ sử dụng một cổng Ethernet mà nó đi kèm. Đây là một cách nhanh chóng và bẩn thỉu về cách:

  1. Kích hoạt chuyển tiếp IPv4 , do đó Pi của bạn hoạt động như một bộ định tuyến bằng cách chuyển tiếp bất kỳ lưu lượng truy cập nào nó nhận được
  2. Định cấu hình Pi của bạn với cấu hình mạng tĩnh để nó không bị ảnh hưởng bởi các thay đổi DHCP được đề xuất bên dưới. Dưới đây là nội dung của tôi /etc/network/interfaceslàm tài liệu tham khảo:

    # 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. Bây giờ thay đổi cài đặt DHCP của mạng sao cho cổng / bộ định tuyến mặc định là Pi của bạn. Điều này có thể có nghĩa là thay đổi cài đặt trên hộp bộ định tuyến ADSL hiện tại của bạn. Trong ví dụ của tôi ở trên, địa chỉ IP của Pi của tôi là 192.168.1.1.

Khi thiết bị của bạn kết nối lại với mạng tiếp theo, chúng sẽ được thông báo rằng Pi của bạn là cổng vào internet và tất cả lưu lượng truy cập qua internet sẽ được gửi đến mạng. Pi của bạn sẽ lần lượt chuyển tiếp tất cả lưu lượng truy cập đến bộ định tuyến thông thường của bạn. Bạn có thể cần ngắt kết nối và sau đó kết nối lại thiết bị của mình để những thay đổi này có hiệu lực.

Bây giờ bạn có thể tạo hoặc cài đặt một công cụ để thực hiện giám sát cho bạn, chẳng hạn như vnstat .

Điều hướng giao thông

Đối với việc định hình lưu lượng truy cập, đây là một hướng dẫn nhanh và bẩn khác sẽ sử dụng biến thể wonderershaper của riêng tôi .

Để điều này trở nên hữu ích, bạn cần biết tốc độ kết nối internet của mình nhanh như thế nào. Bạn thường có thể tìm thấy điều này từ giao diện web của bộ định tuyến (bản gốc), nhưng không thể ước tính được bằng cách sử dụng speedtest .

  1. sudo apt-get install iptables
  2. wget https://raw.github.com/meermanr/adsl/master/wondershaper/wondershaper
  3. sudo ./wondershaper eth0sẽ in trạng thái hiện tại của hình dạng giao thông. Rõ ràng trạng thái dự kiến ​​là không có hình dạng, có nghĩa là có một quy tắc duy nhất có hiệu lực, được gọi là pfifo_fast:

    • ( eth0là tên của bộ điều hợp mạng có dây trên model B. Xem ifconfigtên các giao diện trên hệ thống của bạn)
    # 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 370, Ở đâu:

    • 3000là tốc độ đường xuống của kết nối internet của tôi tính bằng kbit . Vậy 3Mbit == 3000kbit
    • 370 là tốc độ đường lên của kết nối internet của tôi, tính bằng kbit một lần nữa.
  5. sudo ./wondershaper eth0 Bây giờ sẽ hiển thị nhiều đầu ra hơn:

    # 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
    

Lưu lượng truy cập mạng bên ngoài của bạn hiện đang được định hình bởi Pi của bạn và lưu lượng truy cập trong nước của bạn đang được điều chỉnh một chút để đảm bảo rằng Pi, chứ không phải hộp định tuyến ban đầu của bạn, có quyền kiểm soát lưu lượng.

Để vô hiệu hóa định hình, chỉ cần chạy sudo ./wondershaper eth0 clear. Bạn có thể thay đổi tốc độ đường lên và đường xuống mà không cần xóa trước, nhưng điều đó không gây hại.

Cập nhật: Bạn cũng cần phải vô hiệu hóa việc truyền các chuyển hướng ICMP , vì chúng ta cần tất cả lưu lượng truy cập để đi qua Pi để định hình xảy ra. Hóa ra nhân Linux đủ thông minh để nhận ra rằng các máy khách trên mạng gia đình của bạn có thể nói chuyện trực tiếp với hộp ADSL, thay vì trả lại lưu lượng truy cập thông qua Pi và nó cho họ biết điều này mọi lúc. Các khách hàng sau đó gửi lưu lượng truy cập của họ trực tiếp đến hộp ADSL của bạn và Pi không có cơ hội định hình nó. Vô hiệu hóa nó một cách nhanh chóng (mất khi bạn khởi động lại lần sau):

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

Cập nhật thông tin sau để thiết lập tính năng này trong khi khởi động: /etc/sysctl.conf

net/ipv4/conf/eth0/send_redirects = 0

(Cảm ơn https://unix.stackexchange.com/a/58081/22537 cho mẹo này)

Bạn cũng có thể quan tâm đến các ghi chú cá nhân của tôi về cách định cấu hình cổng Linux: http://www.robmeerman.co.uk/unix/gateway


Làm thế nào để bạn đặt tên và mật khẩu mạng wifi mà các thiết bị khác có thể kết nối?
fommil

Một hướng dẫn tuyệt vời. Tôi có một câu hỏi về wondershaperđề xuất của bạn , mặc dù: là giới hạn cho mỗi khách hàng hoặc tổng thể?
Bob

@fommil: Hướng dẫn của tôi ở trên giả định rằng bạn vẫn sử dụng modem / bộ định tuyến / điểm truy cập WiFi mà ISP cung cấp cho bạn, nhưng bạn định cấu hình nó sao cho tất cả các máy khách kết nối được thông báo "Gửi lưu lượng đến Pi". Điều này thường được thực hiện bằng cách nhập địa chỉ IP (tĩnh!) Của Pi vào cài đặt DHCP của hộp ISP của bạn. Thông thường trong một trường được gọi là "Cổng", "Cổng mặc định" hoặc có thể là "Tuyến mặc định".
RobM

@Bob: Số bạn nhập là tổng số cho liên kết internet của bạn. Kịch bản wonderershaper hơn là cố gắng chia sẻ công bằng điều này cho tất cả khách hàng của bạn dựa trên nhu cầu . Vì vậy, nếu chỉ có một khách hàng đang sử dụng internet, họ sẽ nhận được 100%. Nếu một khách hàng khác khởi động, họ sẽ, sau một chút "thời gian giải quyết" (~ 10 giây) cuối cùng sẽ sử dụng 50% mỗi lần, v.v.
RobM

Hoàn hảo. Chỉ cần một lưu ý cho @fommil, không có bộ định tuyến nào của tôi (và tôi cho rằng nhiều bộ khác giống nhau) cung cấp một cách dễ dàng để đặt cổng được gán qua DHCP. Cuối cùng tôi đã tắt DHCP trên bộ định tuyến và thiết lập máy chủ DHCP trên Pi - đó là một quá trình khá đơn giản (tìm kiếm hướng dẫn nếu bạn muốn).
Bob

10

Có một nền tảng mạng nhỏ, điều đầu tiên bạn nghĩ đến là sử dụng nó như một hộp Snort, và sau đó bạn không phải lo lắng về việc chỉ có một giao diện. Bạn sẽ thiết lập công tắc / bộ định tuyến của mình để chuyển tiếp tất cả lưu lượng truy cập đến Pi, nhưng cũng chuyển nó vào thiết bị cuối. Điều này được gọi là màn hình tổng đài, nhưng thiết bị của bạn có thể không hỗ trợ nó. Bạn có thể cần một công tắc được quản lý để làm điều này. Snort sau đó sẽ phân tích lưu lượng và báo cáo về nó. Thêm thông tin về Snort http://www.snort.org/

Điều thú vị về kiểu thiết lập này là Pi của bạn đang ngồi bên cạnh xem mọi thứ đang được chạy qua công tắc, thay vì ngồi nội tuyến với dữ liệu. Nếu bạn có một phần mềm trục trặc theo cách này, lưu lượng truy cập vẫn có thể chảy, chỉ cần không được theo dõi. Với những gì bạn đang mô tả với hai giao diện, chương trình của bạn gặp sự cố, mạng của bạn gặp sự cố.

Điều này không sử dụng pi như một bộ định tuyến, nhưng cho phép bạn giám sát và báo cáo về lưu lượng truy cập đang di chuyển trên mạng của bạn.


7

Tôi đã sử dụng Raspberry Pi để định tuyến và nó hoạt động tốt. Như bạn nói, bạn cần ít nhất một giao diện mạng nữa, vì Raspberry Pi chỉ có một cổng Ethernet. Bạn có thể thêm một giao diện khác được kết nối với cổng USB. Tôi đã sử dụng modem GSM và thanh Wi-Fi.

Những điều cần lưu ý:

  • Sử dụng bộ chia USB được cấp nguồn. Các thiết bị Wi-Fi và GSM cần nhiều năng lượng hơn so với những gì các cổng USB của Raspberry Pi có thể cung cấp.
  • Nếu bạn mua thiết bị Wi-Fi, hãy mua một thiết bị hỗ trợ Linux tốt. Bạn muốn một cái hoạt động trong chế độ điểm truy cập, và không phải cái gậy nào cũng làm được. Kiểm tra tại linuxw dũng.org .

Đây là bài viết trên blog của tôi về định tuyến và một bài khác về việc thiết lập điểm truy cập Wi-Fi . Hướng dẫn này đã giúp tôi với các thiết lập định tuyến. Các công cụ định tuyến không đặc biệt cho Raspberry Pi; mọi thứ hoạt động trên Linux nói chung đều có thể. Các chi tiết phụ thuộc một chút vào phân phối mà bạn sử dụng.


4

Tôi đã sử dụng Raspberry Pi như một bộ định tuyến khoảng một tháng nay, không có vấn đề gì. Tôi có một Cổng truy cập Wi-Fi thương mại thực tế, không phải là bộ định tuyến Wi-Fi gia đình, vì vậy tôi đã sử dụng nó. Tôi cũng có một bộ chuyển đổi USB sang Ethernet được "mượn" từ Wii. Điều đó đi đến mạng LAN gia đình và Ethernet tích hợp của Raspberry Pi sẽ chuyển sang mạng WAN / Internet.

Đi lấy một bản sao của IPFire cho Raspberry Pi. Bạn muốn phiên bản ARM, không có giao diện điều khiển nối tiếp và phiên bản ổn định mới nhất. Nhấp vào tab ARM. Tải xuống "Hình ảnh cho kiến ​​trúc armv5tel".

Khởi động nó. Kết nối TV HDMI và bàn phím. Trả lời một vài câu hỏi đầu tiên. Phần còn lại của cấu hình có thể được thực hiện từ một trình duyệt trên mạng gia đình, do đó bạn sẽ không cần TV hoặc bàn phím sau đó.

Nó không quá khó, và làm việc như một nhà vô địch! Dưới đây là hướng dẫn chính thức: http://wiki.ipfire.org/en/hardware/arm/rpi

Một điều cuối cùng. Nếu bạn định sử dụng khóa Wi-Fi được hỗ trợ USB, hãy kiểm tra nguồn điện của Raspberry Pi. Bộ nguồn USB 700 mA có thể đủ để cung cấp năng lượng cho Raspberry Pi, nhưng nó không để lại nhiều năng lượng cho Wi-Fi. Sử dụng bộ chia USB được cấp nguồn hoặc cấp nguồn cho Raspberry Pi bằng nguồn điện USB 1 đến 2 A.
Chúc may mắn!


1

(Phần phụ lục này tuân theo câu trả lời trước của tôi , đây là hướng dẫn về cách định cấu hình Pi của bạn làm cổng internet LAN của bạn)

Không có nội dung giám sát việc sử dụng internet tổng thể của tôi , tôi đã viết một công cụ giám sát việc sử dụng internet của từng thiết bị trên mạng LAN của tôi. Điều này cho phép tôi thấy việc sử dụng tức thời trong cửa sổ giao diện điều khiển và tạo các biểu đồ sử dụng lịch sử để tôi có thể thấy những gì đã xảy ra qua đêm.


Rhodes , một công cụ để theo dõi việc sử dụng mạng LAN thời gian thực và lịch sử của các thiết bị LAN (dựa trên địa chỉ MAC): https://github.com/meermanr/adsl/tree/master/rhodes

Mẫu đầu ra của bàn điều khiển:

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

Cột đầu tiên cho biết số lượng thiết bị đang truyền, thường có nghĩa là tải lên internet. Ngoại lệ cho nó, chính bộ định tuyến ADSL (home.gateway trong mẫu ở trên) truyền dữ liệu nhận được từ ISP thiết bị đã yêu cầu nó (tức là tải xuống). Tất nhiên, nó cũng truyền tải lên internet, nhưng nó sử dụng modem ADSL, không có trên mạng LAN và do đó công cụ này không hiển thị.

Ngoại lệ khác sẽ là Raspberry Pi ("Flux" ở trên), tất nhiên là truyền tất cả dữ liệu mà nó quản lý, theo cả hai hướng.

Nhưng ngoài các trường hợp ngoại lệ đó, các số TX (truyền) đề cập đến tải lên và các số RX (nhận) để tải xuống. Cột thứ ba là địa chỉ MAC của thiết bị (không có dấu phân cách ":" hoặc "-" thông thường). Cột thứ tư hiển thị tên người có thể đọc được của thiết bị, nếu biết.

Biểu đồ được tạo bằng cách chạy ./index.py, được dự định sẽ được gọi từ một máy chủ web như lighttpd( index.pyđược thêm vào index-file.namescài đặt cấu hình trong /etc/lighttpd/lighttpd.conf). Bạn chỉ có thể chạy thủ công và nó sẽ tạo ra một số hình ảnh và in HTML sang STDOUT. Vì vậy, bạn sẽ muốn chuyển hướng nó đến một tệp mà bạn có thể mở trong trình duyệt:

./index.py > index.html

Sau đó mở index.html trong trình duyệt ưa thích của bạn.

Yêu cầu cài đặt (tất cả có thể được cài đặt với apt-get install):

  • tcpdump - Công cụ dòng lệnh để nắm bắt và mô tả lưu lượng mạng
  • rrdtool - Công cụ cơ sở dữ liệu Round Robin, bản ghi và biểu đồ dữ liệu chuỗi thời gian
  • rrdcached - Round Robin Database Cache Daemon, dịch vụ giúp giảm chi phí khi làm việc đồng thời với nhiều tệp RRD.
  • pypy-upstream (triển khai nhanh ngôn ngữ lập trình Python)

    • Bạn có thể sử dụng kho Python mà bạn thích: python rhodes.py( pypylà một triển khai thay thế của ngôn ngữ lập trình Python thực hiện Trình biên dịch Just-In-Time (JIT), do đó các tập lệnh chạy dài sẽ sử dụng ít chu kỳ CPU hơn với chi phí bộ nhớ nhiều hơn)

Lưu ý sử dụng : Công cụ 'tcpdump' được sử dụng bởi tập lệnh này yêu cầu quyền root để truy cập lưu lượng truy cập mạng thô. Điều này đạt được bằng cách khởi chạy sudo tcpdumpkhi tập lệnh bắt đầu, vì vậy bạn có thể được nhắc nhập mật khẩu của mình. Cá nhân, tôi đã thêm quy tắc NOPASSWD để /etc/sudoerskhông bao giờ được nhắc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.