手动部署并测试内网穿透(ssh 和 nginx)

server/2024/11/15 7:26:00/

原理回顾

首先需要一台连接了公网的云服务器,然后我们要访问的内网穿透对象最好是Linux服务器,比如虚拟机,然后我们通过向云服务器发送指令,云服务器再将指定发送给指定对象,让其能够执行命令。 

总结就是:假设家里的机器就是我们的目标服务器,它首先会跟我们的云服务器进行通信,然后建立NAT转化表,这样我们的云服务器就能和家里的服务器进行通信了,这样我们在外边就可以直接跟我们的云服务器通信,然后在云服务器上通过特定的软件,将我们的请求转发到内网中的机器,这就是内网穿透。 也就是一个局域网内的主机可以访问另一个局域网内的主机了。

实操部分

环境配置 

首先推荐的软件叫做frp,可以在github上找到。

frp 下载:https://github.com/fatedier/frp/releases/tag/v0.58.1 

注意下载的版本(Linux 64位下)

另外 用远程登录 是sshd 端口号是22。 

 这里的虚拟机用的是 Ubuntu 22 64位。

 将下好的压缩包拖入到我们的云服务器上,用

tar xzf + 压缩包名

来解压好,并进入到解压后的文件夹内

其中有两个可执行程序,frpc表示是给客户端用的,frps是给云服务器用的。这个程序是用go写的

其中它俩各有一个.toml配置文件。

所以这个不仅云服务器得有,客户端也得有。

 另外在虚拟机这里,

建议把网络适配器改为NAT模式,因为我们的本地机器是Windows的,这样配置后,我们如果在虚拟机上网,那么本地的Windows就相当于路由器,它会履行一个路由器的职责,比如建立NAT转化表等。 这个结论可以在 虚拟机上 通过 ifconfig 来查看本机的IP地址

然后用本地的Windows去ping这个IP地址

发现是可以ping通的。反过来用虚拟机ping本地的也是可以的。

在Windows上,可以用

ipconfig

 

可以看到Windows给每一个虚拟机都构建了一个子网(我这里有两个虚拟机)。 

接着,简单说明了原理后,在Windows的cmd下,输入dir

 往下翻可以看到有一个Desktop的文件夹,这其实就是我们的桌面。类似 Linux下 pwd 和 ls 命令的结合。

我之前已经把frp压缩包放到桌面了,接着我们cd进去,然后再dir

就能看到这个压缩包了。

最后 用 scp命令,将文件拷贝到虚拟机上

scp frp_0.58.1_linux_amd64.tar.gz chika@192.168.233.132:/home/chika/test-frp

注意ip地址前加上 目的用户名 + @ ,ip地址后加上 : + 目的路径 

先输入 yes  再输入虚拟机用户的密码即可。

如果Ubuntu不行,用Centos也行

 

同样进行了解压就可以了。

在命令行上输入

ps ajx | grep sshd

 可以查看当前机器是否启动了 ssh服务。

关于配置文件和注意事项 

首先先看一下云服务这边的配置文件,云服务器下执行

vim frps.toml

 

这里面只有一项,就是云服务默认绑定的端口号

默认是7000,可以不改。假设我们给改成了 8080,并保存退出,然后直接执行 frps

这里我们发现它绑定的端口号还是7000,我们可以先看一下frps的启动方式

 ./frps -h

 

所以我们要想指定端口号启动,就要再加上 -c 配置文件名

./frps -c frps.toml

 查看一下

netstat -nltp

发现确实启动了。

#配置公网服务器上 frp 服务的 IP 与端口
serverAddr = "x.x.x.x"
serverPort = 8888
[[proxies]]
name = "ssh-serivce" #名称
type = "tcp" #代理类型
localIP = "127.0.0.1" #本地 IP
localPort = 22 #内网服务监听的端口
remotePort = 8081 #需要在公网服务器上监听的端口,
#其他人未来可以通过这个端口访问
我们的本地的 22 号服务
#也就是说 8081 端口会映射到 22 号

接着再来看看客户端的配置文件

 首先前两行是我们这个客户端要连接的服务器的IP地址和端口号,这是需要我们自行修改的。

比如改成这样

其中下面的name将来会显示在服务器那边,以提醒服务器是哪个客户端连上来了。 

这个 type = tcp就不用多说,说明使用的是tcp协议。这个localIP表示的是这个客户端对外提供ssh服务的IP,在客户端这里就是本地。因为服务器将请求转发给的是客户端的frpc进程,在这个进程内部其实还要进一步将请求转发到,比如这个机器的ssh服务上的,因此其实还有一次转发。

最后 这个 localPort和remotePort是一对映射关系,将来如果我们在外边想通过云服务器来访问本地的ssh服务的22端口,那么外边就得访问云服务器上的6000号端口,然后云服务器将其映射成22号端口号。

注意:不要将 云服务器bind的8080端口号和这里的6000搞混淆了,8080是客户端访问云服务器的,当我们的客户端将 ssh端口号及它的remotePort推送给云服务器后,云服务器会重新启动一个服务,再bind一个remotePort端口号, 以后用户只要访问remotePort就能访问到客户端了。

 开始连接访问 ssh

