docker 安装 openwrt 并实现科学上网详细步骤

软路由可以做很多事情,比如去广告,自动下载,科学上网等。软路由就是可以安装软件的路由器。严格来说软路由不应该叫软路由,可以把它叫作旁路网关,因为它启到的主要作用是数据转发,我们来看下openwrt的安装。由于我自己是没有软路由只有几个树莓派 :) ,我也不想直接刷 openwrt img 所以今天来看下怎么在。docker 下安装 openwrt



一、docker 安装

使用官方脚本安装 Docker

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

安装完成后执行 docker 命令是需要加 sudo 权限的,这样操作会比较麻烦, 我们可以做如下操作
sudo groupadd docker ##  如果没有 docker 组的话,添加一个 docker 组
sudo gpasswd -a ${USER} docker ## 把当前登陆的用户添加到 docker 组
sudo service docker restart ## 重启 docker 服务
newgrp - docker ## 切换到新的回话
这样就可以完成对 docker 的安装操作

二、设置网络

通过 ssh 登录到 树莓派

1. 把网卡混杂模式打开

打开后 openwrt 才能正确的收到数据

sudo ip link set eth0 promisc on

2. 创建 docker 网卡

docker network create -d macvlan --subnet=192.168.31.0/24 --gateway=192.168.31.1 -o parent=eth0 macnet

macvlan 模式会为每个容器创建一个独立的 ip 每个容器可以通过独立的 ip 进行访问

二、下载 openwrt 镜像并启动容器

Github地址 这里包含了很全的镜像文件包含了 arm  x86  x64 的 docker 镜像文件,我的机器是 树莓派4 本来对应该装这个 sulinggg/openwrt:rpi4 镜像 ,但由于我装的是 32 位的系统,所以只能安装这个镜像 sulinggg/openwrt:latest 。要查看系统是不是64的可以通过 uname -a 来查看 

Linux raspberrypi 4.19.57-v7l+ #1244 SMP Thu Jul 4 18:48:07 BST 2019 armv7l GNU/Linux

由于我的是 armv7 是 32位系统,所以这个是不可以运行 64 位的 openwrt

拉取镜像:docker pull sulinggg/openwrt
拉取完成后,可以通过 docker images 查看已经下载的镜像

启动 docker 镜像

docker run --restart always --name openwrt -d --network macnet --privileged sulinggg/openwrt /sbin/init

三、设置容器 ip

到目前为止,容器已经启动了,可以通过 docker ps

pi@raspberrypi:~ $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3fb651bf997f sulinggg/openwrt "/sbin/init" 7 seconds ago Up 4 seconds openwrt

可以看到我的 openwrt 容器已经运行了, 并且容器 ID是:3fb651bf997f 下面要进入到容器里面并设置容器的 ip 。通过命令 docker exec -it 3fb651bf997f bash 进入到容器内部

pi@raspberrypi:~ $ docker exec -it 3fb651bf997f bash bash-5.1#

下面开始设置容器的 ip 以便我们能通过 ip 地址访问容器, 通过命令:vim /etc/config/netwrok 来设置 ip。 按住 i 键开始输入

config interface 'lan' option type 'bridge' option ifname 'eth0' option proto 'static' option netmask '255.255.255.0' option ip6assign '60' option ipaddr '192.168.31.111' option gateway '192.168.31.1' option dns '192.168.31.1'

其中 option ipaddr 是你的 openwrt 的地址,注意不要与局域网其它设备冲突 . option gateway 与 option dns 设置你路由器的地址
设置完成依次按:Esc -> : -> wq -> 回车保存

保存完成后通过命令 /etc/init.d/network restart 重启网络, 重启完成后便可以通过浏览器访问了 http://192.168.31.111 默认密码是 password

四、设置 openwrt

1添加科学上网节点,我们通过 passwall 来添加节点,选择 服务 -> passwall -> 节点列表 -> 添加 来添加节点

添加完成后,回到 passwall -> 基本设置 把节点打开 并保存 & 应用

这时候测试 google 和 github 如果测不通的我们把  DNS 设置一下,打开 passwall -> 基本设置 -> DNS  把缓存解析结果 和 ChinaDNS-NG 取消勾选 并 清空 IPSET 然后保存 & 应用

桥接网络关闭 打开网络 -> 接口 -> LAN -> 物理设置 -> 桥接接口 取消勾选

然后再进行 Google  github 测试,这时候正常应该是没有问题的。

五、连接网络

这时候其实 openwrt 内部其实已经可以进行科学上网了,但要咱们的设备也能科学上网的话,有二种方法。
1. 把客户端的 网关/路由器 以及 DNS 指向我们 openwrt,这样数据就会经过 openwrt 流转。

2. 把主路由的网关和 DNS 设置成 openwrt 的IP,这样设置后,所有连接路由器的设备都会自动把 网关/路由器、DNS 指向我们的 openwrt 省去手动设置。


设置完成后,所有连接路由器的设备都可以科学上网

六、总结

总的来说流程稍微复杂了些,但可以省去 openwrt 硬件设备的钱,任何可以运行 docker 的设备都可以照这个方法来安装。而且只需要在一个端安装科学上网客户端就可以,其它的设备连上就可以用,还是很方便的~

9 评论

  1. 您好/etc/config/netwrok 来设置 ip。 按住 i 键开始输入 这里的network?

    回复删除
    回复
    1. vim /etc/config/netwrok 进去后默认不是编辑状态,按一下 i 就可以编辑了。

      删除
  2. 前面的都正常下来了,建好openwrt之后只能访问国内网络。passwall DNS设置里面没有缓存解析结果这一项, ChinaDNS-NG换人桥接接口都取消了。而且ssr+和openclash都连不上外网,请问要怎么解决呢

    回复删除
    回复
    1. 网关设置过去试了下,是dns无法解析。而且直连的话访问国内网站的时候会有加载不全的情况

      删除
  3. 此评论已被作者删除。

    回复删除
  4. 路由器(192.168.31.1)与openWrt(192.168.31.111)互为网关、dns不会有问题吗?

    回复删除
  5. 创建 docker 网卡以后是不是以后再创建容器的话都会给每一个容器都分配一个IP吗

    回复删除
  6. 楼主你好,按照你的教程操作无法网页访问docker版的openwrt,不知道是不是因为我的网络环境和你有出入有关。我的是无线而非有线连接的主路由,在docker下配置openwrt网络(/etc/config/network)的option ifname我相应的把eth0改成无线的wlan0不知道这样修改对不对如果不对的话应该怎么改或者说是无线方式连接主路由的话整套配置应该怎么改?望看见后给予指点这个困扰我很久的问题。万分感谢!

    回复删除
  7. 你好大佬,我想请问一下按照您的步骤部署之后,使用portianer查看容器日志报错如下,我发现在国内的csdn上也有很多人反馈这个报错,请问我该如何解决,是否是网卡设置出现了问题我的网卡设置不合适e0而是e1
    WARNING: Variable 'led' does not exist or is not an array/object
    Press the [f] key and hit [enter] to enter failsafe mode
    Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level
    WARNING: Variable 'led' does not exist or is not an array/object
    Press the [f] key and hit [enter] to enter failsafe mode
    Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level

    回复删除
后一页 前一页