首页<<

有图片版本请到b站专栏

https://www.bilibili.com/read/cv18550047

前言:

[极其详细]零基础小白一文搞定软路由概念,从刷机到配置,到做服务器环境以及内网穿透映射公网到sftp文件服务器,到docker基础,到docker home-assistant智能网关

那么这篇文章适合谁呢,

我想适合人群应该包含但不限于:

//written by Bigonion welcome to my website

https://bigonion.cn

https://bigonion.cn/blog

一、软路由的购买与基础概念

    首先:如果你不知道什么是IP地址,端口,DNS,内网网段,网关,光猫桥接模式他们都是什么,我十分建议你提前百度/Goole/必应/360/B站先了解一下:

IP地址、DNS(必懂):

https://www.bilibili.com/video/BV1pJ411E72D?spm_id_from=333.337.search-card.all.click&vd_source=347109678632e4593a175ba64105c5ff
光猫桥接(必懂):

https://zhuanlan.zhihu.com/p/358075010
Ipconfig基本命令(扩展,可以随便看看):

https://blog.csdn.net/bcbobo21cn/article/details/51759140
Linux系统基本命令行操作和基础文件结构(选看,当查表也可以)

https://www.jianshu.com/p/1f9943321a56

我是分割线 ̄︶ ̄ ̄︶ ̄*)

首先,我想问,什么是软路由?当然他们都是路由器啦(~ ̄▽ ̄)~ 这里简单总结一下硬路由和软路由区别:

硬路由:目前我们家里普遍使用的路由器,不能随意更换系统,功能很简单很有限,一般我们只用来宽带拨号,传播WiFi信号,TP-LINK的路由器后台长这样

TP-WDR5620
软路由:软路由就是一台完整的电脑,通过刷入openwrt,LEDE,爱快等系统,(PS:这些只是个名字,其实你刷win10也能当软路由的,只是win10消耗CPU等资源太大,不适合做软路由)

能干硬路由所能做的 所有 事情,更完善的管理局域网内所有设备的IP地址,App流量监控,广告过滤,DNS防污染,等操作。Ta大概长这样:

Openwrt9.15固件 edge主题

    关于软路由的购买,我也去B站搜了很多推荐视频,可以分成ARM和x86这两种架构的流派,下面是ARM和x86的区别,最不严谨的说法就是Windows属于X86平台,手机安卓系统属于ARM平台

ARM和x86的具体区别 https://zhuanlan.zhihu.com/p/95028674
ARM 推荐的有R2S、R4S、树莓派等

优点:功耗低,便宜,缺点:兼容性有点差

X86 这边有J1900、N1、J4125等

优点:扩展性强,性能好,缺点:功耗比较高,贵

首先我对ARM目前的兼容性不是很看好,其次我还想要顺便学习一下如何使用微PE系统对Windows装系统,所以我选择了J1900的工控机

还有一个问题:你想要软路由做主路由还是旁路由?他们的区别,优缺点和连接方法也许大概是这样的:

主路由:

{

概念:全家所有设备的流量都走你的主路由,都把它作为网关,主路由科学上网,局域网全部设备都在长城外

优点:拓扑结构简单

缺点:设备必须要有双网口(最好是千兆)

主路由连线方法:你的软路由WAN口(WAN口可以看作是宽带入口,连接上一级网络)连接光猫(光猫的功能:把光纤的光信号转换成电信号),在配置里进行拨号上网,然后你的软路由LAN口(LAN口可以看作是出口),连接到你的硬路由的WAN口,帮你广播WIFI信号

}

旁路由:

{

概念:全家所有正常连接WiFi的设备流量都走你原来的路由器,通过你原来的路由器DHCP(DHCP指的是自动分配局域网中设备的IP地址和租约等配置)服务分配到IP和网关、dns等配置,想要科学上网的设备,在你的电脑手机更改WLAN配置为手动设置,设置网关为旁路由的LAN口IP地址,这个时候,想要特殊上网环境的设备就可以单独走另一条路,实现局域网内设备,各取所需上网环境

优点:主路由(你原来的硬路由器)不需要任何更改,灵活分配,单网口设备就能实现!

缺点:配置复杂一些,需要关闭软路由的DHCP服务器

旁路由连线方法:你的原来的硬路由(原来提供你wifi的路由器)的LAN口连接你的软路由LAN口,使他们在同一网段内,相当于桥接

旁路由拓扑结构
}

