V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
goreliu
V2EX  ›  Linux

同时使用多网卡提升树莓派网络利用率

  •  
  •   goreliu · 2017-11-19 14:42:09 +08:00 · 7710 次点击
    这是一个创建于 2564 天前的主题,其中的信息可能已经有所发展或是发生改变。

    树莓派 3 自带的有线网卡是 100M 的,无线网卡是 72M 的,都比较慢。想提升网速的话,最直接的方法是使用 usb 网卡,千兆的有线网卡或者 450M 以上的 2.4GHz 无线网卡或者 5GHz 无线网卡。但因为树莓派 3 的 usb 接口是 2.0 的,而且 tf 卡也要共享带宽,所以也提升不了太多,而高速的 usb 网卡也不便宜(千兆 usb 有线网卡最便宜大概要 50 多,450M 以上的 usb 无线网卡更贵),而且大家手头上通常没有闲置的,为此购买不大值得。

    那么一个间接的方法是同时使用有线和无线网卡,这样合理使用的话速度可以叠加。因为我有一个闲置的 300M usb 无线网卡,所以将它和内置有线网卡一起使用(因为测试过,它和内置无线网卡一起使用的话,会互相影响,速度反而更慢,所以不用内置无线网卡了),这样理论上就有 400M 的带宽了,当然实际上达不到。

    但一起使用的话需要一些技术手段,如果只是(在同一个网段)简单启用双网卡,虽然两个 ip 地址都能用,但实际上只有一个网卡会工作,因为所有的流量都走到了路由表里第一个网卡了,这样肯定是不行的。那么大致有如下几个方法: 1、两个网卡分别接入不同的网段。 2、两个网卡绑定在一起使用。 3、配置路由表,让两个网卡在同一个网段可以同时使用。

    因为我的网络环境很简单,只有一个路由器和一个网段,所以方法 1 我就不考虑了。但如果有两个网段的话,方法 1 是最简单的。开始时我想使用方法 2,将两个有线网卡绑定到一起来共享 1 个 ip 是比较简单的,但将一个有线网卡和一个无线网卡绑定到一起,则麻烦很多,网上资料也比较杂乱。另外因为我配置也是通过 ssh 进行的,不能把网络连接搞断了。还好我还有内置无线网卡可以使用,如果一共只有两个网卡,那几乎就没办法配置了。但即使这样也很麻烦,最后几经尝试都以失败告终。

    最后只能使用方法 3。方法 3 的好处是配置简单,但缺点是使用起来比较麻烦,需要自己来做负载均衡,不过灵活性比较高。

    我路由器地址是 192.168.1.1,有线网卡是 eth0,无线网卡是 wlan0,在路由器上分别绑定到 192.168.1.6 和 192.168.1.7。那么在两个网卡都连接上后,只需要执行这样一个脚本,就可以让两个网卡同时工作了:

    ip route add 192.168.1.0/24 dev eth0 src 192.168.1.6 table 100
    ip route add default via 192.168.1.1 dev eth0 table 100
    ip rule add from 192.168.1.6 lookup 100
    
    ip route add 192.168.1.0/24 dev wlan0 src 192.168.1.7 table 200
    ip route add default via 192.168.1.1 dev wlan0 table 200
    ip rule add from 192.168.1.7 lookup 200
    

    具体效果是通过 192.168.1.6 访问树莓派会走有线网卡,通过 192.168.1.7 访问树莓派会走无线网卡。如果从树莓派下载多个文件,可以通过轮询或者随机选择 ip 来生成文件地址列表文件,然后使用 aria2c -i 文件列表 来下载,就可以同时使用两个网卡了。

    如果是在树莓派往外连接,还是要看路由表里哪个网卡在前边(用 ip route 命令查看,一般有线网卡在前边),另外也可以在命令里指定网卡,比如用 curl --interface eth0 或者 wget --bind-address 192.168.1.6

    可以使用了后,重点就是速度能提升多少了。在我的环境,从树莓派往电脑下载文件,树莓派内置有线网卡能达到 11.3 MB/s,300M 的无线网卡,速度最快能达到 21 MB/s 出头,但不稳定,容易降到十几兆。一起使用的话,最快可以达到 30 MB/s 出头,但容易降到 25 - 26 MB/s。效果还是非常明显的。

    25 条回复    2017-11-20 08:56:48 +08:00
    huawuya
        1
    huawuya  
       2017-11-19 15:52:46 +08:00
    所以我买的 orangepi pc2,千兆网卡,可惜 usb 还是 2.0 的,存储还是有瓶颈,不知道什么时候能出 usb3.0 的 pi 呢?
    trepwq
        2
    trepwq  
       2017-11-19 15:55:43 +08:00 via iPhone
    树莓派的 io 不行
    goreliu
        3
    goreliu  
    OP
       2017-11-19 15:58:04 +08:00 via Android
    @huawuya 速度能达到多少?
    AttufliX
        4
    AttufliX  
       2017-11-19 15:58:34 +08:00 via Android
    太给力了!
    goreliu
        5
    goreliu  
    OP
       2017-11-19 16:05:11 +08:00 via Android
    @trepwq 我感觉综合考虑二手笔记本可能是比较不错的选择,不到一千,性能可以,内存大,有 usb 3.0,有千兆有线网卡,还自带屏幕,功率 10w 出头,体积较小,安静,就是坏了的话比较麻烦。其他的选择要么有明显的短板,要么性价比低,要么功率高或者噪声大。
    XiaoFaye
        6
    XiaoFaye  
       2017-11-19 16:12:19 +08:00 via Android   ❤️ 1
    @goreliu 同意,就算是现在新出的微型电脑,N3450+4g+64g 也不到 1000,性能好多了,还有三个 USB3 和千兆,可玩性高多了。
    hfenger
        7
    hfenger  
       2017-11-19 16:13:18 +08:00
    所以我玩的是带 3.0USB 口子的 ATOM 主板,比树莓派便宜,比树莓派可玩性高,性能横扫树莓派几条街,树莓派原来的定义是是卖给国外学生学习编程的廉价开发板,后来因为资料多便宜才被一些人用作其他用途
    hfenger
        8
    hfenger  
       2017-11-19 16:15:11 +08:00
    没事我就蹲闲鱼收坏屏 ATOM 寨板,最便宜的一个 35 块就收到了,不过是 2G 内存 USB2.0 而且没引出 3.0 针脚的 Z3735F 板子
    widewing
        9
    widewing  
       2017-11-19 16:17:00 +08:00 via Android
    有 lede 的话可以看下 mwan3 的实现,不仅实现了负载均衡还有这之上的策略路由。iptables 的关键记录:
    root@jzl:~# iptables -t mangle -L mwan3_policy_wan_balan
    ced
    Chain mwan3_policy_wan_balanced (3 references)
    target prot opt source destination

    MARK all -- anywhere anywhere
    mark match 0x0/0xff00 statistic mode random probab
    ility 0.50000000000 /* wan2 1 2 */ MARK xset 0x200/0xff0
    0
    MARK all -- anywhere anywhere
    mark match 0x0/0xff00 /* wan 1 1 */ MARK xset 0x10
    0/0xff00
    goreliu
        10
    goreliu  
    OP
       2017-11-19 16:40:46 +08:00 via Android
    @widewing 嗯,直接用 iptables 就可以做负载均衡,以后可能搞一下。
    goreliu
        11
    goreliu  
    OP
       2017-11-19 16:44:42 +08:00 via Android
    @hfenger 之前我也考虑过这种,但有一个树莓派一个旧笔记本够用了,弄太多设备也没什么用,就不再考虑了。当初买树莓派时还想着玩玩硬件方面的东西,后来也没兴趣玩了。另外二手瘦终端貌似也是不错的选择,几十到几百的都有,扩展性要比寨板好不少。
    dawncold
        12
    dawncold  
       2017-11-19 17:12:20 +08:00
    如果是多个有线网卡,默认情况下系统不会让上游交换机学习到多个 mac 地址,也就是说在响应 arp 请求时总会使用某一个网卡的 mac 地址告诉上游,在上游交换机看来这个主机只有一个网卡,具体可以看这个: http://linuxinsight.com/proc_sys_net_ipv4_conf_eth0_arp_filter.html,但有线加无线是什么情况没测试过,看来只需要改改路由表就行了
    dawncold
        13
    dawncold  
       2017-11-19 17:14:05 +08:00
    上一条风格好差,没法修改或删除,大家凑合看吧。另外补充系统不会让交换机学习到多个 mac 的前提是多个网卡在同一个网络中
    yingfengi
        14
    yingfengi  
       2017-11-19 17:14:58 +08:00 via Android
    树莓派本身性能不行啊
    blahgeek
        15
    blahgeek  
       2017-11-19 17:30:06 +08:00 via iPhone
    有个东西叫 multi path tcp
    goreliu
        16
    goreliu  
    OP
       2017-11-19 17:54:11 +08:00 via Android
    @blahgeek 大概搜了下,挺复杂了,而且好像要服务端客户端都得改,但我的客户端是手机、Windows 等等。
    goreliu
        17
    goreliu  
    OP
       2017-11-19 17:55:11 +08:00 via Android
    @dawncold 嗯,如果是两个有线网卡就很容易了,无线网卡多了好几个步骤,麻烦不少。
    cs8425
        18
    cs8425  
       2017-11-19 18:13:19 +08:00   ❤️ 1
    我記得 rpi 系列內建的有線網卡跟 USB 是同一個 bus
    不管怎搞上限差不多就是 USB 2.0 的 30MB/s 左右...
    rpi3 內建的 wifi 是走 SDIO 這個倒是可以拿來增加一點頻寬
    goreliu
        19
    goreliu  
    OP
       2017-11-19 20:10:58 +08:00 via Android
    @cs8425 那样意义应该也不是很大,tf 卡和 u 盘的速度同样限制在 usb 2.0。
    Lax
        20
    Lax  
       2017-11-19 21:07:48 +08:00
    分母更大,感觉“利用率”会下降
    jasontse
        21
    jasontse  
       2017-11-19 21:36:43 +08:00 via iPad
    为什么不用 bonding mode=5
    huawuya
        22
    huawuya  
       2017-11-19 21:40:14 +08:00
    @goreliu 读取本地 usb2.0 上挂的移动硬盘速度能到 20 多 M,通过网卡读取路由器上挂载的 usb3.0 U 盘上的文件速度能到 70 多 M。
    shepherd
        23
    shepherd  
       2017-11-19 23:36:28 +08:00
    还是受限于树莓派的总线速度吧,30M/s 已经接近极限了
    goreliu
        24
    goreliu  
    OP
       2017-11-20 08:53:50 +08:00
    @jasontse 你尝试过吗,我没弄成功。
    goreliu
        25
    goreliu  
    OP
       2017-11-20 08:56:48 +08:00
    那 usb 2.0 就是瓶颈了,但树莓派 usb 2.0 读读卡器里的 sd 卡也能达到 35 M 以上,20 多 M 有点不对劲吧,是不是文件系统的问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1127 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:10 · PVG 03:10 · LAX 11:10 · JFK 14:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.