找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 17643|回复: 36

[N1盒子] 【原创】在CoreELEC的docker中安装openwrt让斐讯N1盒子做主路由提升家庭网络的science值

  [复制链接]
发表于 2020-4-19 09:44 | 显示全部楼层 |阅读模式
本帖最后由 Iloves73g 于 2020-4-29 11:59 编辑

利用macvlan技术在CoreELEC中通过docker中安装openwrt让斐讯N1盒子做主路由提升家庭网络的科学值--Iloves73g原创文章,转载请注明出处。谢谢!





1.CoreELEC主机中:,默认的CoreELEC可能不支持ipset,可以自行编译内核后用 modprobe加载。内核和源码github上都有。

Install Docker Service (Kodi的源中就有)

Install Entware using command installentware   
opkg install  ppp-mod-pppoe
opkg install  ip-full
opkg install ipset
Install pipework
Install docker images  (docker import openwrt-armvirt-64-default-rootfs.tar.gz TAGNAME )
docker run --name op --net=none --restart always -d --privileged TAGNAME /sbin/init

只做软路由,我们就关闭wifi,当然我们也能用wifi做AP,那样N1就是无线路由器,这里不讨论了。

connmanctl disable wifi



dockerrun --name op --restart always -d --privileged TAGNAME /sbin/init
要理解docker命令,请看:
https://www.runoob.com/docker/docker-command-manual.html


要做主路由,我们当然是要创建VLAN,小主不会啊,那么,谁能胜此大任啊?交给系统服务吧,建一个服务文件然后systemctl daemon-reload下就好。注意母网卡的接口名,这里为eth0,有可能需要替换哦。当然也能用脚本自动取得这个接口外,我就懒得改了。建两个Vlan, eth0.1, eth0.2  eth0.1我们将交给docker中的openwrt用做LAN,eth0.2我们将交给docker中的openwrt做WAN去连上级网络。 因为我们可能用到一些高级IP操作命令,这些命令很可能是entware中才有的,因此,我们需要告诉系统下,让它在entware服务启动好了后再来创建我们的vlan吧。 用一句 After=entware.service就能搞定。

CoreELEC:~/.kodi/temp # cat /storage/.config/system.d/vlanstart.service
[Unit]
     Description=Set VLAN interface in multimedia VLAN
     After=entware.service
              Before=service.system.docker.service

     [Service]
         ExecStartPre=/usr/sbin/vconfig add eth0 1
         ExecStartPre=/usr/sbin/vconfig add eth0 2
         ExecStartPre=/usr/sbin/modprobe -q pppoe

         ExecStart=/usr/sbin/ip link set eth0.1 promisc on
         ExecStartPost=/usr/sbin/ip link set eth0.2 promisc on

     [Install]
     WantedBy=multi-user.target
         
有了VLAN后,就需要关注下我们亲爱的docker服务的启动顺序,一定要在我们的vlanstart服务后面啊,要不我们会巧妇无米... 因此,修改下服务文件告诉系统如何来办吧:
         
CoreELEC:~/.kodi/temp # cat/storage/.config/system.d/docker.service
[Unit]
Description=Docker Application ContainerEngine
Documentati on=https://docs.docker.com
After=vlanstart.service

[Service]
Type=notify
Environment=PATH=/bin:/sbin:/usr/bin:/usr/sbin:/storage/.kodi/addons/service.system.docker/bin
ExecStartPre=/storage/.kodi/addons/service.system.docker/bin/docker-config
EnvironmentFile=-/storage/.kodi/userdata/addon_data/service.system.docker/config/docker.conf
ExecStart=/storage/.kodi/addons/service.system.docker/bin/dockerd--exec-opt native.cgroupdriver=systemd \
                                                                 --log-driver=journald \
                                                                 --group=root \
                                                                 $DOCKER_DAEMON_OPTS \
                                                                 $DOCKER_STORAGE_OPTS

ExecReload=/bin/kill -s HUP $MAINPID
TasksMax=8192
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
TimeoutStartSec=0
Restart=on-abnormal

[Install]
WantedBy=multi-user.target
Alias=docker.service

别忘记启动服务哦:
systemctldaemon-reload
sytemctlenable vlanstart

Docker服务和Vlan搞定下了,剩下的我们就是告诉Docker instance,用上我们的vlan哦。 简单点,直接用pipework来搞定吧。 pipework是一个git上的工具,它是shell脚本,依赖于entware中的ip-full才能执行,因为它用到了ip netns这样的处理网络命名空间的神操作,CoreELEC本身用不到,它没有这个。这就是我们为什么要费力去装上entware的原因了。Macvlan都由 pipework来处理了,如果要想了解它的工作原理,只需阅读下pipework的源代码就可。

CoreELEC:~/.kodi/temp # cat/opt/bin/attachDockerNetwork.sh
#!/bin/sh
DockerName=op
DockerID=`docker inspect $DockerName -f{{.Id}}`
IpLanPrefix=192.168.2
IPWanPrefix=10.0.128
/bin/sh  /storage/.opt/bin/pipework eth0.1 -i eth1  $ DockerName  0/0
/bin/sh  /storage/.opt/bin/pipework eth0.2 -i eth2  $ DockerName  0/0