没看懂? =>推荐阅读专栏网站:

https://zhuanlan.zhihu.com/p/112484256

于是在淘宝搜索花了300多2+16G下单了,我的J1900大概也许长这样:

如果你选择工控机的话,COM接口对你来说没啥用 0-0-

J1900工控机
二、软路由刷写Openwrt系统

 首先,我是看别人的视频的,讲的非常详细,强烈推荐BRAVERU科技频道的讲解:https://www.bilibili.com/video/BV1w541157Uo?spm_id_from=333.337.search-card.all.click

看完自然就明白怎么刷了!有UI界面的软件操作非常的简单

固件的话我推荐大家去恩山论坛自己找,自己编译固件真的费时费力没必要了,在这个链接找也可以:

https://www.right.com.cn/forum/thread-7048868-1-1.html
如果大家实在找不到可以发email到a454888395@gmail.com或者私信问我要链接

三、软路由启动Openwrt系统,并进行基本配置

 我用的是U盘刷的系统,刷好后插入J1900主机usb口,接入键盘,开机狂按F2,进入bios界面,在Advanced选项中更改boot启动顺序为从U盘启动,大家如果不会的话直接百度:bios怎么从U盘启动 。就可以了,这方面教程多如牛毛....

好的,你现在已经刷好Openwrt系统了,也设置好从U盘启动了,如果你选择把镜像.img刷入硬盘内的话,直接拔出U盘媒介,他就会从硬盘自动启动Openwrt系统了!

接HDMI到显示器,

插腚,开机\( ̄︶ ̄*\))

PS:你最好有一台显示器(不是必须的,但是很多时候都很重要)

开机后有显示器的方式:

{

但是,这个时候有可能你不能直接进入Openwrt系统,而是进入shell>命令行,只需要输入exit就可以退出,但如果是其他提示你找不到系统启动文件,那你一定是刷了错误的Openwrt镜像,或者没能成功设置Bios 从U盘/硬盘启动 。

不出意外的话,经过kernel启动,就会进入openwrt界面了!

进入之后会显示

root@[none] #
这个样子,是你没有设置root密码导致的,你需要输入passwd去设置root密码

}

没有显示器的方式:

{

还有另一种方式是不需要你用额外的显示器操作的,但是这种方式的前提是你已经按照网络拓扑结构选择主路由/旁路由连线方式连接好软路由和硬路由了:

在 管理员:powershell (win10:依次按下win+x => A => 左键回车确定授权)使用telnet 或者ssh命令进行局域网连接

telnet因为明文传输的原因,十分的不安全,我更喜欢用ssh ,如果你输入ssh后提示找不到命令,请你先安装Openssh

Win10设置里开启Openssh微软官方文档:

https://docs.microsoft.com/zh-cn/windows-server/administration/openssh/openssh_install_firstuse
开启ssh后,你需要在 管理员:powershell输入 :ssh root@软路由ip地址

例如:

ssh root@10.0.0.200
来连接到你的软路由,

接下来输入 passwd 来设置你的root密码

如果你不知道IP地址是什么,怎么填,请往下看

}

IP地址 的问题:

{

如果很不巧,Openwrt默认的LAN口IP地址和你的主路由不在一个网段

这一点编译者会在他的文章里面告诉你默认IP是多少,请自己仔细阅读

比如说你的WIFI硬路由后台地址是:192.168.1.1

你的固件默认IP地址是10.0.0.1,那他们连起来如果没有NAT服务器的话,是没办法进行通信的,也就是说你必须先更改LAN口默认IP地址

有显示器的话输入ifconfig查询IP地址

ifconfig

ifconfig结果展示
可以看到我的eth0口IP地址是10.0.0.200

}

LAN口IP地址修改

