https://www.bilibili.com/read/cv18550047
[极其详细]零基础小白一文搞定软路由概念,从刷机到配置,到做服务器环境以及内网穿透映射公网到sftp文件服务器,到docker基础,到docker home-assistant智能网关 那么这篇文章适合谁呢, 我想适合人群应该包含但不限于:
想要接触Linux系统
想了解网络IPv4、子网掩码、网关概念和基本的通信网络基础
想要方便的科学上网
想了解使用Docker技术
想拥有一台属于自己的服务器
想学习内网穿透随时随地能访问自己家里的电脑,局域网设备,智能家居设备
想挂载自己的制作的动态Html网页项目,不受限于GitHub静态网页
这篇文章是最近自己从零开始学习并使用openwrt的一些经历以及遇到的坑,以此来记录一下,以防以后忘记。本文由于篇幅并不会事无巨细,有些别人以及讲的非常出色的地方我就直接贴链接,并不会重复赘述。
//written by Bigonion welcome to my website
一、软路由的购买与基础概念
首先:如果你不知道什么是IP地址,端口,DNS,内网网段,网关,光猫桥接模式他们都是什么,我十分建议你提前百度/Goole/必应/360/B站先了解一下:
IP地址、DNS(必懂):
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
做旁路由配置:
{
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设备的文件夹里面输入
更多插件推荐链接:
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 的一些主流玩法,全部完成,非常感谢你能看到这里,
我们
有缘
江湖
再会____