外贸电视盒子HK1 BOX在Docker安装OpenWrt
实现旁路由功能
为什么用旁路由?
准备换个好一点的主路由,用了几年的K2P没有WiFi6,配不上我的AX210和千兆宽带,但是好一点的路由器又不能刷固件。上网的稳定性是优先考虑的,暂时不确定电视盒子做主路由是否可靠,不想冒险折腾。因此用来做旁路由,即使旁路由挂了,最多影响不能科学上网。
前置步骤:
HK1 BOX已经刷入Armbian并且安装好Docker,Portainer管理面板。
主路由:K2P,OpenWrt固件,下载地址
一、打开网卡混杂模式
混杂模式就是接收所有经过网卡的数据包,包括不是发给本机的包,即不验证MAC地址。普通模式下网卡只接收发给本机的包(包括广播包)传递给上层程序,其它的包一律丢弃。Linux下网卡的混杂模式浅谈 - 腾讯云开发者社区-腾讯云 (tencent.com)
1. 通过SSH登录到电视盒子
输入ip addr或者ifconfig,回车,查看并记录网卡名称、IP地址;
2. 打开网卡混杂模式
命令:
sudo ifconfig 你的网卡名 promisc
示例:
sudo ifconfig eth0 promisc
检查是否已经打开网卡混杂模式,如果显示有“PROMISC”,则为已经打开。
命令:
ifconfig 你的网卡名称
示例:
ifconfig eth0
二、创建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
三、创建并启动容器,并加入你创建的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)
创建并启动容器
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
2. 按下键盘Esc键退出编辑模式,输入:wq保存并退出
提醒:进入编辑状态后,系统默认保存了一份文件,即使不编辑,也要输入:q退出,否则下次再进来编辑会提示有重复文件!扩展阅读:解决用vim打开文件提示“Found a swap file by the name ……”的问题
:wq:表示保存退出
:wq!:表示强制保存退出
:x:表示保存退出
:q:在vim中表示退出
:q!:表示强制不保存退出,不对文件进行保存
运行命令重启网络
/etc/init.d/network restart
五、登录旁路由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
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))。
本文是参考如下文章并结合自己的操作实践整理而成,算是做个备忘吧。
树莓派(其他armbian发行版)配置为Openwrt旁路由 - 知乎 (zhihu.com)
收下,感谢分享。