{

输入

vim /etc/config/network
用自带的vim编辑器,进入到网络配置文件编辑

在这里,修改interface,lan 的ipaddr(IP地址)后面 为你想要的IP地址,

如果是旁路由模式:

{

如果主路由IP地址是192.168.1.1那么,更改为192.168.1.x ,

如果路由器地址是192.168.31.1,那么更改为192.168.31.x,

其中1<x<255随便挑一个你喜欢的就可以,不要和正在联网的设备分配到的IP重合就行,

其他随你在内网网段内挑选,然后电脑连接到WIFI,或者用网线连接电脑和路由器LAN口

}

如果是主路由模式:

{

软路由做主路由,可以随便你选内网网段,

10.0.x.x 或者192.168.x.x,172.16.x.x都可以,

这个时候必须把你的硬路由后台设置成自动获取IP地址,然后电脑连接到WiFi

或者用网线连接电脑和路由器LAN口

}

vim 编辑器操作方法:

按下A 进入编辑模式,修改完成后,按下ESC,按住shift 同时按下两次z 保存退出,或者按下ESC之后,输入一个冒号:然后再依次输入wq ,回车后就可以保存退出,

接着重启软路由

或者输入

/etc/init.d/network restart
重启网络服务

}

四、通过浏览器进入Openwrt 网络后台

恭喜你,你成功完成了安装和IP设置,现在是检验你设置和连接是否正确的时候,请你连上WIFI,或者把电脑用网线接到硬路由器的Lan口上,这样你和软路由就在同一个局域网了,如果你前面设置软路由IP地址是正确的话,此时你的电脑,和软路由,硬路由器,就处于同一个IP网段,同一个局域网内,能够相互进行通信了!(不信你ping一下它的IP😋)

可以通过在浏览器网址栏输入你的软路由IP地址进行访问WEB管理页面了!输入你前面设定的软路由IP地址,忘了的,邦邦给你两拳(っ °Д °;)っ

进入Web图形化管理后台

初始密码一般是

账号:root

密码:root

做主路由宽带拨号上网配置:

{

参考文章:

https://opssh.cn/luyou/102.html
文章2:

https://blog.csdn.net/weixin_50796303/article/details/114487451
LAN口配置

{

点击网络 => 接口 右边 点LAN口的编辑

忽略此接口不要打勾,要开启DHCP服务

常规设置里,设备选择你想要的物理网口一般是以eth0,eth1命名的,分别代表第一个RJ45网口,和第二个RJ45网口

IPv4网关留空(你拨号的时候会自动填入上级网关的),子网掩码一般是255.255.255.0,看具体情况,IPv6可以直接禁用,不禁用也行,广播地址就是你的LAN口设置的IP地址段的最后一个地址

例如:192.168.1.1到192.168.1.254 总共254个设备处在192.168.1.x的IP网段,广播地址就是192.168.1.255,配置完成后一定要点击保存

}

WAN口配置

{

然后点击WAN口的编辑进入WAN口配置

常规设置里面,协议选择PPPoE协议,点击切换协议后,设备选择你想要的WAN口,

点击保存后返回

WAN口配置
输入你的宽带账户和密码,然后DHCP里勾选忽略此接口,都保存后,重启路由器,不出意外的话,那你就能上网了!

}

}

//written by Bigonion welcome to my website

https://bigonion.cn/

做旁路由配置:

{

LAN口配置

{

只需要对LAN口编辑,因为你只需要连接LAN口到硬路由嘛,所以WAN不需要配置,

对LAN口配置需要勾选忽略DHCP服务器,

系统 => 设置向导 中打开旁路由模式,因为局域网内已经有一个DHCP服务器了就是你的硬路由,这个时候你的硬路由依然承担拨号上网功能,

对LAN口设置IPV4网关为你的硬路由器IP地址

依然推荐这一篇文章,写的很详细:

https://zhuanlan.zhihu.com/p/112484256
}

}

此时,你已经配置好了,请让点击WAN和LAN口的重启按钮,LAN和WAN都重启

然后在Openwrt命令行里输入

ping www.baidu.com
如果能成功发送ICMP数据包,说明此时路由器已经正确联网了!

