树莓派docker部署openwrt


树莓派docker旁路由尝鲜

这篇文章记录了我是如何使用docker来配置软路由的,但是这种做法不仅适用于树莓派,其实也适用于其它的arm设备,甚至不同架构的设备(注意docker镜像的架构即可)。这是我第一次接触软路由,有什么问题请指正。

码字不易,转载请注明出处

多少人的树莓派买来新鲜了一阵子就丢在一旁吃灰了?虽然我的树莓派还好,被我用来做了无线ap以及挂上了smokeping,没事还拿来挂挂bt之类的,不过是否还能有更大的用处呢?之前对于软路由早有耳闻,由于我家的主路由器输入Tenda AC10这种只能使用官方固件且不可刷系统的设备,折腾的空间小了很多,没啥可玩性,所以考虑使用树莓派作为旁路由接入网络。

使用到的设备:

  • 天翼光猫进行网络拨号
  • 腾达AC10通过网线接到光猫
  • 树莓派3b+通过网线和AC10相连(虽然树莓派3b+的“千兆无线网”接的是USB2.0实际只能达到300Mbps的传输速率,而AC10虽然可玩性不高但是好歹是个全端口千兆的路由器,其实还是树莓派4更加适合作为软路由来玩,不过由于我家的网络只有百兆,所以这些都无所谓了)

关于树莓派系统

树莓派的性能已经比大部分几百块钱的路由器强大很多了,如果专门刷一个openwrt总有些大材小用的感觉,所以我选择系统刷debian64,使用docker运行openwrt。

关于系统镜像,因为原版的raspbian在树莓派的处理器升级成64位之后几年都没有支持64位,所以推荐使用一个64位系统,充分发挥树莓派的性能。这里推荐使用树莓派爱好者基地Debian-Pi-Aarch64系统镜像,优化了性能,并且提供了webui等小工具,装好系统后不需要显示器即可配置,如果没有桌面需求的话建议直接装无桌面版那个就可以了。

docker部署openwrt

前期准备

安装docker并配置镜像

首先安装docker

apt install docker

然后考虑到原版的源在国内下载缓慢,所以更换为阿里镜像源

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://md4nbj2f.mirror.aliyuncs.com"]
}
EOF

# 重载配置文件
sudo systemctl daemon-reload   
# 重启docker  
sudo systemctl restart docker

准备网卡并建立虚拟网络

开启网卡的混杂模式

sudo ip link set eth0 promisc on

混杂模式(英语:promiscuous mode)是电脑网络中的术语。是指一台机器的网卡能够接收所有经过它的数据流,而不论其目的地址是否是它。

一般计算机网卡都工作在非混杂模式下,此时网卡只接受来自网络端口的目的地址指向自己的数据。当网卡工作在混杂模式下时,网卡将来自接口的所有数据都捕获并交给相应的驱动程序。网卡的混杂模式一般在网络管理员分析网络数据作为网络故障诊断手段时用到,同时这个模式也被网络黑客利用来作为网络数据窃听的入口。在Linux操作系统中设置网卡混杂模式时需要管理员权限。在Windows操作系统和Linux操作系统中都有使用混杂模式的抓包工具,比如著名的开源软件Wireshark

然后我们需要创建一个macvlan模式的docker虚拟网络。关于docker网络模式的详解可以参考下面两篇文章:

使用命令

docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.1 -o parent=eth0 macnet

注意,请根据自己的网络环修改参数,如我的主路由(AC10)的ip为192.168.0.1而ip段为192.168.0.0/24。

创建后,使用docker network ls即可查看已有网络。

获取镜像并启动容器

我使用的docker image是buddyfly/openwrt-aarch64,先把镜像pull下来。

docker pull buddyfly/openwrt-aarch64

然后创建一个docker网络

然后使用命令创建了一个名为openwrt的容器并运行.

docker run --name openwrt --restart always -d --network macnet --privileged buddyfly/openwrt-aarch64:latest

