关于基于 docker 部署 openwrt - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
JOKERdmb
V2EX    宽带症候群

关于基于 docker 部署 openwrt

  •  
  •   JOKERdmb 2023-04-20 15:54:16 +08:00 4244 次点击
    这是一个创建于 904 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我先陈述一下环境吧!

    硬件:畅网双网口软路由 系统:ubuntu 22.04 网络环境:学校工位,通过一个静态 ip 上网(只有一个静态 ip ),软路由的 eth0 连接到外网。eth1 连接了一个小交换机。

    各位大佬帮帮忙,卡在这个问题上好久好久了。自编译了一个支持 docker 部署的 openwrt 镜像,但是不想在真机上部署,想把它部署在 docker 上。现在搜了好多好多教程,基本的配置方法大概是: 1 、开启网卡混杂模式 2 、创建一个 acvlan 的虚拟网络,然后将 lan 口(在我的机器上是 eth1 )加入这个 macvlan 的网络 这两步已经成功,并且能够进入 web 管理界面,但是现在的问题就是,我不知道该如何配置 wan 口也就是上网的口(在我的机器上是 eth0 ),看了好多教程都是开启 DHCP 等待分配,但是学校工位的网络是给一个网口给一个静态 ip ,没找到类似这种的教程,望大佬们帮帮忙给小弟一个具体的 Docker 部署 openwrt 的方法,万分感谢!

    21 条回复    2023-04-21 12:37:08 +08:00
    kaedeair
        1
    kaedeair  
       2023-04-20 16:07:05 +08:00
    docker 部署的 openwrt 只能做旁路由不能做主路由
    JOKERdmb
        2
    JOKERdmb  
    OP
       2023-04-20 16:13:29 +08:00
    @kaedeair 啊!! T T ,那还需要再给镜像加一个网络吗(我现在只有一个 macvlan ,用在了 lan 口),直接 DHCP 就可以吗
    EasonSummer
        3
    EasonSummer  
       2023-04-20 16:14:24 +08:00
    我没实践过 搜到这个不知道对你有没有帮助。https://www.cnblogs.com/luoshuifushen/p/16989469.html
    JOKERdmb
        4
    JOKERdmb  
    OP
       2023-04-20 16:15:27 +08:00
    @EasonSummer 我来康康!!!
    mohumohu
        5
    mohumohu  
       2023-04-20 16:36:18 +08:00
    其实你有没有考虑过你真的需要 openwrt 吗?你都能部署 docker 了,那 openwrt 提供的服务是不是对应的 docker 也可以提供
    kaedeair
        6
    kaedeair  
       2023-04-20 16:36:31 +08:00
    @JOKERdmb 2# 做主路由需要虚拟机跑 openwrt ,并直通一个物理网口做 wan
    EasonSummer
        7
    EasonSummer  
       2023-04-20 16:43:00 +08:00
    也是,如果要富强,v2rayA 或 clash 的 docker 都能办到也能透明代理。其他业务 docker 更是可以了
    JOKERdmb
        8
    JOKERdmb  
    OP
       2023-04-20 16:46:29 +08:00
    @kaedeair 大佬,也就是 docker 不行,需要 kvm 是不是
    JOKERdmb
        9
    JOKERdmb  
    OP
       2023-04-20 16:46:53 +08:00
    @EasonSummer 我其实也就是富强,是不是没有必要非要 op
    JOKERdmb
        10
    JOKERdmb  
    OP
       2023-04-20 16:49:31 +08:00
    @mohumohu 我其实就是一个富强,别的没有啥刚需。大佬一语点醒梦中人
    JOKERdmb
        11
    JOKERdmb  
    OP
       2023-04-20 16:50:51 +08:00
    @mohumohu 说白了,我需要的功能就是帕斯沃,不知道有没有替代品
    kaedeair
        12
    kaedeair  
       2023-04-20 16:57:59 +08:00
    你这个需求,直接 linux 跑代理就行了啊
    levenwindy
        13
    levenwindy  
       2023-04-20 17:02:00 +08:00
    ```bash
    # 假设 lan 口 (eth1)为 192.168.1.1 ,作为网关, 没有 ipv6 就删掉(--ipv6 --subnet=fe80::/80 )
    docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 --ipv6 --subnet=fe80::/80 -o parent=eth1 macvlan1
    # 指定 ip 192.168.1.254 ( OP 管理口)
    docker run -d --name op1 --restart=always --privileged --net=macvlan1 --ip=192.168.1.254 < 镜像名 >
    ```
    /etc/config/network 记得修改里面的配置,后面自己弄吧
    totoro625
        14
    totoro625  
       2023-04-20 17:02:01 +08:00
    你可能仅仅需要一个能配置机器代理的程序 ShellClash: https://github.com/juewuy/ShellClash
    luckjoe680
        15
    luckjoe680  
       2023-04-20 17:02:06 +08:00 via Android
    @JOKERdmb 跑个 clash 不比 passw 强?
    JOKERdmb
        16
    JOKERdmb  
    OP
       2023-04-20 17:06:33 +08:00
    @totoro625 跑起来这个以后,效果跟 pw 一样吗
    JOKERdmb
        17
    JOKERdmb  
    OP
       2023-04-20 17:07:32 +08:00
    @luckjoe680 我是想软路由接一个交换机,然后笔记本啥的客户端接上去就能富强,小猫也能做到吗
    cwbsw
        18
    cwbsw  
       2023-04-20 19:42:52 +08:00
    docker 设计是部署应用的,网络配置就是残废。
    你的需求建议用 LXC 来解决,和 docker 同样是基于 linux 容器技术,但是功能强大的多。
    luckjoe680
        19
    luckjoe680  
       2023-04-21 07:39:36 +08:00 via Android
    @JOKERdmb 小猫就是用来干这个的呀 openwrt 上也是用小猫呀
    libook
        20
    libook  
       2023-04-21 12:22:20 +08:00
    Docker 是可行的,我曾经使用 OpenWrt 官方的 rootfs 镜像成功做过旁路网关,几台设备配置网关为这个 OpenWrt 的地址实现透明代理,但已经忘了怎么配置的了。

    可以参考这个,但不确定是不是我最终参考的 https://sspai.com/post/68511

    不过有两点不是很好。
    一个是容器几乎劫持了宿主机,包括但不限于 tty ,这个跟用容器来做环境隔离避免污染的预期不大相符。
    另一个是做的所有配置更改都是在容器内部,重新部署就全都丢失了,得研究如何在更新镜像的同时保留设置。
    Projection
        21
    Projection  
       2023-04-21 12:37:08 +08:00   2
    我想纠正一下 @kaedeair ,Docker 部署的 OpenWrt 容器是可以作为主路由的,也可以正常 PPPoE 拨号上号。

    我用 OpenWrt 容器做主路由只是为了避免在光猫上拨号,让自己可以对网络进行更加细节的控制。甚至我的 Docker 服务器只有一个网卡,只是在交换机上划分了 VLAN 。用 OpenWrt 而不是其他方法拨号是为了避免配置防火墙等,同时有开箱即用的 DHCP 、DNS 等功能。

    如果 OP 只是需要透明代理网关,使用对应工具的 Docker 镜像 + iptables 规则也可以做到,没有必要使用 OpenWrt 。或者可以自己基于 Alpine 、Debian 等基础镜像自己 DIY 一个。

    如下是使用 VLAN 进行单网口复用的方案( OP 的情况只需针对对两个接口分别创建 macvlan 网络即可,不需要使用 VLAN ):

    ```bash
    # 创建 macvlan 网络(假设 WAN 的 VLAN ID 为 10 ,LAN 的 VLAN ID 为 20 )
    WAN_VLAN_ID=10
    LAN_VLAN_ID=20
    docker network create --driver macvlan --opt parent=eth0.$WAN_VLAN_ID wan
    docker network create --driver macvlan --subnet 192.168.1.0/24 --gateway 192.168.1.1 --ip-range 192.168.1.0/28 --opt parent=eth0.$LAN_VLAN_ID lan

    # 导入 OpenWrt 镜像
    docker import https://downloads.openwrt.org/releases/22.03.3/targets/x86/64/openwrt-22.03.3-x86-64-rootfs.tar.gz openwrt:22.03.3

    # 只给 `--cap-add NET_ADMIN` 无法拨号,所以这里暂时用 `--privileged`
    # 如果不需要 PPPoE 拨号,可能 `--cap-add NET_ADMIN` 已经足够
    docker create --name openwrt --privileged --network lan openwrt:22.03.3 /sbin/init
    docker network connect wan openwrt
    docker start router
    ```

    不过在使用 macvlan 时需要注意几点:

    - 一般情况下,宿主机和使用 macvlan 网络的容器无法直接通信,解决方法见 [Using Docker macvlan networks]( https://blog.oddbit.com/post/2018-03-12-using-docker-macvlan-networks/);
    - 创建容器时指定的 IP 不必是 `--ip-range` 中指定的 IP ,根据此原理 OpenWrt 容器可以自己决定使用哪个 IP 。

    ---

    以下只是我的凭空臆想,我目前还没有在双网口机器上测试过!

    如果不想使用 OpenWrt 作为主路由,那么可以在 Ubuntu 上为 `eth0` 配置好静态 IP ,保证可以正常上网并开启 IP 转发。

    然后配置好 `eth1` 任意内网地址作为你的 LAN 地址( SSH 连接的地址),比如 192.168.1.120/24 。

    接着在 `eth1` 上创建 macvlan 网络,指定网关地址为 192.168.1.1 。(此时网关 IP 只是占位,并没有任何设备占用)

    然后参照 [Using Docker macvlan networks]( https://blog.oddbit.com/post/2018-03-12-using-docker-macvlan-networks/) 在 Ubuntu 上创建网络桥接到 macvlan 网络,地址为 192.168.1.1 。这样可以保证容器和宿主机之间相互通信没有问题,容器才可以通过 macvlan 网络正常上网。

    然后就是在容器中使用代理工具配置 iptables 了,这没有什么好说的。当然这样的方法还需要自己配置 DHCP 服务。

    ---

    上面的步骤之所以这么复杂是因为想要在一台机器上实现 NAT 和透明网关,而 macvlan 网络会导致宿主机和容器无法直接通信。如果 OP 有另外一台现成的路由器,那么问题可以直接简化为在创建 macvlan 网络并在 Docker 服务器上开启代理应用的容器。

    写的很粗糙,如果有什么问题欢迎指出。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5988 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 37ms UTC 02:51 PVG 10:51 LAX 19:51 JFK 22:51
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86