启动客户端

./frpc -c frpc.toml

 

我们发现服务器这边立马也多了些信息

 其中仔细查找就能发现之前修改的客户端的名字, ssh-server

此时在云服务器上用netstat查看一下

发现果然又多了一个端口号为 6000的frps的网络服务。 但是注意它们的PID是一样的,说明是进程内部绑定的。

到这里,我们的就可以开始测试了。用X-shell再创建一个会话,不过此时

主机名依旧是云服务的IP地址,不过此时的端口号不再是22了,而是之前在客户端配置好的6000.

 确定之后,并连接

这里我是用CentOS7作为客户端测试的。 

 然后输入 客户端的密码

接着就连接成功了

ll一下

 因为我的CentOS7客户端是带有图形化界面的,所以是这样的。

我们可以cd 到桌面,并创建一个test文件夹

再回到虚拟机的桌面

发现确实多了一个test文件夹。

nginx远程访问

这里在虚拟机上部署nginx用来测试web服务访问

首先先在虚拟机上进行安装

sudo yum install nginx # centos 安装
sudo apt install nginx # ubuntu 安装#启动
$ nginx#暂停nginx -s stop#查看
ps ajx | grep nginx

 

再来看看它的端口号是多少

 发现端口号是80

说明是已经打开了,接着就再来配置客户端的frpc.toml

原来的信息可以不用删,因为frp支持多条连接访问服务器,然后由服务器暴露多个不同的端口给外界访问。

 改成这样即可

保存并退出后,再启动客户端

 发现多了一个 http-server

此时再看服务器这边

发现确实启动了两个服务,其中一个端口号是6000,另一个是6001

一个提供的是ssh服务,另一个提供的是web服务。

部署完成后,我们可以直接在打开我们本地的Windows浏览器,通过输入云服务器的公网 ip + 6001,可以直接访问到虚拟机上的网址

 

关于服务的后台启动并重定向

nohup ./frpc -c ./frpc.toml &> /dev/null &nohup ./frps -c ./frps.toml &> /dev/null &
&> /dev/null :这是重定向操作,用于将命令的标准输出( stdout )和标准错误
stderr )都重定向到 /dev/null /dev/null 是一个特殊的设备文件,向它写入的内
容都会被丢弃,读取它则会立即返回文件结束。因此,这个操作的作用是忽略命令的
所有输出信息。

至此内网穿透测试完成。


http://www.ppmy.cn/server/119616.html

相关文章

Qt/C++事件过滤器与控件响应重写的使用、场景的不同

在Qt/C中,事件过滤器和控件响应重写是两种用于捕获和处理鼠标、键盘等事件的机制,它们的用途和使用场景不同,各有优劣。下面详细介绍它们的区别、各自适用的场景、以及混合使用的场景和注意事项。 1. 事件过滤器(Event Filter&…

开源ERP系统odoo的安装与配置

开源ERP系统odoo的安装与配置 安装下载源码安装PostgreSQL安装Python3下载odoo依赖 配置启动 安装 安装方式有两种: 分发包安装: https://www.odoo.com/documentation/16.0/administration/install/packages.html源码安装: https://www.odoo.com/documentation/16.0/administ…

【计算机网络】应用层序列化

目录 一、序列化和反序列化二、重新理解 read、write、recv、send 和 tcp 为什么支持全双工三、Jsoncpp 一、序列化和反序列化 如果我们要实现一个网络版的加法器,需要把客户端的数据发给服务端,由服务端处理数据,再把处理结果发给客户端。 …

深度学习后门攻击分析与实现(一)

在计算机安全中,后门攻击是一种恶意软件攻击方式,攻击者通过在系统、应用程序或设备中植入未经授权的访问点,从而绕过正常的身份验证机制,获得对系统的隐蔽访问权限。这种"后门"允许攻击者在不被检测的情况下进入系统,执行各种恶意活动。 后门可以分为几种…

OpenAI GPT o1技术报告阅读(4)- 填字游戏推理

✨继续阅读报告:使用大模型来学习推理(Reason) 原文链接:https://openai.com/index/learning-to-reason-with-llms/ 这次我们继续看一个填字游戏的案例。 我们先看下问题: 解决以下填字游戏: Across(横向&#xff09…

Windows安全日志分析(事件ID详解)

目录 如何查看Windows安全日志 常见事件ID列表 事件ID 1116 - 防病毒软件检测到恶意软件 事件ID 4624 - 账户登录成功 事件ID 4625 - 账户登录失败 事件ID 4672 - 为新登录分配特殊权限 事件ID 4688 - 新进程创建 事件ID 4689 - 进程终止 事件ID 4720 - 用户账户创建 …

基于python+django+vue的农业管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的农…

Ngnix 在windows上的简单使用

安装 下载链接: nginx: download 选择页面中 Stable version 下的windows版本直接下载解压到本地。 运行nginx: 解压到本地后,结构如图: cmd 进入到上图的根目录,运行 start nginx ,即可开启。 打开 http://localhost 进行查看,如果正常打开nginx的测试页面,则说…