恩山无线论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6576|回复: 67

[N1盒子] 【原创】docker运行OpenWRT借助vlan实现单臂全功能主路由,支持WiFi 与IPv6 PPPoE

    [复制链接]
发表于 2019-8-28 11:25 | 显示全部楼层 |阅读模式
本帖最后由 heq 于 2019-11-5 09:57 编辑

N1一直运行armbian作为主路由,最近响应小狮子的“充分榨干一台N1”的号召,试着在N1上安装了docker并启用OpenWRT容器。开始时没有设置VLAN,只能将无线网络作为LAN、有线网口作为WAN配给容器,具体参见Docker内OpenWRT设置成主路由,为WiFi接入的客户提供源自有线网口的网络服务

近来改进了方案,结合单臂路由之openwrt vlan实现 ,armbian下用vlan划分eth0给OpenWRT容器作为WAN与LAN接口,借助Netgear WNDR4300路由器成功实现主路由功能:支持光猫直接拨号、IPv6等各种功能。armbian下配置WiFi 5G频段,也分配给容器作为LAN接口。

本方案在armbian_5.60_aml-s9xxx_debian_stretch_default_4.18.7_20180922.img.xz与armbian_5.77_aml-s905_debian_stretch_default_5.0.2_20190401.img.xz上均测试通过(感谢XQ7提供的稳定版Armbian),OpenWRT用的是LEDE 官版18.06.2。

IP设定
如果希望支持IPv6,必须指定IPv6地址。如果暂时不能确定可以用IPv6 link-local地址(fe80::xxxx:xxff:fexx:xxxx)替代,不会影响正常使用。
  1. armbian(host)       IPv4 192.168.1.254       IPv6 fe80::xxxx:xxff:fexx:xxxx/64
  2. openwrt(container)  IPv4 192.168.1.1
复制代码



设置前准备
1 N1刷好armbian系统,参考 N1刷入Armbian后换软件源、安装Docker并提速  安装好docker。
2 WNDR4300刷入标准OpenWRT,缺省VLAN未做修改(eth0.2 as WAN,eth0.1 as LAN)

设置后效果
N1“寄生”于WNDR4300并替换成为家庭主路由,提供全功能网关服务。底层硬件均由底层OS控制并提供服务,比如OpenWRT@WNDR4300控制双频WiFi,armbian@N1控制单频WiFi。

总体安排
  • N1接入WNDR4300(LAN4),设置vlan,导入openwrt镜像。
  • WNDR4300设置VLAN(指定LAN4连通不同VLAN)
  • 重启WNDR4300与N1,确认VLAN生效,N1与WNDR4300均能正常访问
  • N1配置docker网络,初次启用openwrt,设置pppoe拨号与其它服务
  • WNDR4300关闭DHCP与PPPoE服务
  • 重启WNDR4300与N1,docker内openwrt正式取代原有路由服务。配置完成



评分

参与人数 6恩山币 +9 收起 理由
chenb1 + 2 强大的恩山!(以下重复1万次)
zk6685 + 2 感谢你的分享,无论怎样,你都是最无私的人!来,说说,你E盘上还有啥一起给我吧!
bwtogo + 1 面对这种帖子,我内心复杂,真不知道说什么好……
hcyme + 2 面对这种帖子,我内心复杂,真不知道说什么好……
enzoye + 1 Armrian vlan docker openwrt主路由 强!!
tinylion + 1 一看就是觉得高端、大气、上档次!

查看全部评分

本帖被以下淘专辑推荐:

我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2019-8-28 11:26 | 显示全部楼层
本帖最后由 heq 于 2019-11-5 10:00 编辑

具体步骤
1 接线按如下
N1单臂路由接线.png

2 armbian@N1设置

2.1 vlan划分
  1. # vi /etc/network/interfaces
  2. ...
  3. auto eth0
  4. allow-hotplug eth0
  5. iface eth0 inet  manual

  6. allow-hotplug wlan0
  7. iface wlan0 inet manual
  8. ...
复制代码

  1. # vi /etc/network/interfaces.d/bridgevlan
  2. auto  eth0.2
  3. iface eth0.2 inet manual
  4.     vlan-raw-device eth0
  5.     up ip link set eth0.2 promisc on

  6. auto  eth0.1
  7. iface eth0.1 inet manual
  8.     vlan-raw-device eth0

  9. auto  br-lan
  10. iface br-lan inet static
  11.     address 192.168.1.254
  12.     netmask 255.255.255.0
  13.     gateway 192.168.1.1
  14.     dns-nameservers 192.168.1.1
  15.     bridge_ports eth0.1 wlan0
