树莓派部署旁路由实现全局科学上网

简单介绍

旁路由架构是:主路由依旧负责拨号和DHCP,而树莓派作为旁路由接入同一网段,通过静态IP和自定义路由规则,让家里的设备可以选择是否把流量交由树莓派处理。这种模式不会破坏原有网络结构,也能随时拔掉。

目的

在Docker中运行OpenWrt旁路网关(透明网关)

  • 结构图如下

开启网卡的混杂模式

  • 是为了让我们的虚拟机和宿主机能同时接收数据包
  • 以下二选一选择执行
    • 插线形式,请执行:
    1
    sudo ip link set dev eth0 promisc on
    • WIFI形式,请执行:
    1
    sudo ip link set dev wlan0 promisc on

下载OpenWrt镜像

  • 在终端界面执行以下命令,下载镜像文件
    1
    docker pull buddyfly/openwrt-aarch64


  • 下载完后,可选择查看镜像是否在docker镜像里,执行以下命令
    1
    docker images

检查是否存在Docker虚拟网络(macnet)

  • 第一次执行之前,一般情况是没有的,不过我们还是要执行看看先
  • 查看所有网络列表
    1
    docker network ls
  • 如果出现重名,可执行下面命令用来删除已存在的同名网络
    1
    docker network rm `填写NAME`

创建Docker虚拟网络

  • 虚拟网络名称为macnet,驱动为macvlan模式,将subnet 10.10.10.0修改为你自己主路由的网段,gateway 10.10.10.1修改为你自己的主路由网关。
  • 图中的示范命令如下
    1
    docker network create -d macvlan --subnet=10.10.10.0/24 --gateway=10.10.10.1 -o parent=eth0 macnet
  • 以下二选一选择执行(以我自己的为例)
    • 插线形式,请执行:
    1
    docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.1 -o parent=eth0 macnet
    • WIFI形式,请执行:
    1
    docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.1 -o parent=wlan0 macnet

如果不清楚自己的主路由器网关地址和网段,那就请看下面这一章节。

如何查看主路由器的网关地址和网段(Windows)

  • 通过路由器管理界面(通用方法)

  • 通过命令行形式查看
    • 按win键 + R键
    • 输入 cmd
    • 在命令行输入 ipconfig

验证【Docker虚拟网络】是否创建成功

  • 输入命令 docker network ls

启动OpenWrt容器

  • 执行下面命令
    1
    docker run --restart always -d --network macnet --privileged buddyfly/openwrt-aarch64:latest

查看运行中的OpenWrt容器

  • 执行下面命令
    1
    docker ps -a | grep openwrt

修改OpenWrt容器的IP地址

  • 进入容器内部
    1
    docker exec -it a94607d8119f ash


  • 编辑网卡文本
    1
    sudo nano /etc/config/network
  • 修改文件如下,将 option ipaddr '192.168.0.252' 改为你想作为旁路由网关的空闲地址(我的网段为 192.168.0.X),主路由IPV4地址改为你自己的即可。
    1
    2
    3
    option ipaddr '192.168.0.252'  # 252这是我自定义的
    option gateway '192.168.0.1' # 这是我的主路由IPV4地址
    option dns '192.168.0.1' # 保持和gateway一致
  • 重启容器网卡
    1
    /etc/init.d/network restart

校验【修改OpenWrt容器的IP地址】修改是否成功

  • 现在我们可以call下外部的主路由IP,试试连通性。
    1
    ping 192.168.0.1   # 换成你自己的

    显示和我的截图一样,收到数据包就可以了。

永久开启网卡混杂模式

  • 先退出docker容器,然后再去宿主机里进行下面操作
  • 先执行 sudo nano /etc/network/interfaces
  • 添加内容
    1
    2
    up ip link set eth0 promisc on    # 插线形式用这个
    up ip link set wlan0 promisc on # WIFI形式用这个
  • 添加内容后,按 ESC 并输入 :wq 正常保存
  • 用cat命令查看是否已写入 cat /etc/network/interfaces
  • 如果文件权限有问题,那执行下面操作
    1
    2
    ls -l /etc/network/interfaces
    sudo chmod 644 /etc/network/interfaces

登录树莓派旁路由网关系统(旁路网关配置)

  • 网址输入
    1
    http://192.168.0.252    # 改为你自己设置的
  • 初始用户名 root 密码 password
  • 先做最重要的事情:改密码。

更改系统主题

更改上级路由





网络加速设置



科学上网






配置旁路网关

  • 把局域网内需要连接的设备的WiFi改为手动配置
  • 然后IP地址改为192.168.0.XXX改为你愿意的地址
  • 子网掩码改为255.255.255.0
  • 路由器(网关)改为192.168.0.254,这个其实是OpenWrt的IPv4地址
  • DNS服务器改为192.168.0.254,同OpenWrt的IPv4地址

验证网关是否生效(树莓派验证)

  • ip route show
  • ping 8.8.8.8
  • curl -Iv https://www.youtube.com --connect-timeout 10
  • curl -Iv https://www.google.com --connect-timeout 10