当前位置:首页 > 资讯 > 正文

【Openwrt】从入手软路由到刷机到文件服务器到Nodejs到docker home

【Openwrt】从入手软路由到刷机到文件服务器到Nodejs到docker home

前言:

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

    那么这篇文章适合谁呢,

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

        这篇文章是最近自己从零开始学习并使用openwrt的一些经历以及遇到的坑,以此来记录一下,以防以后忘记。本文由于篇幅并不会事无巨细,有些别人以及讲的非常出色的地方我就直接贴链接,并不会重复赘述。

    //written by Bigonion welcome to my website

    https://bigonion.cn

    https://bigonion.cn/blog

    //

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

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

    IP地址、DNS(必懂):

    光猫桥接(必懂)

     Ipconfig基本命令(扩展,可以随便看看):

    Linux系统基本命令行操作和基础文件结构(选看,当查表也可以)

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

      

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

      TP-WDR5620

        Openwrt9.15固件 edge主题

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

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

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

            旁路由拓扑结构

            }

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

            于是在淘宝搜索花了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界面的软件操作非常的简单

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

            如果大家实在找不到可以发email到a454888395@gmail.com或者私信问我要链接 

               

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

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

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

                接HDMI到显示器,

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

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

              {

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

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

              进入之后会显示

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

              }

                {

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

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

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

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

                开启ssh后,你需要在 管理员:powershell输入 :ssh root@软路由ip地址

                例如:

                来连接到你的软路由,

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

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

                }

                  {

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

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

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

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

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

                  ifconfig结果展示

                  可以看到我的eth0口IP地址是10.0.0.200

                  }

                    {

                    输入

                    用自带的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 ,回车后就可以保存退出,

                        接着重启软路由

                        或者输入

                        重启网络服务

                        }

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

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

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

                        进入Web图形化管理后台

                        初始密码一般是

                        账号:root

                        密码:root

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

                        {

                        参考文章:

                        文章2:

                        LAN口配置

                        {

                              }

                              WAN口配置

                              {

                                  WAN口配置

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

                                  }

                                  }

                                  //written by Bigonion welcome to my website

                                  做旁路由配置:

                                  {

                                  LAN口配置

                                  {

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

                                    }

                                    }

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

                                    然后在Openwrt命令行里输入

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

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

                                    输入

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

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

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

                                    再次尝试ping www.baidu.com

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

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

                                      {

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

                                      OPKG软件图形界面

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

                                      这两个方法是等价操作

                                      如果你遇到了以下报错:

                                      或者网页报错说opkg 有任务,正在运行...

                                      请输入

                                      删除这个文件就可以使用opkg命令了

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

                                      点击安装,你也可以使用

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

                                      然后通过

                                      来安装软件包

                                      }

                                        {

                                            命令行安装命令:opkg install 

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

                                              Onion的samba4WEB配置界面

                                                更多插件推荐链接:

                                                }

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

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

                                                  {

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

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

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

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

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

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

                                                  想要实现内网穿透的前提

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

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

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

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

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

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

                                                    }

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

                                                      {

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

                                                      先安装nohup ,命令行输入

                                                      找到nohup的完整名字再opkg install 包名,安装即可

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

                                                      使用nohup 后台运行命令是:

                                                      此时用命令

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

                                                      如果jobs -l 显示PID是11451

                                                      就用

                                                      终止此后台运行服务

                                                      }

                                                        {

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

                                                          }

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

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

                                                          来查看所有物理硬盘

                                                          三块物理硬盘sda,sdb,sdc

                                                          如果没有分区请百度使用

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

                                                           来格式化你选的分区

                                                          推荐fdisk使用方法链接:

                                                          分区后请用cd命令切换到根目录,mkdir命令创建一个想要叫的文件夹名字

                                                          最后用mount 命令来挂载,

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

                                                          最后用df -h /dev/sdb2 查看这块盘有没有成功挂载

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

                                                          请使用umount命令

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

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

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

                                                          九、Docker 部署home-assistant 

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

                                                          参考链接:

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

                                                          如果实在没有特殊环境的小伙伴,请自行bing搜索如何更换opkg安装源

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

                                                          来查看是否成功安装了docker

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

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

                                                          /overlay目录大小就是软件包展示的空间

                                                          你必须更换docker 根目录到 至少2G剩余空间的目录下

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

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

                                                          首先搜索home-assistant源

                                                          接着docker pull 命令拉取下载镜像源

                                                          这一步,非常,硬等

                                                          安装好以后,输入

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

                                                          docker's image list

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

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

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

                                                          参数的话看docker官方文档可以知道:

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

                                                            输入

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

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

                                                            想要停止容器可以输入:

                                                            来暂停容器运行

                                                            输入

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

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

                                                            如:

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

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

                                                            十、Docker home-assistant安装Hacs插件

                                                                    

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

                                                            参考视频(必看)

                                                            从此视频下分享链接下载源文件,这个视频用的samba的插件传输的源文件,但是docker版本没有办法直接下载samba插件,所以不可取

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

                                                            当然你也可以通过

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

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

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

                                                            后言:

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

                                                            我们

                                                                有缘

                                                            江湖

                                                                再会____

                                                            最新文章