前言:openwrt因为提供的是路由器的功能,可以接管无法安装软件的switch的流量。而且手机连接wifi把网关改为openwrt后,科学上网时远比启动手机的软件方便

一:安装docker

1.使用阿里镜像加速(从官网下载可能很慢)

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

命令详细解释:

​从"https://get.docker.com"下载一个脚本,通过bash命令执行该脚本,同时将docker作为参数传递给脚本,使用Aliyun作为镜像加速器​。

-fsSL:

  • -f:如果服务器返回错误码,curl会立即终止操作。Fail silently。
  • -s:静默模式,不显示进度条或错误信息。Silent mode.
  • -S:显示错误信息。Show errors
  • -L:自动重定向。Location.

使用-fsSL选项可以以静默模式运行curl命令,在发生错误时终止操作,并支持自动跟随重定向。这是一种常见的配置,用于在下载和执行脚本、获取远程文件等操作中提供更可靠和干净的执行环境

| bash:是用于执行脚本的命令,将curl下载的脚本通过管道传递给bash命令执行。

-s docker --mirror Aliyun:是bash命令的参数,这会将docker作为参数传递给脚本,同时使用Aliyun作为镜像加速器。

2.不使用阿里云加速,直接从官网下载

curl -sSL https://get.daocloud.io/docker | sh

命令解释:从"https://get.daocloud.io/docker"下载一个脚本,将curl下载的脚本通过管道传递给sh命令执行。bash和sh差别不大,大部分Linux系统中默认安装了bash,用sh可以保持兼容性

二.配置网络

1.开启网卡混杂模式(在该模式下,网卡会接收到经过它所连接的网络上所有的数据包,而不仅仅是目标MAC地址是自己的数据包,因此方便进行网络流量捕获和分析。)

输入ifconfig查看有局域网IP的是哪个网卡(如果只启用了一个网卡),然后开启混杂模式