修改容器网络参数

进入容器

docker exec -it openwrt /bin/bash

修改网络参数

vi /etc/config/network

config interface 'loopback'
        option ifname 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
        option ula_prefix 'fde3:bd8c:2f68::/48'

config interface 'lan'
        option type 'bridge'
        option ifname 'eth0'
        option proto 'static'
        option ipaddr '192.168.0.10'
        option netmask '255.255.255.0'
        option gateway '192.168.0.1'
        option dns '192.168.0.1'

这里有三项是需要修改(添加)的,option gateway和option dns设置为主路由的ip,option ipaddr对应的ip则是这个“openwrt设别“在局域网内的ip,只需要设置个合理的值即可。

配置好之后使用/etc/init.d/network restart重启网络,这时候局域网内便会多出一个192.168.0.10的设备

配置openwrt

这时候访问192.168.0.10即可看见openwrt的登陆界面,默认密码为password

到这里还没结束,我们还需要修改几个配置

  1. 前往 网络->接口->LAN修改->DHCP服务 选择不在此接口提供dhcp服务

  2. 我个人在后来的使用时,出现了代理时使用GFW模式时,部分网站无法访问的情况,大概是因为我本地没有ipv6而软路由给我分配了ipv6的缘故,只需要把ipv6分配长度改为禁用即可。

    到这里基本就大功告成了!剩下的就是体验软路由继续折腾了。

使用openwrt作为旁路由

旁路网关接入网络后我们需要使流量经由旁路网关再进入互联网,有两种模式

全局流量自动经过旁路由

该方案不需要自己在电脑连接网络的时候再手动设置网关,所有流量自动经过旁路由,需要修改主路由的dhcp服务器网关以及dns为旁路由的ip,然后重启所有设备。很多原版固件的路由器是做不到的。而我则是因为路由器(AC10)并不负责拨号,而是在光猫内置的路由处拨号,所以不能指定和光猫不同的网段,所以暂时没办法测试。

手动设置网关,使流量经过旁路由

以win10为例,在网络选择上点击属性,编辑ip设置,修改网关和dns为旁路由的ip

保存之后重新连接,之后你所有的流量都会先经过软路由了。

软路由功能体验

科学上网

不少人使用旁路由设备是为了能够不额外安装客户端的情况下进行科学上网,那么我们也首先来进行代理的配置,这个镜像内置了ShadowSocksR Plus+以及PassWall,这里我就以PassWall为例了。

在节点列表里面添加节点并启用,然后在基础设置里面选择好TCP节点,UDP节点和Socks5节点我都设置成与TCP节点相同了,然后默认代理模式和本机代理模式我都设置成了GFW名单,因为如果仅仅是绕过大陆ip的话还是会出现不少问题,毕竟不少国内网站使用了国外的服务器,一来浪费流量而来拖慢了访问速度。对于特定网站可以再结合chrome的switch omega插件+本地socks5代理或者干脆在PassWall的访问控制里面添加记录。

配置好之后直接在电脑上访问youtube,流畅播放~ 如果出现了无法访问部分网站的情况,请查看上面我是怎么关闭ipv6分配的,说不定有效果。

查看此时的CPU占用,看起来还是比较高的…也还好我家只是百兆宽带

其它的一些功能

状态监控

该镜像内置了netdata,只需要访问旁路由ip:19999即可进入上面那张图的页面,查看路由器(树莓派)的实时详细信息。自带的服务里面还有不少的插件,不过我还没有一一去尝试,欢迎大家自己搭建一个来尝尝鲜,好好利用起树莓派í ½í¸„。

补充

旁路由同时开启ap

其实这时候树莓派除了能用来做旁路由还能同时用来创建无线ap(至少直接在debian里面是可以的,openwrt里面我还没试过),参考项目createap

参考

树莓派不再吃灰 (二) Docker中使用openwrt做旁路网关

n1-openwrt旁路由设置


文章作者: HavocW
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 HavocW !
评论
  目录