但如果一直卡住发不出PING包,请再尝试ping ip地址(223.5.5.5替换成8.8.8.8也可以)

输入

ping 223.5.5.5
如果此时依旧没有能发出PING包,丢包率100%的话,请重启机器后再次检查你的配置!

如果能 对IP发出ping 数据包,有延迟和回应的话,证明此时已经接入了互联网,只是DNS服务器配置丢失,请在LAN口 => 编辑 => 高级设置 => 使用自定义的DNS服务器,填入

223.5.5.5 后,回车或者点击+号,重启LAN接口

再次尝试ping www.baidu.com

如果能够发出PING的数据包,证明此时已经可以正确解析域名IP,能打开浏览器浏览网页了!

五、使用Opkg 包管理工具安装常用插件,和常用局域网文件服务器搭建

OPKG包管理工具:

{

能到这里实在是太棒了!现在你已经成功把Openwrt运转起来了,接下来是对Openwrt一些功能性插件,服务器的介绍,以及Opkg包管理工具的使用

OPKG软件图形界面
点击 系统 => 软件包 来到Opkg软件包网页管理界面,请先点击更新列表,获取所有软件的目录,或者通过ssh root@你的路由器局域网IP ,回车,输入密码后连接 输入:

opkg update
这两个方法是等价操作

如果你遇到了以下报错:

OpenWrt——Could not lock /var/lock/opkg.lock: Resource temporarily unavailable.
或者网页报错说opkg 有任务,正在运行...

请输入

rm -rf /var/lock/opkg.lock
删除这个文件就可以使用opkg命令了

关于安装插件,你可以在网络UI界面筛选器内直接搜索软件名字

点击安装,你也可以使用

opkg list | grep iperf3
来搜索你想要的软件包命字grep 后跟着的是具体软件包名

然后通过

opkg install iperf3
来安装软件包

}

推荐常用插件:

{

luci-app-turboacc :网络加速插件,能缓解网络阻塞和缓存DNS

iperf3 :局域网、互联网测速软件,只能在命令行使用:

命令行安装命令:opkg install

用法:iperf3 -s 当server监听,另一台网络设备 使用iperf3 -c IP 来发包测速

samba4: 局域网smb3.0协议网络共享软件,可以在局域网另一台设备的文件夹地址栏里输入:\IP地址 来访问 例如

\10.0.0.200

Onion的samba4WEB配置界面

vsftpd : 用于搭建局域网ftp服务器

在另一台局域网Win设备的文件夹里面输入

ftp://IP

更多插件推荐链接:

https://zhuanlan.zhihu.com/p/363374033
}

六、sftp文件服务器搭建,并通过内网穿透端口实现外网访问

虽然,以上的文件服务器samba4,ftp,很棒,但是他们不太好通过内网穿透来在公网访问,以下提供比较好用的方法:

SSH内网穿透,通过sftp传输

{

    首先你要了解内网穿透的原理:你的内网可以访问外网是因为公网IP你能找到,但是外网却没有办法直接找到内网里的设备,于是就有内网穿透技术的存在

    我们通过一台大家都能访问到的公网服务器作为中转服务器,通过在你和公网服务器之间分别建立客户端client和服务端server,让服务端定期转发你的端口

(端口简单来说,就是一个窗口,如果说IP地址是你家的门牌号,那端口就是你家里能进出的地方,例如:你家的窗户,狗洞,门,烟囱,还有可能是你偷偷挖的通向外界的地道)

    总而言之,它能够把运行在你电脑的软件通过双向转发的方式,让你的主机变相为外界提供服务,如果转发的公网服务器把你的电脑端口22(运行着ssh服务)转发走了,转发到了它自己的服务器端口:11451上面,此时我们访问这个网络地址:公网服务器IP:端口号

例如公网IP是114.114.114.114的服务器帮你转发那你访问:

114.114.114.114:11451
就能通过对这个地址发数据包,间接给你自己的内网电脑的22端口发数据包,看起来你的内网服务器好像就能被直接访问到了一样!

想要实现内网穿透的前提是

我们需要先对Openwrt开启访问转发ssh的权限 系统 = > 管理权 => SSH访问 => 网关端口

打钩✔之后,你的设备的SSH端口才能被顺利转发(重要)

现在主流的协议就是开源的frp协议,不过要求你自己有一台公网服务器。

然而公网服务器确实很贵,我推荐有免费的服务方(没收钱,广告费结一下)

Sakura FRP内网穿透:免费版两个隧道,速度还可以,全平台,必须1元实名认证

Cpolar 内网穿透:免费版四个隧道,简单好用

花生壳 内网穿透:免费版两个隧道,可以申请学生版,有多给一点月流量,有bug比较多

Zerotier 异地组网: P2P如果打洞失败,公网服务器来转发流量体验不佳

    他们都有非常非常详细的用户文档,自行搜索他们官网查阅文档就可以很轻松的实现内网穿透了。等到你成功穿透后,会获得一个他们给你的IP地址:端口号的形式,你可以直接通过ssh root@IP地址:端口号 来链接你的openwrt命令行

    或者通过Winscp这个软件或者finalshell等软件,输入这个IP:端口号来与你的openwrt服务器进行通信和传输文件,不过免费内网穿透服务的带宽很小就是了(1Mbps左右)

}