复制代码


2.2 导入openwrt镜像
  1. # docker import https://downloads.openwrt.org/releases/18.06.2/targets/armvirt/64/openwrt-18.06.2-armvirt-64-default-rootfs.tar.gz openwrt:18.06.2
复制代码


2.3 可选 monitorix设置,参考monitorix监控Armbian系统状态。针对本次设置,网络接口的检测要略做调整
  1. # vi /etc/monitorix/monitorix.conf
  2. eth0.11 --> eth0.2
  3. eth0.22 --> eth0.1
复制代码


3 WNDR4300 VLAN设置
按图示通过Luci界面进行设置
OpenWRT-Luci-Network.png
4 重启N1与WNDR4300启用VLAN
N1与WNDR4300应均能访问,WNDR4300仍然提供主路由服务,进入armbian确认vlan生效
  1. # ifconfig
  2. br-lan: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
  3.         inet 192.168.1.254  netmask 255.255.255.0  broadcast 192.168.1.255
  4. ...

  5. docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
  6. ...

  7. eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
  8. ...

  9. eth0.1: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST>  mtu 1500
  10. ...

  11. eth0.2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
  12. ...
复制代码
可以看到eth0.1与eth0.2与docker0 界面,前述设置成功,进入下一阶段的docker设置

5 armbian@N1设置

5.1 创建docker网络,注意第一条命令将把armbian IP更改为gateway指定的地址。如果两个地址不符,该命令执行完毕后armbian将会失联。
  1. # ifconfig br-lan | grep fe80
  2. fe80::xxxx:xxff:fexx:xxxx

  3. # docker network create -d bridge --subnet=192.168.1.0/24 --gateway=192.168.1.254 --subnet=fe80::xxxx:xxff:fexx:xxxx/64 --gateway=fe80::xxxx:xxff:fexx:xxxx --ipv6 -o "com.docker.network.bridge.name"="br-lan" lanet

  4. # docker network create -d macvlan -o parent=eth0.2 wanet
复制代码


5.2 启动镜像,连接网络
  1. # docker run -d --restart always --name openwrt --network lanet --privileged --sysctl net.ipv6.conf.all.disable_ipv6=0 openwrt:18.06.2 /sbin/init
  2. # docker network connect wanet openwrt
  3. # docker start openwrt
  4. # docker exec -it openwrt sh
复制代码

6 进入openwrt@docker,设置PPPoE宽带拨号
  1. # vi /etc/config/network
  2. ...
  3. config interface 'wan'
  4.         option ifname 'eth1'
  5.         option proto 'pppoe'
  6.         option username 'YOUR ACCOUNT NAME'
  7.         option password 'YOUR PAASSWORD'

  8. config interface 'wan6'
  9.         option ifname '@wan'
  10.         option proto 'dhcpv6'        
  11. ...
复制代码

7 进入WNDR4300,准备将主路由服务转交给N1内的docker 镜像

7.1 停止DHCP
  1. # vi /etc/config/dhcp
  2. ...
  3. config dhcp 'lan'
  4.     option interface 'lan'
  5.     option ignore '1'
  6. ...
复制代码

7.2 停止PPPoE服务(第3步 VLAN已限制访问,故可省略)
  1. # vi /etc/config/network
  2. ...
  3. #config interface 'wan'
  4. #        option proto 'pppoe'
  5. #        option ifname 'eth0.2'
  6. ...
复制代码

现在将WNDR4300与N1断电,电源重启后N1与WNDR4300应完成角色转换,N1内的OpenWRT docker镜像作为主路由提供家庭网关服务。








我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2019-8-28 11:27 | 显示全部楼层
本帖最后由 heq 于 2019-8-31 00:20 编辑

避坑指南
1  Armbian加载内核模块,否则OpenWRT镜像运行时会报错,或者不支持tproxy转发
  1. # vi /etc/modules
  2. pppoe
  3. xt_TPROXY
复制代码

2 docker强制指定 container内部nameserver为127.0.0.11,需要在OpenWRT镜像内调整dnsmasq设置,否则在OpenWRT内无法进行域名解析
  1. # vi /etc/config/dhcp
  2. config dnsmasq
  3. ...
  4.         list notinterface wan
  5.         list notinterface lo
  6.         list interface lan
  7. ...
复制代码
  1. # vi /etc/dnsmasq.conf
  2. listen-address=::1,127.0.0.11
  3. ...
复制代码

