1、背景
在国内调试谷歌音箱,代码早就按文档3天内就写好了,让谷歌音箱联网这事却弄了两周,过程很艰辛,主要是实践各种方案。
首先有个闲置腾达AC9路由器,里面有VPN的选项,但是只支持L2TP和PPTP,于是在服务器搭建了L2TP,本地windows10一直能正常使用,但是路由器偶尔能连上一两次后面就很难连接,我个人怀疑是UDP风暴或者路由器内部搞鬼,总之就是很不稳定。
后来又尝试让局域网内linux系统连接openvpn做路由转发,但是一直未成功,最后决定直接用docker在centos7上做一个旁路由实现转发,让局域网内的子路由器联网,再让谷歌音箱连接子路由器上网。也有人直接给路由器刷固件,但是对于公司有本地服务器的情况,用docker做更便捷一些。
2、搭建
查看网卡和网段
ifconfig
enp0s31f6: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST> mtu 1500
inet 192.168.1.91 netmask 255.255.255.0 broadcast 192.168.1.255
获取两个信息网卡:enp0s31f6 网段:192.168.1.91
查看是否有PROMISC字段,如果没有
#临时打开网卡混淆模式
ip link set enp0s31f6 promisc on
#开机启动项里永久打开网卡混淆
vim /etc/rc.local
ip link set enp0s31f6 promisc on
#重启网卡或重启系统查看是否永久生效,该步骤可忽略
/etc/init.d/network restart
配置docker
vim /home/lucien/openwrt/network
填写以下内容,主要修改ipaddr 、gateway 、dns 三个IP,比如上面centos7的主路由器分配的IP是192.168.1.91,那么gateway、dns 就要填192.168.1.1,如果是192.168.0.91,那么这里填写192.168.0.1。至于ipaddr就相当于和192.168.1.91同级的设备,在主路由器里相当于有2台电脑或者设备联网,这里填写一个主路由器内没有使用过的IP即可,我这里填写的是192.168.1.70。
config interface 'loopback'
option ifname 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'config globals 'globals'
option packet_steering '1'config interface 'lan'
option type 'bridge'
option ifname 'eth0'
option proto 'static'
option netmask '255.255.255.0'
option ip6assign '60'
option ipaddr '192.168.1.70'
option gateway '192.168.1.1'
option dns '192.168.1.1'config interface 'vpn0'
option ifname 'tun0'
option proto 'none'
建立docker虚拟网络
#macnet 为名称,macvlan 为模式,将 192.168.1.0 修改为你自己主路由网段。
docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=enp0s31f6 macnet
docker run --restart always -d --name=openwrt --network macnet --privileged -v /home/lucien/openwrt/network:/etc/config/network sulinggg/openwrt:x86_64 /sbin/init
然后在浏览器里输入192.168.1.70 访问,默认账号:root 密码:password,
然后就可以在子路由器里设置网关地址为192.168.1.70,之后就可以让谷歌音箱连接了。
网友评论