之前用了一个月的旁路由,设置按照教程做的,主路由网关、dns填n1旁路由的ip,ni旁路由的网关和dns填主路由ip
主路由负责dhcp广播,n1旁路由关闭dhcp。一直用的好好的。
结果今天重刷了coreelec9.2.2版本,然后docker拉取op镜像布置容器,一模一样的设置,怎么也上不了网,换了其它的几个op镜像都不行。真是要崩溃了。
具体表现为:docker的op中ping外网ok,就是主路由网关填写了容器中的op的ip之后,局域网的客户端全都不能上网。
不明白,op自己能联网,怎么下属的客户端电脑就不能联网呢?
辗转几天,找到了写教程的“黎记”兄弟,在他的帮助指导下开始新的尝试。以下是详细记录。
1、删除原来的镜像、容器、macvlan网络,一切先还原到最初。
2、重新创建macvlan网络,这次不用macnet名称,换了macvlan_lan(名称无所谓,就是方便识别),并且不开启网卡混杂模式
1 | docker network create -d macvlan --subnet=192.168.10.0/24 --gateway=192.168.10.1 -o parent=eth0 macvlan_lan |
3、创建op容器,黎记指出需要加入指定ip的命令
1 | docker run --name op --restart always -d --network macvlan_lan --privileged --ip 192.168.10.20 unifreq/openwrt-aarch64:latest /sbin/init |
结果出现一个错误提示:docker:Errorr esponse.from da emon:No command speci fied.
于是分开执行命令:
1 | docker run -d \ |
这次没有报错。
但是我知道,很多时候指定ip并不是必须的,后面才会越来越重要。
4、进OpenWrt字符界面修改ip参数
1 | docker exec -it OpenWrt bash |
此刻,做到这一步,其实和之前的很多次创建容器差别不大,解决问题的关键并不在这里,所以心里并没有什么期待。
但是我知道接下来,重点快来了。
5、在容器内直接ping检查是否有问题,进行修正
ping 192.168.10.1和ping 223.6.6.6检查是否连上主路由网关和外网
结果显示:
1 | bash-4. 4# ping 192. 168.10. 1 |
显然能连上网关但是连不上外网。
exit命令退出容器回到coreelec,输入 route -n查看了路由表参数
又输入 ifconfig查看了网卡配置尤其是eth0的参数。
然后输入命令
1 | route add default gw 192.168.10.1 |
修正了静态路由默认网关,这样以后ping 223.6.6.6也通了。
6、重启N1,再次ping 223.6.6.6也没问题。这时候本以为“一切回到正轨了“,
后面就是主副路由互指对方ip为自己的网关和dns,保存并应用。
以及添加防火墙转发命令iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
重启防火墙。
为了减少麻烦,我没有先互指网关,而是把客户端电脑网关设置为docker旁路由的ip测试。
结果是
客户端电脑依然打不开网页。why?
7、一夜过后,”黎记“兄弟发来留言:有办法解决了。
docker内op网络-防火墙-基本设置:”转发“一项改成”接受“,保存并应用
。客户端电脑就可以上网了。
另外还有一个方法是永久关闭op的防火墙。
docker exec -it OpenWrt bash进入op字符界面,
shell 命令:
1 | /etc/init.d/firewall disable && /etc/init.d/firewall stop 表示关闭防火墙并且重启后也不会自动打开。 |
虽然不知道为什么这次刷机会出现这个莫名其妙的问题,但是总算解决的。在此做个记录留给自己以后回顾,也给遇到同样问题的人一个参考。
并感谢”黎记“兄弟的无私帮助。
但是,几天后我发现这样处理还是有问题的,上网没问题了,但是op内的插件都不起作用了,翻遍了互联网关于coreelec的帖子。最后,我怀疑还是新版和旧版之间的差异。那么差异是什么?除了升级的一些功能以外,然后我发现我之前刷过的9.21是一个修改版专门编译了ipset进去,疑心就是这个。
于是替换9.21版带ipset的kernel.img,但是发现卡在开机logo上。
只好再重刷,刷好后再替换9.02核心带ipset的kernel.img,终于好了。
-------------本文结束感谢您的阅读-------------