七、Nohup实现内网穿透后台运行,Nodejs环境搭建

Nohup : No hang up(不挂起)

{

    你会发现,虽然你成功运行了内网穿透的软件,但是你没法关闭命令行,因为一旦你关闭了,内网穿透的服务同时被你关闭,你需要一个能不被杀掉的后台运行方法,Node.js里有pm2工具可以保持后台运行,但是有一些是没办法通过pm2管理的,你需要nohup!

先安装nohup ,命令行输入

opkg list | grep nohup
opkg install coreutils-nohup
找到nohup的完整名字再opkg install 包名,安装即可

    使用方法:如果是cpolar的话本来运行的命令是:

/media/cpolar tcp 22
使用nohup 后台运行命令是:

nohup /media/cpolar tcp 22 &
此时用命令

jobs -l
记住它的PID号,下一次想要停止这个内网穿透服务,可以用kill 命令:

kill PID
如果jobs -l 显示PID是11451

就用

kill 11451
来终止此后台运行服务

}

Node.js 环境搭建

{

在openwrt上部署node.js非常简单,你只需要两个命令就可以完成:

opkg install node
opkg install node-npm
安装好后输入node -v , npm -v ,如果出现版本号就说明node.js安装成功!

}

八、mount 命令挂载和umount取消挂载

linux下挂载很简单,首先通过

lsblk
来查看所有物理硬盘

三块物理硬盘sda,sdb,sdc
如果没有分区请百度使用

fdisk /dev/sdx
(x指的是你的盘号,例如sda sdb sdc这样递增)来查看具体操作,再用

mkfs.ext4 /dev/sdx
来格式化你选的分区

推荐fdisk使用方法链接:

https://www.cnblogs.com/wenhainan/p/12292823.html
分区后请用cd命令切换到根目录,mkdir命令创建一个想要叫的文件夹名字

最后用mount 命令来挂载,

如果你想要挂载的分区是sdb这块物理盘的第二个分区,参考代码:

cd /
mkdir /media //怎么取名字都随你,只要合法就行
mount /dev/sdb2 /media
最后用df -h /dev/sdb2 查看这块盘有没有成功挂载

如果报错了说已经挂载到/mnt/sdb2下了

请使用umount命令

umount /dev/sdb2

取消挂载后再尝试重新挂载到/media 目录下

这一步是为了docker根目录做准备

(如果你看不懂什么叫挂载,什么叫分区的话,请百度)

九、Docker 部署home-assistant

    Docker技术你得先了解为什么会出现,简单来说为了解决运行环境的问题,比如说,可能有些文件需要.net 框架,有的软件需要nodejs环境,有的软件需要Php5 有的要Php8 你不可能说一个环境就给他装上一个虚拟机吧(土豪哥除外)一般的电脑真够呛的,所以有人开发了Docker,在软件层隔离,而不需要硬件虚拟化所消耗的系统资源

参考链接:

https://www.jianshu.com/p/d3006b8a22ee
了解了docker之后就可以开始了,依次安装,这里可能(极大可能)需要特殊的网络环境,要不然安装的速度极为缓慢,并且失败的可能性极高,依次输入:

opkg install docker
opkg install dockerd
opkg install luci-app-dockerman
opkg install luci-lib-docker
如果实在没有特殊环境的小伙伴,请自行bing搜索如何更换opkg安装源

等他们都安装好了,此时请输入

docker -v
来查看是否成功安装了docker

如果显示版本号了说明你成功安装docker了

此时请注意你的/overlay目录的空间所剩无几

/overlay目录大小就是软件包展示的空间
你必须更换docker 根目录到 至少2G剩余空间的目录下

此时你可以开始拉取镜像文件

参考文章(博主命令行有误):

https://blog.csdn.net/maoxinwen1/article/details/86485655
首先搜索home-assistant源

docker search home-assistant
接着docker pull 命令拉取下载镜像源

docker pull homeassistant/home-assistant
这一步,非常,久,硬等

安装好以后,输入

docker image ls
来查看所有安装好的镜像源

docker's image list
出现这个样子说明pull已经好了,没有的话,请重新多次尝试pull

参考链接里的原博主的docker run 跑容器的命令是不完全正确的,真这样跑没办法在任何容器上完美运行,评论区的命令也不完全正确,如果同时指定-p 端口:端口 和--net=host的话,docker反而会给你报错,告诉你不可以同时这么指定

应该大概可能也许正确的命令:

docker run -d --name="home-assistants" -v /[你的本地存放该容器配置路径]:/config --net=host homeassistant/home-assistant
参数的话看docker官方文档可以知道:

-d 表示后台运行

--name 表示容器自定义的名字

-v 表示配置文件映射关系,也就是docker里面的容器的配置文件在你宿主机里的真实位置

--net 表示虚拟网络模式,有bridge(默认)host 主机模式等,具体详见官方文档

homeassistant/home-assistant 代表你要跑起来的镜像名字

https://docs.docker.com/engine/reference/commandline/run/

稍等一会,你的docker 就成功跑起来docker 容器了,

输入

docker ps
查看所有容器,如果看到你的home assistant,那么它已经成功跑起来了,

CONTAINER ID ,最左边的参数就是你的容器ID

想要停止容器可以输入:

docker stop CONTAINER ID
来暂停容器运行

输入

docker rm CONTAINER ID
来删除你的容器,删除容器并不会影响你的镜像库,输入docker image ls依然可以看到你的镜像,并可以重新docker run 建立新的容器

这时候请你在局域网内其他电脑打开浏览器输入:你的软路由ip:8123

如:

10.0.0.200:8123
如果出现home assistant的web界面了,恭喜你!成功了!

如果没有反应,请你自行找到问题所在

十、Docker home-assistant安装Hacs插件

    由于docker 官方给出的阉割版镜像,没法直接安装Hacs 必须通过源文件的方式安装

参考视频(必看):

https://www.bilibili.com/video/BV19S4y1w73a?spm_id_from=333.1007.top_right_bar_window_custom_collection.content.click
从此视频下分享链接下载源文件,这个视频用的samba的插件传输的源文件,但是docker阉割版本没有办法直接下载samba插件,所以不可取,

但是,你可以通过Winscp或者finalshell软件ssh连接到你的openwrt文件目录下,找到你之前用docker run 命令里 -v 指定的路径 来到这个路径下,就是容器的根目录了,接下来把up主分享的文件通过up主所说的步骤来放置解压后的文件,

当然你也可以通过

docker exec -it [你的容器ID] /bin/bash
直接进入你的docker 容器命令行内,通过scp 等命令直接传输解压后的文件目录,接着,请在网页端开发者工具一栏,选择重新启动,然后按照UP主所说的方式安装Hacs即可

注意:这里up主所说的文件夹名字,必须一字不差,否则无法识别,也就无法添加

接下来你就可以通过Hacs 添加 MiIoT设备,实现智能家居网关中心了!

后言:

至此,openwrt 的一些主流玩法,全部完成,非常感谢你能看到这里,

我们

有缘

江湖

再会____