备份的技巧-致不折腾不舒服斯基
如果你正奋力成为刷机小王子,那就学学备份/恢复配置文件吧,让刷机成为一种享受

1 新建待备份文件清单(以armbian@N1举例,OpenWRT类似)
  1. # vi backup.lst
  2. /etc/modules
  3. /etc/network/interfaces
  4. /etc/network/interfaces.d
  5. /etc/default/hostapd
  6. /etc/hostapd.conf
  7. /etc/NetworkManager/NetworkManager.conf
  8. /etc/apt/sources.list
  9. /etc/apt/sources.list.d
  10. /root/.ssh/authorized_keys
复制代码
2 原系统备份
  1. # tar czvf host-config.tar.gz -T backup.lst
复制代码

3 重刷系统后,一条命令就能恢复原来的配置
  1. # tar xzvf host-config.tar.gz -C /
复制代码

docker设置的后悔药
docker设置成功后,不能直接停止,否者host OS会重启。而既有设定是host OS重启后镜像自动启用,这样将陷入死循环。
恢复设定前状态的正确步骤:

1 设置host OS重启后镜像不要自动启用,重启armbian
  1. # docker update --restart=no openwrt
  2. # reboot
复制代码

2 重启后镜像不会启用,如下命令可以清除原来的各项设定
  1. # docker network rm wanet
  2. # docker network rm lanet

  3. # docker rm openwrt

  4. # docker rmi openwrt:18.06.2
复制代码
头两条命令删除设定的网络,第3条命令将处于停止状态的镜像删除,最后一条命令删除导入的镜像。

现在系统恢复到步骤2.1,你可以安全地从2.2开始,从头设定docker。







点评

你说的很对,我赞同你的说法。: 5.0
你说的很对,我赞同你的说法。: 5
  发表于 2019-8-29 17:47
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2019-8-28 11:28 | 显示全部楼层
本帖最后由 heq 于 2019-11-3 19:47 编辑

本帖没有设置回复可见,不在意热度,所以不需要无意义回帖。恳请大家不要回复纯粹感叹内容,感谢与客套也免了。但热烈欢迎如下内容:

1 设置中错误与不明确、待改进的内容。
水平有限,有时还会忽略一些技术细节(往往对生手却是很重要的内容),比如单臂路由之OpenWRT VLAN实现中就忽略了network设置中将WAN与LAN的物理网络接口按新的VLAN ID调整。新手如果依葫芦画瓢必然导致OpenWRT@WNDR4300失联。

2 本设置的使用效果反馈
armbian版本号与OpenWRT镜像版本,网络带宽与ISP,本设置能否跑满带宽。如果安装monitorix,请贴出系统荷载与CPU温度。

3 直接评分,加、扣分都欢迎,只要基于客观考虑

4 赏钱喝杯咖啡

如果看过本帖设置内容,自己却没有时间精力实操,我也提供有偿代刷服务,站短联系
我的恩山、我的无线 The best wifi forum is right here.
发表于 2019-8-28 11:30 | 显示全部楼层
感谢楼主分享
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2019-8-28 12:31 | 显示全部楼层
本帖最后由 heq 于 2019-9-17 14:21 编辑

我的使用情况反馈:
ARMBIAN: armbian_5.60_aml-s9xxx_debian_stretch_default_4.18.7_20180922.img
OpenWRT:官版 18.06.2

移动百兆宽带,基础带宽基本跑满,网络质量不错
Screenshot_2019-08-30-16-03-43-886_com.tencent.mm.png
出国效果不佳,视频自动720P或480P

system1.1day.png
系统荷载很低
gensens0.1day.png
CPU温度约55度


点评

docker+openwrt主路由的最大问题应该就是性能了。我也试过,200M电信,N1直接OPENWRT主路由能跑满,但docker里的映像只能跑到70M左右。现在  详情 回复 发表于 2019-8-28 17:53
我的恩山、我的无线 The best wifi forum is right here.
发表于 2019-8-28 13:39 | 显示全部楼层
感谢分享!!!
我的恩山、我的无线 The best wifi forum is right here.
发表于 2019-8-28 15:30 | 显示全部楼层
楼主,上面分享的方案,docker里的openwrt可以识别到N1的wlan吗?

点评

