双网口主机通过docker安装openwrt实现路由

由于本人长期使用docker来进行一些服务的安装,pve这些底层为qemu的虚拟化方案,我感觉小鸡子无法承受,所以搞了2天,折腾了很多地方,最终搞定。分享出来避免大家踩坑。

先上个图康康:

运行界面

前置条件

大概得明白以下的一些内容:

  • Linux的使用
  • docker使用
  • docker网络模式,包括macvlan
  • openwrt配置与使用

不懂,折腾到具体的步骤自行百度?

方法

先后在网上学习了几位大佬的方法,其中主要使用的是洛水赋神的双网口解决方法,但是它的方法在我的小鸡子上貌似无法成功,其中主要的原因是校园网登陆问题。所以干脆直接用docker的网桥,用它来当NAT分发一个地址,然后把docker0网桥到外网的路由打通。看如下本人的网络拓扑图。

网络拓扑
其中,有两个物理网口,分别是enp1s0和enp2s0,enp1s0是连接到校园网,但是只能认证登陆,并且分配得到一个IP地址,无法通过macvlan虚拟化enp1s0来获得另外的IP地址,或许行,但是我没搞通。enp2s0则是另外一个网口,我将它连接到了我的台式机上,后续就作为lan口进行使用。

再看主机内部,其中主要和网络相关的部分,我用了两个容器,一个是用来登陆校园网的容器,里边运行了一个脚本来登陆校园网,保证小鸡子一直在线,由于它要保证enp1s0口有网,因此,让它使用docker网络中的host模式,直接使用主机网络,然后登陆认证页面拿上层路由地址。另外一容器就是OpenWRT,其中虚拟化了两个网口,分别是WAN口和LAN口,其中WAN口使用docker的bridge网络,使用docker的NAT功能,拿到docker0中的一个IP地址;另外一个LAN口则是使用macvlan模式,自己定义一个网段,然后让enp2s0虚拟化该macvlan来进行和windows的通信。

步骤

下面复现一下每个步骤,环境是:

  • Ubuntu 20.04 LTS
  • docker
  • J4125 双网口机子

Step 1 开起网卡混杂模式

查看网卡

	ip addr

PROMISC
如果没有 PROMISC 字段,则使用以下命令开起:

	ip link set enp1s0 promisc on
	ip link set enp2s0 promisc on

持久化一下,由于Ubuntu的采用的网络管理方式跟以前的版本有所不同,所以写一个简单的脚本

	vim /etc/network/if-up.d/promisc

然后填入以下内容,相当于是每次启动的时候,自动让网卡开起混杂模式。

#!/bin/bash

/sbin/ip link set enp1s0 promisc on
/sbin/ip link set enp2s0 promisc on

然后添加执行权限

	chmod +x /etc/network/if-up.d/promisc

Step 2 开起 IPv4 转发

在宿主机也就是小鸡子的Ubuntu上开起IPv4转发功能:

vi /etc/sysctl.conf

# 取消 net.ipv4.ip_forward = 1 的注释
# 或者添加 net.ipv4.ip_forward = 1

# 重新加载配置
sysctl -p /etc/sysctl.conf

Step 3 配置LAN口

先编写一个模板文件,作为docker启动的时候/etc/config/network网络配置的持久化文件:

	vim /home/[UbuntuUser]/openwrt/network

其中内容如下,这个其实是根据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 device
        option name 'br-lan'
        option type 'bridge'
        list ports 'eth0'

config interface 'lan'
        option ifname 'br-lan'
        option proto 'static'
        option ipaddr '192.168.10.2'
        option netmask '255.255.255.0'
        option ip6assign '60'

config interface 'wan'
        option ifname 'eth1'
        option proto 'dhcp'
        option gateway '172.17.0.1'
        option dns '8.8.8.8 8.8.4.4'

配置LAN口macvlan:创建一个命名为maclan的虚拟网卡,然后固定好IP地址:

	docker network create -d macvlan --subnet=192.168.10.0/24 --gateway=192.168.10.1 -o parent=enp2s0 maclan
	docker network ls

maclan

Step 4 创建openwrt容器

使用镜像创建docker容器,其中我采用的openwrt容器镜像是: sulinggg/openwrt:x86_64,我们先创建容器,并把lan口连接上

	sudo docker run --restart always --name openwrt -d --network maclan --privileged --ip 192.168.10.2 -v /home/bencorn/openwrt/network:/etc/config/network sulinggg/openwrt:x86_64 /sbin/init

然后进入docker配置一下密码:

	docker exec -it openwrt /bin/sh
	passwd

然后在连接enp2s0的windows上配置一个静态IP,这样就可以连接到LAN口了,配置OpenWRT

windows配置

浏览器输入:192.168.10.2,敲回车,如果不出意外应该可以登陆到openwrt

初次登陆

Step 5 配置WAN口

将openwrt容器连接到网桥上

	docker network connect bridge openwrt

WAN口

Step 6 配置各个端口

首先在web界面中配置LAN口,选择一个物理的接口eth0:

LAN口选择eth0

Step7 配置路由

这个也是比较危险的操作,可能小鸡子会被网络攻击,但是无所谓,开搞
进入openwrt容器,检查网络情况:

	docker exec -it openwrt /bin/sh
	ping 8.8.8.8
	ping www.baidu.com

查询
如果 ping 8.8.8.8 可以查询得到,说明已经联网了;如果 ping www.baidu.com无法连接到,说明dns查询得配置一下,直接在容器内运行

	echo "nameserver 8.8.8.8" > /etc/resolv.conf

如果还是无法联网,检查和配置宿主机路由,保证可以联网:

	iptables -t nat -L -n -v
	iptables -A FORWARD -i docker0 -o [你的外部网络接口] -j ACCEPT
	iptables -A FORWARD -i [你的外部网络接口] -o docker0 -j ACCEPT

查询路由并配置

其他

到这儿应该是大功告成了,反正我成了。

  • 如果还不行,可以尝试在静态配置的windows网络处设置备用DNS为1.1.1.1或者8.8.8.8
  • 如果还不行,则可以GPT-4
  • 如果还不行,则可以评论区留言
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要在Docker安装OpenWrt,您可以按照以下步骤进行操作: 1. 首先,您需要确保已经成功安装Docker。如果您还没有安装Docker,请先按照官方文档的指引进行安装。 2. 打开终端或命令行界面,并执行以下命令来拉取OpenWrtDocker镜像: ``` docker pull sulinggg/openwrt:armv8 ``` 这将下载并安装OpenWrtDocker镜像。 3. 创建一个名为"openwrt"的Docker容器,并将其与一个自定义的网络(macnet)进行连接。同时,为了使OpenWrt正常工作,还需要为容器提供特权权限。执行以下命令来创建容器: ``` docker run --restart always --name openwrt -d --network macnet --privileged sulinggg/openwrt:armv8 /sbin/init ``` 这将创建一个名为"openwrt"的容器,并在后台运行OpenWrt。 4. 要进入OpenWrt容器,执行以下命令: ``` docker exec -it openwrt bash ``` 这将进入OpenWrt容器的命令行界面,您可以在其中进行OpenWrt相关的操作和配置。 总结一下,要在Docker安装OpenWrt,您需要首先安装Docker本身,然后拉取OpenWrtDocker镜像,并创建一个带有特权权限的容器。最后,通过执行命令进入OpenWrt容器,以进行进一步的配置和操作。希望这些步骤对您有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [docker安装openwrt](https://blog.csdn.net/Semanteme/article/details/130979752)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Docker安装OpenWrt](https://blog.csdn.net/qq_21137441/article/details/130880006)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值