需求:
-
让其他人访问到自己电脑上的网页或服务
-
其他场景,比如大家想要登录同一个人的电脑来一起写代码、找 Bug、排查问题等等。
怎样实现这些需求呢?------------
内网穿透
一、内网穿透介绍
大多数情况下,个人电脑处于内网,即没有公开访问的独立IP(上网要通过其他网关),因此其他内网用户找不到你,没办法和你建立连接。
而内网穿透的作用,就是将内网的电脑暴露到公共网络。可理解为一个中间人,由于他知道你的电脑地址,所以能帮助其他用户访问到你的计算机。


二、方案1:frp实现内网穿透
2.1、frp介绍
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。GitHub - fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
作用:
-
利用处于防火墙后的机器,对外网环境提供 http 或 https 服务。
-
对于 http, https 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。
-
利用处于防火墙后的机器,对外网环境 提供 tcp 和 udp 服务 ,例如在家里通过 ssh 访问处于公司局部环境的主机。
frp工作原理:
-
frp服务端(公网)运行,监听一个端口bind_port,等待客户端的连接
-
frp客户端(私网)连接到frp服务端的主端口bind_port,同时告诉frp服务端要监听的端口remote_port和转发类型type
-
frp服务端(公网)fork新的进程监听客户端指定的端口remote_port
-
外网用户(浏览器)连接到frp客户端(私网)指定的端口remote_port,frp服务端通过和frp客户端的连接将数据转发到frp客户端(私网);
-
frp客户端(私网)进程再将数据转发到本地web服务,从而实现内网对外暴露服务的能力。
2.2、设备环境
想要配置frp穿透,首先必须先要有一台具有外网ip(即:可以外网访问)的服务器。
frp服务端:阿里云应用轻量服务器(公网) Ubuntu 60.205.222.199
frp客户端1: 北京实验室服务器(内网) Ubuntu 192.168.6.146
frp客户端2: 南京实验室服务器(内网) Ubuntu 192.168.11.123
2.3、操作配置
有人访问阿里云服务器:https://阿里云服务器外网ip:8443
它的链路如下:阿里云服务器frp服务端—> 内网电脑frp客户端—> 192.168.6.146:443(web服务) 或者 192.168.11.123:22(ssh服务),然后按照原路返回

2.3.1:frp服务端配置
1、首先到frp的release界面下载适合自己电脑的程序Releases · fatedier/frp · GitHub 可以直接去这个页面下载
也可以通过wget命令下载 : wget https://github.com/fatedier/frp/releases/download/v0.32.1/frp_0.32.1_linux_amd64.tar.gz;
2、解压:tar -zxvf frp_0.32.1_linux_amd64.tar.gz
3、进入cd到frp_0.32.1_linux_amd64目录,对于服务端的配置可以直接选择将frpc和frpc.ini文件删除,之后配置frps.ini
[common]
token = token # 授权令牌,会在frp客户端用到
bind_port = 7000 # 与客户端绑定的进行通信的端口,默认7000
vhost_http_port = 80
vhost_https_port = 443
# frp管理后台端口,请按自己需求更改
dashboard_port = 7500
# frp管理后台用户名和密码,请改成自己的
dashboard_user = user
dashboard_pwd = password
enable_prometheus = true
# frp日志配置
log_file = /var/log/frps.log
log_level = info
log_max_days = 3
subdomain_host = podding.cn # 注册的域名
保存后就可以启动服务端了
# 前台启动
./frps -c ./frps.ini
# 后台启动(正常使用后推荐后台启动)
nohup ./frps -c ./frps.ini &
必须先启动服务端frp,再启动客户端frp。
此时,可以访问dashboard界面:http://公网IP:7500。
2.3.2:frp客户端1配置
1、首先到frp的release界面下载适合自己电脑的程序Releases · fatedier/frp · GitHub 可以直接去这个页面下载
也可以通过wget命令下载:wget https://github.com/fatedier/frp/releases/download/v0.32.1/frp_0.32.1_linux_amd64.tar.gz;
2、解压:tar -zxvf frp_0.32.1_linux_amd64.tar.gz
3、进入cd到frp_0.32.1_linux_amd64目录,对于客户端的配置可以直接先将frps和frps.ini文件删除,之后配置frpc.ini
[common]
token = token # 授权令牌
server_addr = 60.205.222.199 # 公网服务器ip
server_port = 7000 # 阿里云服务器frp服务端的bind_port端口,frp的客户端要去连接这个端口,从这里做代理
[podding_bj_web]
type = tcp # 连接协议
local_ip = 127.0.0.1 # 内网服务器ip(192.168.6.146也行)
local_port = 443 # 内网web服务的端口
remote_port = 8443 # 自定义的frp服务端访问内部podding服务的端口号,需要在frp服务器的防火墙放开
#custom_domains = podding.cn # 绑定自定义域名
# 公网通过ssh访问内部服务器,北京那边服务器不需要这块
[ssh]
type = tcp # 连接协议
local_ip = 192.168.6.146 # 内网服务器ip(127.0.0.1也行)
local_port = 22 # ssh默认端口号
remote_port = 7021 # 要映射到的frp服务器端口,用于访问内部ssh。如果 remote_port 为 0,frps 会为你分配一个随机端口
bandwidth_limit = 1MB # 限制此代理的带宽,单位为 KB 和 MB
use_encryption = false # 如果为 true,则 frps 和 frpc 之间的消息将被加密,有效防止流量被拦截,默认为 false
use_compression = false # 若为true,消息会被压缩,加快流量转发速度,但是会额外消耗一些 CPU 资源。
保存后就可以启动客户端了
# 前台启动
./frpc -c ./frpc.ini
# 后台启动(正常使用后推荐后台启动)
nohup ./frpc -c ./frpc.ini &
必须先启动服务端frp,再启动客户端frp。
2.3.3、frp客户端2配置
配置frpc.ini
[common]
token = token # 授权令牌
server_addr = 60.205.222.199 # 公网服务器ip
server_port = 7000 # 阿里云服务器frp服务端的bind_port端口,frp的客户端要去连接这个端口,从这里做代理
# 公网通过ssh访问内部服务器
[ssh]
type = tcp # 连接协议
local_ip = 127.0.0.1 # 内网服务器ip
local_port = 22 # ssh默认端口号
remote_port = 7022 # 要映射到的frp服务器端口,用于访问内部ssh, remote port listen by frps。如果 remote_port 为 0,frps 会为你分配一个随机端口
bandwidth_limit = 1MB # 限制此代理的带宽,单位为 KB 和 MB
use_encryption = false # 如果为 true,则 frps 和 frpc 之间的消息将被加密,默认为 false
use_compression = false # 若为true,消息会被压缩
将个人电脑的公钥添加到南京实验室服务器192.168.11.123的.ssh/authorized_keys,这样安全,内网登录时使用私钥:
保存后就可以启动客户端了
# 前台启动
./frpc -c ./frpc.ini
# 后台启动(正常使用后推荐后台启动)
nohup ./frpc -c ./frpc.ini &
必须先启动服务端frp,再启动客户端frp。
2.4:测试穿透是否配置成功:ssh远程连接南京内网服务器
找另外一台不同网段的linux或者mac电脑,在终端执行,因为这里只有个人电脑提供公钥给跳转机(南京机器192.168.11.123),在个人电脑cmd中执行:
ssh
-
p remote_port 内网主机用户名
@
公网ip
# 举例
ssh -p 7022 nist@60.205.222.199 # 进入跳转机(南京机器192.168.11.123)