heq
相对客套话,更欢迎提问。 docker内OpenWRT镜像只看到两个(虚拟的)网络接口:eth0对应LAN,eth1对应WAN。其具体对应的物理接口由底层OS确认。 本帖中N1的WiFi由armbian hostapd启动,与N1的eth0.1桥接后提供给  详情 回复 发表于 2019-8-28 16:51
我的恩山、我的无线 The best wifi forum is right here.
发表于 2019-8-28 16:21 | 显示全部楼层
,来支持兄弟了,感谢兄弟的热心分享!
近段日常工作较慢,都没时间折腾N1了。
我的恩山、我的无线 The best wifi forum is right here.
发表于 2019-8-28 16:28 | 显示全部楼层
感谢楼主分享




记忆力培训加盟
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2019-8-28 16:51 | 显示全部楼层
本帖最后由 heq 于 2019-8-28 16:53 编辑
enzoye 发表于 2019-8-28 15:30
楼主,上面分享的方案,docker里的openwrt可以识别到N1的wlan吗?

相对客套话,更欢迎提问。

docker内OpenWRT镜像只看到两个(虚拟的)网络接口:eth0对应LAN,eth1对应WAN。其具体对应的物理接口由底层OS设定。

本帖中N1的WiFi由armbian hostapd启动,与N1的eth0.1桥接后提供给OpenWRT 使用。OpenWRT 不能直接操作 N1 WiFi,比如更改SSID与密码。


我的恩山、我的无线 The best wifi forum is right here.
发表于 2019-8-28 17:53 | 显示全部楼层
heq 发表于 2019-8-28 12:31
我的使用情况反馈:
ARMBIAN: armbian_5.60_aml-s9xxx_debian_stretch_default_4.18.7_20180922.img
Ope ...

docker+openwrt主路由的最大问题应该就是性能了。我也试过,200M电信,N1直接OPENWRT主路由能跑满,但docker里的映像只能跑到70M左右。现在
我的恩山、我的无线 The best wifi forum is right here.
发表于 2019-8-28 22:56 | 显示全部楼层
本帖最后由 enzoye 于 2019-8-28 23:07 编辑

使用楼主分享的方案,没有使用ipv6:
负载都很低
openwrt官方固件导入docker 测速 下载在32-52mbps间波动 上传能跑满
自编固件导入docker 测速 下载在189-305mbps间波动 上传能跑满

相同的网络环境,替换回新3做主路由 测速 下载波动比较小 在310-345mbps间
请问楼主,有推荐适合docker的openwrt吗?

点评

heq
谢谢你的反馈。 基础带宽测试这么低不正常,毕竟CPU荷载也没上去。能否反馈其它信息:比如城市,电信/移动/联通,带宽,数据如何测试? N1自身硬件相当于J1800,docker环境下OpenWRT运算能力损失30%~50%(参见  详情 回复 发表于 2019-8-29 14:47
我的恩山、我的无线 The best wifi forum is right here.
发表于 2019-8-29 07:33 | 显示全部楼层
一看就是觉得高端、大气、上档次!正需要!
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2019-8-29 14:47 | 显示全部楼层
enzoye 发表于 2019-8-28 22:56
使用楼主分享的方案,没有使用ipv6:
负载都很低
openwrt官方固件导入docker 测速 下载在32-52mbps间波动 ...

谢谢你的反馈。

基础带宽测试这么低不正常,毕竟CPU荷载也没上去。能否反馈其它信息:比如城市,电信/移动/联通,带宽,数据如何测试?

N1自身硬件相当于J1800,docker环境下OpenWRT运算能力损失30%~50%(参见黑色宝石的帖子 N1各版本的性能,可能有你需要的 ),即便如此跑满基础带宽应该没问题。我在移动百兆宽带下载经常可以满速。

前段时间我做过当前方案的NAT性能测试,跑到655M时CPU荷载几乎为零。

至于docker环境下的主路由出国性能极限我没有条件测试,希望大家都能反馈一下真实使用情况。论坛里很多直接硬件刷入OpenWRT的兄弟反馈出国4K视频没问题,我相信N1的强悍硬件性能加上AES硬件加速,即便在docker下也能达到类似效果。

点评

N1 性能我测试了, docker中的openwrt和 本机 没有区别, 基本没有损耗  详情 回复 发表于 2020-2-7 23:41
之前试过,armbian+L大源码固件合成镜像写入emmc当主路由,也在运营商测速网站测速,过程也波动比较大的,最终测得下载是247mbps,油管播4K可以到11w以上但有时要缓冲。但当旁路网关测速就非常平稳,油管4K也非常流  详情 回复 发表于 2019-8-29 15:10
我的恩山、我的无线 The best wifi forum is right here.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )|网站地图

GMT+8, 2020-2-21 19:24

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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