我先陈述一下环境吧!
硬件:畅网双网口软路由 系统:ubuntu 22.04 网络环境:学校工位,通过一个静态 ip 上网(只有一个静态 ip ),软路由的 eth0 连接到外网。eth1 连接了一个小交换机。
各位大佬帮帮忙,卡在这个问题上好久好久了。自编译了一个支持 docker 部署的 openwrt 镜像,但是不想在真机上部署,想把它部署在 docker 上。现在搜了好多好多教程,基本的配置方法大概是: 1 、开启网卡混杂模式 2 、创建一个 macvlan 的虚拟网络,然后将 lan 口(在我的机器上是 eth1 )加入这个 macvlan 的网络 这两步已经成功,并且能够进入 web 管理界面,但是现在的问题就是,我不知道该如何配置 wan 口也就是上网的口(在我的机器上是 eth0 ),看了好多教程都是开启 DHCP 等待分配,但是学校工位的网络是给一个网口给一个静态 ip ,没找到类似这种的教程,望大佬们帮帮忙给小弟一个具体的 Docker 部署 openwrt 的方法,万分感谢!
1
kaedeair 2023-04-20 16:07:05 +08:00
docker 部署的 openwrt 只能做旁路由不能做主路由
|
2
JOKERdmb OP @kaedeair 啊!! T T ,那还需要再给镜像加一个网络吗(我现在只有一个 macvlan ,用在了 lan 口),直接 DHCP 就可以吗
|
3
EasonSummer 2023-04-20 16:14:24 +08:00
我没实践过 搜到这个不知道对你有没有帮助。https://www.cnblogs.com/luoshuifushen/p/16989469.html
|
4
JOKERdmb OP @EasonSummer 我来康康!!!
|
5
mohumohu 2023-04-20 16:36:18 +08:00
其实你有没有考虑过你真的需要 openwrt 吗?你都能部署 docker 了,那 openwrt 提供的服务是不是对应的 docker 也可以提供
|
7
EasonSummer 2023-04-20 16:43:00 +08:00
也是,如果要富强,v2rayA 或 clash 的 docker 都能办到也能透明代理。其他业务 docker 更是可以了
|
9
JOKERdmb OP @EasonSummer 我其实也就是富强,是不是没有必要非要 op
|
12
kaedeair 2023-04-20 16:57:59 +08:00
你这个需求,直接 linux 跑代理就行了啊
|
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 记得修改里面的配置,后面自己弄吧 |
14
totoro625 2023-04-20 17:02:01 +08:00
你可能仅仅需要一个能配置机器代理的程序 ShellClash: https://github.com/juewuy/ShellClash
|
15
luckjoe680 2023-04-20 17:02:06 +08:00 via Android
@JOKERdmb 跑个 clash 不比 passw 强?
|
17
JOKERdmb OP @luckjoe680 我是想软路由接一个交换机,然后笔记本啥的客户端接上去就能富强,小猫也能做到吗
|
18
cwbsw 2023-04-20 19:42:52 +08:00
docker 设计是部署应用的,网络配置就是残废。
你的需求建议用 LXC 来解决,和 docker 同样是基于 linux 容器技术,但是功能强大的多。 |
19
luckjoe680 2023-04-21 07:39:36 +08:00 via Android
@JOKERdmb 小猫就是用来干这个的呀 openwrt 上也是用小猫呀
|
20
libook 2023-04-21 12:22:20 +08:00
Docker 是可行的,我曾经使用 OpenWrt 官方的 rootfs 镜像成功做过旁路网关,几台设备配置网关为这个 OpenWrt 的地址实现透明代理,但已经忘了怎么配置的了。
可以参考这个,但不确定是不是我最终参考的 https://sspai.com/post/68511 不过有两点不是很好。 一个是容器几乎劫持了宿主机,包括但不限于 tty ,这个跟用容器来做环境隔离避免污染的预期不大相符。 另一个是做的所有配置更改都是在容器内部,重新部署就全都丢失了,得研究如何在更新镜像的同时保留设置。 |
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 服务器上开启代理应用的容器。 写的很粗糙,如果有什么问题欢迎指出。 |