原文地址
前言
内网穿透就不谈了,IPv4
地址太少,IPv6
还没有普及,而且公司或者家庭内网环境需要穿透,方便办公以及调用。这里简单写下目录穿透和服务穿透以及windows
远程控制穿透,需要公网服务器,否则无法定位一个固定的ip
地址。所以,一次成功的穿透需要三个端,服务端,代理端,客户端
部署
我们这里使用frp
作为内网穿透工具,比较简单,我们这里就不使用的docker
了。操作步骤参考官方文档,这里只展示Linux
,windows
下同理。本文不涉及安全处理,需要的小伙伴可以自行查阅文档添加authentication_method
,修改默认端口等操作
release发布地址获取包,如果程序需要动态获取包,参考本站文章通过命令行获取github项目的最新版本
wget https://github.com/fatedier/frp/releases/download/v0.48.0/frp_0.48.0_linux_amd64.tar.gz
解压
tar -zxvf frp_0.48.0_linux_amd64.tar.gz
创建系统服务
vim /etc/systemd/system/frps.service
写入服务配置
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /path/to/frps -c /path/to/frps.ini
[Install]
WantedBy = multi-user.target
服务启动
systemctl enable frps
systemctl start frps
目录穿透
目录穿透代理端构建
frps.ini
[common]
bind_port = 7000
目录穿透服务端构建
frpc.ini
,注意,这里说下,这里使用的虽然是frpc
看起来像是客户端,但是这个客户端是对于frp
来说的,对于我们的实现功能来说,提供目录的为服务端,下面其他实现功能一样
这里登录后用户token
信息会再后续请求中放入header
中,如果内部调用可以忽略plugin_http_user
配置信息
[common]
server_addr = x.x.x.x
server_port = 7000
[test_static_file]
type = tcp
remote_port = 6000
plugin = static_file
# 要对外暴露的文件目录
plugin_local_path = /tmp/file
# 用户访问 URL 中会被去除的前缀,保留的内容即为要访问的文件路径
plugin_strip_prefix = static
plugin_http_user = abc
plugin_http_passwd = abc
当然,这里服务器的6000
端口是需要开放的,但是也可以使用nginx
转发处理而不开放6000
端口,其他使用remote_port
属性的实现功能一样,就不赘述了
目录穿透客户端调用
http://x.x.x.x:6000/static/1.txt
服务穿透
服务穿透代理端构建
[common]
bind_port = 7000
vhost_http_port = 8080
服务穿透服务端构建
frpc.ini
,这里server_addr
同样可以使用域名,custom_domains
也可以使用ip地址
,没有域名的硬性要求
[common]
server_addr = x.x.x.x
server_port = 7000
[web]
type = http
local_port = 8080
custom_domains = www.yourdomain.com
服务穿透客户端调用
http://www.yourdomain.com:8080/health
windows远程控制
windows远程控制代理端构建
frps.ini
[common]
bind_port = 7000
windows远程控制服务端构建
frpc.ini
,首先需要保证服务端windows
电脑可以被远程控制,在系统设置中调整,直接在设置中检索远程桌面即可,同时勾上下方复选框仅允许运行…计算机连接,此时在远程连接时候,将使用你的微软账号密码登入
这里家庭版的应该是不允许设置的,但是可以尝试解决,每个版本处理方式可能会有所不同,后续升级也可能被修复,这里还请小伙伴们自行百度
[common]
server_addr = x.x.x.x
server_port = 7000
[RDP]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 6000
windows远程控制客户端连接
win+r
-> mstsc
->x.x.x.x:6000
即可访问,登录凭证上如果服务端使用的微软账户,那么则输入微软账号的账户密码,如果你使用的是本地账户,则这里使用本地账户的账号密码即可。如果你使用微软账户密码提示凭据不工作,在你之前没有特殊处理的情况下,一般是微软自己的问题,请尝试先切换本地账户,测试是否可以连接,如果可以连接,切换回微软账户一般就可以了。如果不能连接,那么可能是你之前有过奇怪设置,解决方案参考互联网