使用Raspberry Pi作为路由器?


50

有没有人使用他们的Raspberry Pi作为路由设备?

主要是我想使用它来监视我的网络,如果它具有用于以太网的输入和输出,那会很好,但是它没有,因此我想知道通过具有以太网输入来监视网络是否非常有效然后使用USB加密狗作为Wi-Fi路由器。有人做过这样的事情吗?它会大大降低互联网速度吗?


3
取决于您的互联网连接速度。我的是100Mb,所以我很确定它将放慢速度;)
John La Rooy

3
我有30Mbps的互联网连接,而此时的流量为5Mbps,我的带有snort的内嵌树莓派消耗了约50-95%的CPU和85%的内存。我的设置尚未微调,但我想向您展示一些真实的数字。

没有人没有坏宽度分配如何与使用树莓派的自定义路由器一起工作?像,我有3Mbps的互联网连接速度,我有10个用户。您能解释一下如何划分吗?3Mbps的速度。谢谢。希望你能理解。:)
kirbs

2
你好,孩子们。请不要再问其他问题。而是使用页面顶部的“ 提问”链接打开一个新问题。谢谢。

也许这个吗?learn.adafruit.com/...
zengr

Answers:


30

我一直在使用模型B作为具有流量整形的路由器,仅使用它附带的一个以太网端口。这是有关如何做的一个简单说明:

  1. 启用IPv4转发,使您的Pi通过转发收到的所有流量充当路由器
  2. 使用静态网络配置来配置您的Pi,这样它就不会受到下面建议的DHCP更改的影响。这是我的内容供/etc/network/interfaces参考:

    # 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. 现在更改网络的DHCP设置,以使默认网关/路由器为Pi。这可能意味着更改现有ADSL路由器盒上的设置。在上面的示例中,Pi的IP地址为192.168.1.1

当您的设备下次重新连接到网络时,系统会告诉他们您的Pi是其通往Internet的网关,并且所有与Internet绑定的流量都将发送到该设备。您的Pi会依次将所有流量中继到您的普通路由器。您可能需要先断开连接,然后重新连接设备,才能使这些更改生效。

现在,您可以创建或安装工具来为您进行监视,例如vnstat

流量整形

关于流量整形,这是另一个快捷指南,它将使用我自己的Wondershaper变体。

为了使此功能有用,您需要了解您的互联网连接速度。通常,您可以从(原始)路由器的Web界面中找到它,但是如果失败,您可以使用speedtest进行估算。

  1. sudo apt-get install iptables
  2. wget https://raw.github.com/meermanr/adsl/master/wondershaper/wondershaper
  3. sudo ./wondershaper eth0将显示流量整形的当前状态。显然,预期状态是没有整形,这意味着有一个有效的规则,称为pfifo_fast

    • eth0是型号B上的有线网络适配器ifconfig的名称。有关系统上接口的名称,请参阅)。
    # 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,其中:

    • 3000是我的互联网连接的下行速度,以kbit为单位。所以3Mbit == 3000kbit
    • 370 是我的互联网连接的上行速度,再次以千比特为单位。
  5. sudo ./wondershaper eth0 现在应该显示更多的输出:

    # 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
    

您的出站网络现在正在影响您的出站网络流量,并且您的入站流量正在受到一些限制,以确保Pi(而不是原始路由箱)能够控制流量。

要禁用整形,只需运行sudo ./wondershaper eth0 clear。您可以在不先清除的情况下更改上行链路和下行链路的速率,但这不会造成损害。

更新:您还需要禁用ICMP重定向的传输,因为我们需要所有流量都通过Pi进行整形。事实证明,Linux内核足够聪明,可以确定您家庭网络上的客户端可以直接与ADSL盒子进行通信,而不是通过Pi反弹流量,并且可以在任何机会告诉他们。然后,客户端将流量直接发送到您的ADSL盒,而Pi则没有机会对其进行调整。立即禁用它(下次重启时丢失):

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

更新以下内容以在引导过程中进行设置: /etc/sysctl.conf

net/ipv4/conf/eth0/send_redirects = 0