[root@192 ~]# ifconfig
enp3s0: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST>  mtu 1500
        inet 192.168.50.109  netmask 255.255.255.0  broadcast 192.168.50.255
        inet6 fe80::dc42:1f26:c32b:5bdf  prefixlen 64  scopeid 0x20<link>
        ether 00:e0:4c:68:19:69  txqueuelen 1000  (Ethernet)
        RX packets 10019437  bytes 7646766799 (7.1 GiB)
        RX errors 0  dropped 10119  overruns 0  frame 0
        TX packets 9294960  bytes 10802889814 (10.0 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0  
# 从上面可以看见我的网卡是enp3s0
[root@192 ~]# ip link set enp3s0 promisc on

2.创建虚拟网络MACVLAN(macvlan是一种Linux内核网络虚拟化技术,它可以用于创建和管理虚拟网络接口。它可以为每个虚拟机或容器创建一个与主机物理网卡绑定的虚拟网卡,并且每个虚拟机或容器都有自己的IP地址。这使得虚拟机或容器能够直接和物理网络中的其他设备通信,就像它们是直接连接在物理网络上一样)

docker network create -d macvlan --subnet=192.168.50.0/24 --gateway=192.168.50.1 -o parent=enp3s0 macnet

命令解释:此命令使用Docker创建一个名为macnet的macvlan网络。

  • -d macvlan: 指定要创建的网络驱动为macvln。
  • --subnet=192.168.50.0/24: 设置网络的子网,这里设置为192.168.50.0/24表示网络中的主机IP地址范围为192.168.50.1到192.168.50.254。192.168.50.0是网段,/24是指子网掩码为255.255.255.0。  我电脑的IP是192.168.50.193,所以/24前面写得是192.168.50.0
  • --gateway=192.168.50.1: 设置网络的网关地址为192.168.50.1。因为我在浏览器里写192.168.50.1可以进入路由器(注意不是光猫!)的后台管理地址,所以192.168.50.1就是路由器的ip地址,设置网关为它就是说这个openwrt的网络和其他手机电脑什么的一样都是通过路由器访问互联网
  • -o parent=enp3s0: 指定macvlan网络的父接口,也就是上级网络接口。在这里,enp3s0是物理网卡的名称,它将成为macvlan网络的父接口。-o是指定选项的标志,它表示将要传递额外的选项给docker network create命令
  • macnet: 设置macvlan网络的名称为macnet

      2.1创建好网络后,可以通过以下指令查看设置好的网络

[root@192 ~] docker network ls
NETWORK ID     NAME              DRIVER    SCOPE
6e1a0e16742d   bridge            bridge    local
136b63f0da30   host              host      local
3b647a96f9dc   macnet            macvlan   local  #就是这个
b0265f7d9516   none              null      local

3.给openwrt配置网络(上一步是对宿主机进行的网络配置)

注:如果没有安装vim,请输入  sudo yum install vim  进行安装

# 创建配置文件存放的目录
mkdir -p /home/docker/openwrt
# 创建网络配置文件并编辑
vim /home/docker/openwrt/network

进入编辑界面后,ctrl+shfit+v粘贴如下配置文件,然后按要求修改

其中只有config interface 'lan'中的ipaddr,gateway和dns需要修改。gateway自然和前面一样是路由器,dns也填路由器,ipaddr则是你希望openwrt使用的ip,如我这样设置后就在浏览器输入192.168.50.254进入openwrt后台

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 packet_steering '1'

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.50.254'
        option gateway '192.168.50.1'
        option dns '192.168.50.1'

config interface 'vpn0'
        option ifname 'tun0'
        option proto 'none'

注:如果粘贴后发现格式不对,按以下步骤操作: 

1.确保按下键盘,输出的是小写字母

2. 打出英文的引号":"(也就是键盘上先按住shift再按一下分号,也就是字母L的右边那个键)

3.输入set paste(结合上一步,连起来左下角显示的是“:set paste”),然后回车

4.按一下“i”(成功的标志是左下角有insert或插入的提示符,后面跟着括号,括号里是“粘贴“)

5.ctrl+shfit+v

三:拉取openwrt镜像并启动

docker run --restart always --name openwrt -d --network macnet --privileged --ip 192.168.50.254  -v /home/docker/openwrt/network:/etc/config/network registry.cn-shanghai.aliyuncs.com/suling/openwrt:x86_64 /sbin/init

命令解释:此命令会使用指定的OpenWrt镜像在后台运行一个容器,容器将连接到名为macnet的macvlan网络。容器将具有特权权限(意味着容器内的进程将具有与宿主机上的进程相同的特权级别,可以执行一些普通容器不允许的操作),并使用IP地址192.168.50.254。容器内的/etc/config/network目录将与宿主机的/home/docker/openwrt/network目录进行挂载(可以理解为这两个network文件其实都是宿主机上的network文件)。容器启动时将执行OpenWrt的初始化进程

  • --restart always: 指定容器在退出时总是重新启动。即使Docker守护进程重启,也会重新启动容器
  • -d: 以后台(daemon)模式运行容器,使容器在后台执行。
  • --privileged: 赋予容器特权,允许容器内的进程使用宿主机的特权操作
  • registry.cn-shanghai.aliyuncs.com/suling/openwrt:x86_64: 指定要使用的OpenWrt镜像名称和标签
  • /sbin/init /sbin/init是启动OpenWrt的初始化进程。它是整个系统的根进程,负责初始化系统并启动其他需要运行的服务和进程。通过指定/sbin/init作为容器启动时要执行的命令,可以让容器启动OpenWrt并正常运行

四.一些常用指令

如果前面的步骤正常执行,openwrt应该过一会就启动成功了,可以输入设置的ip地址进入openwrt后台管理界面

1.查看正在运行的docker容器,可以查看openwrt是不是在运行:

docker ps

2.进入openwrt容器内部:

docker exec -it openwrt bash
  • docker exec是Docker命令,用于在运行中的容器中执行命令。
  • -it是两个选项的结合,-i表示交互式模式,-t表示分配一个伪终端。
  • openwrt是要执行命令的目标容器的名称。
  • bash是要在容器内执行的命令,即打开一个交互式bash shell。这允许您与容器进行交互,就像在一个独立的终端中登录到该容器一样。

注:因为openwrt有自己的ip,也可以通过ssh连接。如果没在openwrt后台管理界面设置密码,只需要用户名为root,不需要输入密码就可ssh连上

3.停止openwrt

docker stop openwrt

4.删除已创建的docker容器(如果被玩坏了,可以删了再从镜像创一个)

docker rm openwrt

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