外贸电视盒子HK1 BOX在Docker安装OpenWrt

实现旁路由功能

 

 

为什么用旁路由?

准备换个好一点的主路由,用了几年的K2P没有WiFi6,配不上我的AX210和千兆宽带,但是好一点的路由器又不能刷固件。上网的稳定性是优先考虑的,暂时不确定电视盒子做主路由是否可靠,不想冒险折腾。因此用来做旁路由,即使旁路由挂了,最多影响不能科学上网。

 

前置步骤:

HK1 BOX已经刷入Armbian并且安装好Docker,Portainer管理面板。

主路由:K2P,OpenWrt固件,下载地址

一、打开网卡混杂模式

混杂模式就是接收所有经过网卡的数据包,包括不是发给本机的包,即不验证MAC地址。普通模式下网卡只接收发给本机的包(包括广播包)传递给上层程序,其它的包一律丢弃。Linux下网卡的混杂模式浅谈 - 腾讯云开发者社区-腾讯云 (tencent.com)

1.    通过SSH登录到电视盒子

输入ip addr或者ifconfig,回车,查看并记录网卡名称、IP地址;

图片1.png

 

2.    打开网卡混杂模式

命令:

sudo ifconfig 你的网卡名 promisc

示例:

sudo ifconfig eth0 promisc

检查是否已经打开网卡混杂模式,如果显示有“PROMISC”,则为已经打开。

命令:

ifconfig 你的网卡名称

示例:

ifconfig eth0

图片2.png

 

二、创建Docker网络

1.    创建一个macvlan网络

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

docker network create -d macvlan \
--subnet=你的子网 \#格式:ip_range\子网掩码,如192.168.3.0/24
--gateway= 你家出口网关 \
-o parent=开启了混杂模式的网卡名称 \
给创建的docker网络命个名

以我为例,主路由IP(出口网关)为10.0.0.1,子网掩码为255.255.255.0(24),要做旁路由的设备网卡名称为eth0,要创建一个名为openwrt_net的网络,则命令为:

docker network create -d macvlan --subnet=10.0.0.0/24 --gateway=10.0.0.1 -o parent=eth0 openwrt_net

如果你的主路由IP为192.168.5.1,则subnet=192.168.5.0/24,详细帮助可在ssh输入docker network help。

2.    检查网络是否创建成功

docker network ls

图片3.png

 

三、创建并启动容器,并加入你创建的docker网络

1.  根据设备的架构确定对应的镜像

命令:

arch
#得到返回若是aarch64,则为arm64架构
#得到返回若是armv6l、armv7l、armhf等等,则为32位

以我为例,HK1 BOX是选择镜像:sulinggg/openwrt:armv8

 

项目地址GitHub - SuLingGG/OpenWrt-Docker: Build OpenWrt Docker Images For Raspberry Pi 1~4 (Daily Update)

图片4.png

 

创建并启动容器

docker run --restart always \重启策略:总是自动重启
--name 容器名称\#容器名称
-d \#后台运行
--network 你的docker网络名称\
--privileged \#特权模式下运行
openwrt:latest \#镜像名称
/sbin/init#启动命令,相当于docker每次启动都会运行这个命令

以我为例, docker网络名称为openwrt_net,要创建一个叫OpenWrt的容器,镜像为sulinggg/openwrt:armv8,则输入:

docker run --restart always --name OpenWrt -d --network openwrt_net --privileged sulinggg/openwrt:armv8 /sbin/init


四、配置容器网络

1.    编辑OpenWrt网络配置文件

登录Portaniner面板,进入软路由容器的Bash命令控制台,编辑OpenWrt的网络配置文件。


P.S:容器列表中的IP地址是docker分配的,而在网络配置文件中写入的IP地址才是浏览器访问的地址。我试过因为填了容器列表的IP地址,结果浏览器打开总是“404 not found”,折腾了半天没解决,最后才理清,而那个IP在硬路由已经分配给另一个设备了,我换个IP马上解决。

vim /etc/config/network

说明:
按i进入编辑模式
ipaddr即软路由的IP,在浏览器输入这个IP访问软路由后台
gateway、dns填硬路由的IP

图片5.png

图片6.png

图片7.png

图片8.png

 

2.    按下键盘Esc键退出编辑模式,输入:wq保存并退出 

提醒:进入编辑状态后,系统默认保存了一份文件,即使不编辑,也要输入:q退出,否则下次再进来编辑会提示有重复文件!扩展阅读:解决用vim打开文件提示“Found a swap file by the name ……”的问题

:wq:表示保存退出

:wq!:表示强制保存退出

:x:表示保存退出

:q:在vim中表示退出

:q!:表示强制不保存退出,不对文件进行保存

图片9.png

 

运行命令重启网络

/etc/init.d/network restart

图片10.png

 

五、登录旁路由Web管理面板进行设置

参考上面的option ipaddr,则旁路由的管理地址为10.0.0.2,通过浏览器访问。

用户名:root

密码:password(建议登录后尽快修改)


六、禁止旁路由DHCP

IP地址让主路由统一分配,因此要禁止旁路由的DHCP。

1.   在 “网络 - 接口 - Lan - 修改” 界面中,勾选下方的 “忽略此接口(不在此接口提供 DHCP 服务)”,点击“保存并应用”。

2.   在“网络 - DHCP/DNS- 高级设置”中禁用所有IPv6服务,点击“保存并应用”。

3.   在“网络”-“防火墙”中,关闭“SYN-flood 防御”,点击“保存并应用”。

4.   重启旁路由。

 

七、使用旁路由上网

1.    所有的设备都使用旁路由

登录主路由(以openwrt为例),在 “网络 - 接口 - Lan - 编辑 – DHCP服务器 – 高级设置”添加两个选项,保存,然后“保存及应用”。

  • 3,你的网关IP  ——代表网关,IP就是旁路由的IP

  • 6,你的网关IP  ——代表DNS,IP就是旁路由的IP

图片11.png

 

2.    指定设备才使用旁路由

在指定的设备上,手动设置IP地址,将其“网关”和“首选 DNS”改为旁路网关的IP地址,即指向旁路由的IP,在本例中就是10.0.0.2。

更具体的看这里在Docker 中运行 OpenWrt 旁路网关 | 美丽应用 (mlapp.cn)

八、其他

1.    设置防火墙规则

我用的镜像默认加进去这条规则 ,我还不知道有什么用的,有的文章说没必要。

路径:网络 > 防火墙 > 自定义规则

iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE


暂未解决的问题:

我在Passwall无法获取节点,但是在酸酸乳就可以正常获取。另外,不知道为什么在电脑打开不了FB和INS网站,但在手机上可以打开他们的APP。如果要配置科学上网,请参考我之前的文章(一回家就出国——OpenWrt固件路由器ShadowSocketR Plus+ 科学上网 - 米该 Blog (migai.top))。

 

 

本文是参考如下文章并结合自己的操作实践整理而成,算是做个备忘吧。

https://sspai.com/post/68511

树莓派(其他armbian发行版)配置为Openwrt旁路由 - 知乎 (zhihu.com)

docker 安装 openwrt 并实现科学上网详细步骤 (cfmem.com)

https://www.right.com.cn/FORUM/thread-4181997-1-1.html

仅有一条评论

发表评论