(感谢https://unix.stackexchange.com/a/58081/22537的提示)

您可能还对我有关配置Linux网关的个人说明感兴趣:http : //www.robmeerman.co.uk/unix/gateway


如何设置其他设备可以连接的wifi网络名称和密码?
fommil 2013年

很好的指南。不过,我确实对您的wondershaper建议有疑问:每个客户或整个客户的限制?
鲍勃

@fommil:上面的指南假设您仍在使用ISP提供给您的调制解调器/路由器/ WiFi接入点,但是您对其进行了配置,以使所有连接的客户端都被告知“将流量发送到Pi”。这通常是通过在ISP框的DHCP设置中输入Pi的(静态!)IP地址来完成的。通常在名为“网关”,“默认网关”或“默认路由”的字段中。
RobM 2013年

@Bob:您输入的数字是Internet链接的总数。Wondershaper脚本然后尝试根据需求将其公平地分享给所有客户。因此,如果只有一个客户端正在使用Internet,则应该获得100%的互联网。如果另一个客户端启动,他们将在经过一段时间的“稳定时间”(约10秒)后分别使用50%,依此类推。
RobM 2013年

完善。只是对@fommil的注释,我的所有路由器(而且我想还有更多路由器都没有)提供了一种简单的方法来设置通过DHCP分配的网关。我最终关闭了路由器上的DHCP并在Pi上设置了DHCP服务器-这是一个相当简单的过程(如果需要,请搜索指南)。
鲍勃,

10

具有一点网络背景,首先想到的是将其用作Snort框,然后您不必担心只有一个接口。您将设置交换机/路由器以将所有流量转发到Pi,但也将其传递到终端设备。这称为切换端口监视器,但您的设备可能不支持它。您可能需要管理型交换机才能执行此操作。然后,Snort将分析流量并进行报告。有关Snort的更多信息http://www.snort.org/

这种设置的好处是,您的Pi坐在一边,一边看着正在通过交换机运行的所有内容,而不是与数据串联。如果您通过这种方式遇到软件故障,流量仍然可以畅通无阻。用两个接口描述的内容,程序崩溃,网络崩溃。

它不使用pi作为路由器,但是允许您监视和报告跨网络传输的流量。


7

我已经使用Raspberry Pi进行路由,并且运行良好。如您所说,由于Raspberry Pi仅具有一个以太网端口,因此至少需要一个以上的网络接口。您可以添加连接到USB端口的另一个接口。我使用了GSM调制解调器和Wi-Fi棒。

注意事项:

  • 使用有源的USB集线器。Wi-Fi和GSM设备所需的功率超过了Raspberry Pi的USB端口所能提供的功率。
  • 如果您购买Wi-Fi设备,请购买具有良好Linux支持的设备。您想要一个可以在接入点模式下工作的设备,但并非所有设备都可以。检查linuxwireless.org

这是我有关路由的博客文章,以及有关设置Wi-Fi接入点的博客文章本指南帮助我进行了路由设置。路由的东西并不是Raspberry Pi所特有的。一般而言,在Linux上运行的任何东西都应该可行。详细信息取决于您使用的发行版。


4

我已经使用Raspberry Pi作为路由器大约一个月了,没有任何问题。我有一个实际的商用Wi-Fi接入端口,而不是家用Wi-Fi路由器,因此我使用了它。我也有一个从Wii“借来”的USB到以太网转换器。到达家庭局域网,Raspberry Pi的内置以太网进入WAN / Internet。

获取Raspberry Pi 的IPFire副本。您需要的是ARM版本,没有串行控制台和最新的稳定版本。单击“ ARM”选项卡。下载“ armv5tel体系结构的图像”。

启动它。连接HDMI电视和键盘。回答前几个问题。其余配置可通过家庭网络上的浏览器完成,因此此后您将不需要电视或键盘。

它并不难,并且像冠军一样工作!这是正式说明:http : //wiki.ipfire.org/en/hardware/arm/rpi

最后一件事。如果要使用USB供电的Wi-Fi加密狗,请检查Raspberry Pi的电源。700 mA USB电源可能足以为Raspberry Pi供电,但为Wi-Fi供电的余地并不多。请使用有源的USB集线器,或使用1至2 A USB电源为Raspberry Pi供电。
祝好运!


1

(此附录遵循我以前的回答,该指导是有关如何将Pi配置为LAN的互联网网关的指南)

我不满意监视我的整体 Internet使用情况,而是编写了一个工具来监视LAN中每个设备的Internet使用情况。这使我可以在控制台窗口中查看瞬时使用情况,并生成历史使用情况图表,以便可以一夜之间看到发生了什么。


Rhodes,一种用于监视LAN设备的实时和历史网络使用情况的工具(基于MAC地址):https : //github.com/meermanr/adsl/tree/master/rhodes

控制台输出示例:

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

第一列显示正在传输的设备数量,这通常意味着要上传到Internet。唯一的例外是ADSL路由器本身(上面示例中的home.gateway),它将从ISP接收的数据传输到请求它(即下载)的设备。当然,它也将上载传输到Internet,但是它使用其ADSL调制解调器来实现,该调制解调器不在LAN上,因此对于此工具不可见。

另一个例外是Raspberry Pi(上面的“ Flux”)本身,它当然会在两个方向上传输它管理的所有数据。

但是除了这些例外,TX(发送)编号是指上载,而RX(接收)编号是指要下载。第三列是设备的MAC地址(不带通常的“:”或“-”分隔符)。第四列显示设备的可读名称(如果已知)。

图表是通过运行生成的./index.py,该运行旨在从类似的Web服务器中调用lighttpd(已index.py添加到中的index-file.names配置设置中/etc/lighttpd/lighttpd.conf)。您可以手动运行它,它将生成一些图像并将HTML打印到STDOUT。因此,您需要将其重定向到可以在浏览器中打开的文件:

./index.py > index.html

然后在您喜欢的浏览器中打开index.html。

安装要求(均可通过安装apt-get install):

  • tcpdump -用于捕获和描述网络流量的命令行工具
  • rrdtool -Round Robin数据库工具,记录和图表时间序列数据
  • rrdcached -循环数据库缓存守护程序,该服务可减少与多个RRD文件同时工作时的开销。
  • pypy-upstream (Python编程语言的快速实现)

    • 您可以使用股票Python是你喜欢的:python rhodes.pypypy是一种备选实现了Python编程语言不只是在实时(JIT)编译的,所以长期运行的脚本将在更多的内存的成本使用更少的CPU周期)

使用说明:该脚本使用的“ tcpdump”工具需要root特权才能访问原始网络流量。这是通过sudo tcpdump在脚本启动时启动来实现的,因此可能会提示您输入密码。就个人而言,我已经向其中添加了NOPASSWD规则,/etc/sudoers因此不会提示我。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.