/storage/.kodi/addons/service.system.docker/bin/dockerexec -it $ DockerName  /etc/init.d/networkrestart

/storage/.opt/sbin/ip link add linketh0.1 dev eth01m type macvlan mode bridge
/storage/.opt/sbin/ip addr add$IpLanPrefix.2/24 dev eth01m
/storage/.opt/sbin/route add default gw$IpLanPrefix.1
/bin/bash -c "echo -e nameserver$IpLanPrefix.1'\n'nameserver 8.8.4.4 >> /etc/resolv.conf"           


CoreELEC:~/.kodi/temp # cat/storage/.config/autostart.sh
#!/bin/bash
(
  /bin/sh /opt/bin/attachDockerNetwork.sh
) &

CoreELEC:~ # cat /opt/bin/pipework
https://github.com/jpetazzo/pipework
wget https://raw.githubusercontent.com/jpetazzo/pipework/master/pipework

注意:pipework用到了ip netns这个命令来管理docker中的网络命名空间,可coreelec中原来带一个没有netns管理的ip包,pipework如果先找到这个就用,那是不行的,无法工作。需要用entware中的那个ip-full包中的ip,那个支持所有ip命令参数。 因此在系统自启动时可能因为指向的ip命令不对,需要设置一下路径。也就是$PATH这个变量,应该为PATH=/opt/binPATH, entwaer安装后的新ip包的可执行文件是在/opt/bin下。直接修改/opt/bin/pipework这个文件吧。要不然会出现在自启动时失败,而你在ssh命令中执行就会成功的现象。 原因是sh可用时entware已经完全接管了,而系统自启动脚本执行时,entware有可能还在路上


现在我们就能玩容器了,让我们进入吧:

DockerName=op
docker exec -it $DockerName bash

就能进入openwrt容器了
192.168.1.2是CoreELEC的IP,
192.168.1.1是openwrt的LAN IP,也就是你以后的家庭网关的IP。


2.Openwrt容器中:
root@OpenWrt:~# cat /etc/config/network

config interface 'loopback'
              optionifname 'lo'
              optionproto 'static'
              optionipaddr '127.0.0.1'
              optionnetmask '255.0.0.0'

config interface 'lan'
              optiontype 'bridge'
              optionifname 'eth1'
              optionproto 'static'
              optionnetmask '255.255.255.0'
              optionip6assign '60'
              optionipaddr '192.168.1.1'

config interface 'wan'
              optionifname 'eth2'
       option _orig_ifname 'eth2'
       option _orig_bridge 'false'
              optionproto 'pppoe'
              #PPPoe拨号时的用户名密码,通常由宽带运营商提供
              optionusername '018880xxxxxx'
              optionpassword 'xxxxxx'
              
              optionkeepalive '5 5'
              optionipv6 'auto'


LAN侧能ping通网关和WAN口的地址,但是连不上外网,表明防火墙的NAT链路有问题:  

添加LAN和WAN自定义动态地址转换的防火墙规则解决问题:

iptables -A FORWARD -i eth1 -o eth2 -mconntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth2 -jMASQUERADE
iptables -A FORWARD -i eth1 -o eth2 -jACCEPT
   



现在LAN里通过交换机连上来的所有电脑都能上网了。但是我们的CoreElec无法上网,查一下,能连上LAN的网关192.168.1.1,但无法Ping通WAN口通过PPPoe取得的ip地址。
分析下iptablesr的各个链,这种情况的原因应该出在FORWARD链中. 从br-lan网口的FORWARD开始,链接链地查看下iptables链的数据包,在CoreELEC主机的docker外不断地ping PPPoe WAN网口的IP, 同时用iptables的数据包统计来看看哪个链有DROP的数据包。这个链就是问题链。
查明是zone_wan_dest_ACCEPT 上的规则有问题,cstate=INVALID的链拦着了不少的数据包。
fw3print | grep INVALID来找到它,把它删除或者指明下源IP为我们CoreELEC主机的数据包让它ACCEPT接受下。再试就完美了。将其加入自定义的防火墙规则,人生就完美了!

iptables -t filter -I zone_wan_dest_ACCEPT -s 192.168.1.2 -o pppoe-wan -m conntrack --ctstate INVALID-j ACCEPT

删除下面这行,如果有必要。要不主机IP 192.169.1.33可能连不上外网。

#iptables -t filter -A zone_wan_dest_ACCEPT -o pppoe-wan -m conntrack --ctstate INVALID -m comment--comment "!fw3: Prevent NAT leakage" -j DROP
不方便明白如何删除怎么办?那就直接用删除命令iptables -D在万能的自定义防火墙规则中强力插入:
iptables -t filter -D zone_wan_dest_ACCEPT -o pppoe-wan -m conntrack --ctstate INVALID -m comment--comment "!fw3: Prevent NAT leakage" -j DROP

