拿到树莓派除了【le】研究了下【xià】 Android Things,还有就【jiù】是【shì】搭建服务【wù】器,建个网站【zhàn】。操作系统【tǒng】使用官方的Raspbian,基于Linux。然后使用【yòng】Nginx + PHP + WordPress建站【zhàn】。一切都比较【jiào】顺利,中间过程以后写个文章记录【lù】一下。今天先说【shuō】一下最重【chóng】要的问题:如何通过【guò】内外穿透让外网访问到树莓派上【shàng】的服务?
从网站建好【hǎo】以后,试【shì】过两种内网穿透方式,花生壳【ké】、NPS。其他的还有FRP、ngrok等【děng】
花生【shēng】壳我一直没舍得【dé】在上面花钱,因为【wéi】有免【miǎn】费试用的基本能够【gòu】满足【zú】需求。但是【shì】免费的才是最【zuì】贵的。免费账号服务不稳定,经【jīng】常掉【diào】线。
后来在网上【shàng】找到了NPS服务,nps是一款轻量级、高性【xìng】能、功能强大的内网穿透代理服务器。目前【qián】支持tcp、udp流量转发,可【kě】支持任何【hé】tcp、udp上【shàng】层协【xié】议(访问内网网站、本地支付接【jiē】口调试、ssh访【fǎng】问【wèn】、远程桌【zhuō】面,内网dns解析【xī】等等……),此外还支持内网http代理、内网socks5代理【lǐ】、p2p等,并带有功【gōng】能强大的【de】web管理【lǐ】端。
但nps有【yǒu】个最大的【de】问题就是:需要一【yī】台外网能访问到【dào】的服务器【qì】来架设nps服务。有【yǒu】人说你【nǐ】都有外【wài】网的服务器了还要内网穿【chuān】透【tòu】干什么【me】。在我看【kàn】来,坚持使用nps的理由【yóu】是这样,nps轻量级【jí】,高性能,但其【qí】本身【shēn】负责的是流量【liàng】转发功能【néng】,我们可以在内【nèi】网服务器进行更密集、高【gāo】负荷【hé】的运算,而承担nps服务的外【wài】网【wǎng】服务器的配置要求就低很多。同时【shí】也可以在【zài】外网服务器上运行一些其他的运算要求较低的服务。所【suǒ】以我【wǒ】也【yě】算是把好【hǎo】钢用【yòng】在刀刃上【shàng】吧~
内网穿透原理大概如下图:
其中公网服务【wù】端就需【xū】要一台VPS,配置不用太【tài】高,我使用的是阿里【lǐ】云的突发【fā】性能实例,具体【tǐ】可以到阿里云ECS查看。内网客户端使【shǐ】用家【jiā】里【lǐ】的树【shù】莓派【pài】。
项【xiàng】目【mù】release地址: https://github.com/cnlh/nps/releases
查找【zhǎo】对应的server包。我的云服务器是【shì】X86-64架【jià】构,使用Ubuntu 18.04操作【zuò】系统,所以选择linux_amd64_server.tar.gz。
下载程序并解压:
wget https://github.com/cnlh/nps/releases/download/v0.23.2/linux_amd64_server.tar.gz &&tar -zxvf linux_amd64_server.tar.gz
运行nps
cd nps
./nps start/
之后访问 [服务【wù】器【qì】IP]:8080,登【dēng】录web页面【miàn】。默认用户名admin,密码【mǎ】123。
也可以通过【guò】配置 conf/nps.conf修改默认端【duān】口、用【yòng】户【hù】名密码等信息。具体【tǐ】配置见【jiàn】下表:
名称 | 含义 |
---|---|
web_port | web管理端口 |
web_password | web界面管理密码 |
web_username | web界面管理账号 |
bridge_port | 服务端客户端通信端口 |
https_proxy_port | 域名代理https代理监听端口 |
http_proxy_port | 域名代理http代理监听端口 |
auth_key | web api密钥 |
bridge_type | 客户端与服务端连接方式kcp或tcp |
public_vkey | 客户端以配置文【wén】件模【mó】式启【qǐ】动时的密钥,设置为空表【biǎo】示关闭【bì】客户【hù】端【duān】配置文件连接模式 |
ip_limit | 是否限制ip访问,true或false或忽略 |
flow_store_interval | 服务端流量数据持久化间隔,单位分钟,忽略表示不持久化 |
log_level | 日志输出级别 |
auth_crypt_key | 获取服务端authKey时的aes加密密钥,16位 |
p2p_ip | 服务端Ip,使用p2p模式必填 |
p2p_port | p2p模式开启的udp端口 |
默【mò】认【rèn】web端口是8080,客户端【duān】连接端【duān】口是8024,对于有防火【huǒ】墙的服务器,需要提前打【dǎ】开这两个端口。
在客户端标签页新增客户端配置
填个备注,剩下的默认就可以了
新【xīn】增客户端完成【chéng】后【hòu】展开【kāi】客户端详情,下面有一【yī】行命令随后用到。此时status还是offline,图【tú】中我这个是【shì】客【kè】户端【duān】也已经建立连【lián】接了【le】所以【yǐ】online了。接【jiē】下来我们就去搭建客户端并建立连接。
依【yī】然是去 https://github.com/cnlh/nps/releases 下载对应【yīng】的【de】客户【hù】端安装包。我的客户端使用Raspbian系统的树莓派,arm架【jià】构【gòu】,虽然【rán】芯【xīn】片是64位,但系统是32位的【de】。所【suǒ】以下载 linux_arm_client.tar.gz
下载并解压
wget https://github.com/cnlh/nps/releases/download/v0.23.2/linux_arm_client.tar.gz &&tar -zxvf linux_amd64_client.tar.gz
之后执行web页里【lǐ】新增【zēng】客【kè】户【hù】端下的命令,类似 ./npc -server=xxx.xxx.xxx.xxx:8024 -vkey=hxxxxx4hzc -type=tcp
随后再看服务端【duān】web页,客【kè】户端的【de】status已经是【shì】online了。
现在服务端和客【kè】户端的连接【jiē】已经【jīng】建立起来,那么该如【rú】何访问【wèn】内网的WordPress呢?
搞个域名先,国内的需要备案。
在服务端web页选择 域名解析 -> 新增
填入备注、域名【míng】、内网WordPress IP和端【duān】口号,客户端id要填【tián】之前新建好的客户端id。搞定。
当然我的【de】网【wǎng】站其实是放在外网服务器的,示【shì】例的网站只是自己有个域【yù】名随便玩的。最【zuì】主【zhǔ】要的【de】用处是能够随时随地【dì】通过ssh控制家里的树莓派。
在服务端web页选择 tcp隧道 -> 新增
服务端端口【kǒu】需要新建一【yī】个,之后不要忘记在服务器防火【huǒ】墙放行此端口。目【mù】标ip端【duān】口写【xiě】树【shù】莓派的ip:22
之后在外网通过【guò】 ssh pi@my.servce.ip -p port 就【jiù】可以啦
版权所有:深圳市网商在线科技有限公司