一定要注意,输入密码的时候一定要输入内网中的密码,端口号用的frpc.ini文件中的remote_port。如果你登录成功,那么,恭喜你,你已经学会了利用frc怎么配置内网穿透了!!!
2.5:“https+域名” 访问
此时,在frp服务端,可以使用curl -k
https://127.0.0.1:8443访问北京那边的web服务。
若想浏览器使用
https://阿里云服务器外网ip:8443访问,你得在frp服务端(
阿里云服务器
)开放8443端口。
nginx配置使用 443端口+域名 访问:

结果:

三、方案2:nginx+ssh实现内网穿透
需要准备的环境:
-
自己本地运行起来的项目(这里以podding项目为例: https://192.168.11.45:443)
-
一台云服务器,阿里云,腾讯云等等,这里选择可以公网的跳转机60.205.222.199。
-
云服务器上安装nginx。
-
域名(可以没有)
3.1、公网服务器
1、进入到公网服务器60.205.222.199
2、配置nginx的配置文件
server {
listen 8888; #这里监听的为后续访问的公网云服务器端口,可以设置为任意一个服务器上还不存在的端口号
server_name xx.xx.cn; # 这里填你的域名,如果没有域名则填localhost
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://localhost:8899; # 这里的8899相当于一个标识,和后面在本地创建通道相关,可以任意设置一个值。防火墙得开放此端口
}
}
3、重启nginx
3.2、在本地服务器操作
ssh -vnNT -R 服务器端口:localhost:本地端口 服务器用户名@服务器 IP 地址
-N 表示非不执行命令,只做端口转发;-f 表示在后台运行,
-R 10022:localhost:22 就是把本地的22端口转发到远程的10022端口。
1、在本地终端输入命令ssh -vnNt -R 8899:localhost:443 user@ip # 将本机的443端口映射到外网服务器的8899端口上
8899是nginx中配置的标识,443是本地web服务的访问端口, user为云服务器的用户名,ip为云服务器公网地址,回车输入云服务器密码就好了,
出现如下代表成功:
此时,在云服务器公网可以看到8899端口: netstat -antpul | grep 8899
2、打开本地浏览器,输入自己的云服务器公网ip(如果有域名也可通过域名来访问)和端口来进行访问,例如http://xx.xx.xx.xx:8888。
本文介绍了两种内网穿透方案,分别是使用frp和nginx+ssh。详细阐述了frp的工作原理,配置步骤,包括服务端和客户端的设置,并提供了测试穿透成功的实例。此外,还提到了nginx+ssh的内网穿透实现方法,涉及公网服务器和本地服务器的配置。
4204

被折叠的 条评论
为什么被折叠?