这样我们就能配好交换机的TAG UNTAG和Vlan ID. 然后接好网线,把我们的N1的网线接在同属于Vlan ID=1和Vlan ID =2的TAG交换机口上,光猫或上级网络的接入网线接在交换机Vlan=2的UnTAG网口上,我们的LAN侧的其它机器包括我们的无线AP的网线就接在交换机上Vlan ID=1的UnTAG口上。 在局域网内的电脑上的浏览器中直接http://192.168.1.1开始配置和享用你的新软路由吧。很香的吧。什么低调上网,流控,QOS,过滤广告,控制上网时间,控制网络应用类型等等都不是事。
只有你想不到的,没有你做不到的。
与此同时,Kodi用上好的电视源,也能看电视,在LAN中放台文件服务器,当然NAS也行啊,把你喜欢的电影文件放在上面,Kodi都能访问。没服务器的,在N1的USB口上接个移动硬盘放上电影也OK啦。 N1在放电影时,USB口上也可接解码器,在Kodi中配置下声音输出设备,你就可以通过解码器和你的HIFI音箱看电影和电视了,现在,你的高清电视中和电影的环绕立体声不只是在电影院才能享用哦:)

KODI的玩法很多,完全可以取代机顶盒和高清电影播放器,支持4K视频,输出效果非常专业。 有了外置USB解码器或网络音频流DS设备后,它的价值就远胜市面上价格数千元的专业高清播放器。

在此贴出CoreELEC自编译的内核吧。V9.2.2版本的。
https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=3998915&page=1&extra=#pid9074527



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

评分

参与人数 5恩山币 +7 收起 理由
cpydy + 1 恩山全体路由党向你学习!
sfezen + 1 强大的恩山!(以下重复1万次)
hcyme + 2 人走茶凉、完事删贴,不好这样!
luhua + 2 你是真的牛逼👍
jsjie + 1 感谢你的分享,无论怎样,你都是最无私的人!来,说说,你E盘上还有啥一起给我吧!

查看全部评分

只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
 楼主| 发表于 2020-4-19 10:06 | 显示全部楼层
这个帖子需要有点linux基础的朋友阅读。
当然有全自动化的。
这个帖子中的原理适用所有linux类的系统。 包括群晖,centos, ubuntu, armbina,  安卓,甚至mac os x等。
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2020-4-19 10:34 | 显示全部楼层
恩山,你教会了我很多
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2020-4-19 10:52 | 显示全部楼层
教会了我很多
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2020-4-19 11:05 | 显示全部楼层
就这种帖子还好意思卖钱,唉,一看就是机器翻译啊

点评

机器翻译?你能找到外文原文在哪里?  详情 回复 发表于 2020-4-19 11:24
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-19 11:24 | 显示全部楼层
sealw 发表于 2020-4-19 11:05
就这种帖子还好意思卖钱,唉,一看就是机器翻译啊

机器翻译?你能找到外文原文在哪里?

点评

他是说你太强,你不是人,你是机器人,你这么快放出固件,这么快放出教程,佩服。  详情 回复 发表于 2020-4-25 22:15
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2020-4-19 11:44 | 显示全部楼层
感谢分享!!!!
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2020-4-19 11:59 | 显示全部楼层
大佬,可以发下,编译好的内核吗,手上没电脑搞不了
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2020-4-19 12:07 | 显示全部楼层
发自内心就觉得牛啊··~~这样直接就增加了N1是实际使用价值,高清播放器+路由(我个人觉得最佳方案还是旁路由)。直接实用价值增加了一倍,更不说方便度了,不过内就是设置太麻烦了。直接拦截了众多拥暼啊··
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2020-4-19 22:08 来自手机 | 显示全部楼层
小白全部看懵圈了  这样就可以实现n1既能低调上网又能kodi装各种视频插件低调看视频了吧
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2020-4-20 10:14 | 显示全部楼层
在CoreELEC的docker中安装openwrt让斐讯N1盒子做主路由
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2020-4-20 11:49 | 显示全部楼层
慢慢理解吗,内容很丰富
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2020-4-20 12:18 | 显示全部楼层
看标题,似乎解决了我纠结已久的问题,原本n1做主路由,但是家里也有4k原盘播放需求,但是又懒得再买一个n1了。这么干似乎能省一台设备

点评

同时省电。环保啊。  详情 回复 发表于 2020-4-21 08:08
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-21 08:08 | 显示全部楼层
alvin.zhn 发表于 2020-4-20 12:18
看标题,似乎解决了我纠结已久的问题,原本n1做主路由,但是家里也有4k原盘播放需求,但是又懒得再买一个n1 ...

同时省电。环保啊。
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2020-4-21 08:30 | 显示全部楼层
开docker后播放4k会卡吧

点评

当然不会啊。  详情 回复 发表于 2020-4-21 20:31
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-9-28 14:03

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com

快速回复 返回顶部 返回列表