内网让网络较为安全,但是也影响了服务暴露和公网实验。现在也有固定公网ip+nat的方式暴露的方案,但是此方案需要向运营商申请固定IP和配置NAT网关,并不适用家用的网络和一些非固定IP环境。 网上虽然有服务商提供动态DNS来解决,但是需要花钱,不是一个做技术的人的好选。 偶然有机会了解一些小工具(frp、ngrok 、 natapp(收费)、小米球、sunny-ngrok、echosite、ssh(autossh)、lanproxy、spike、fcn), 可以完成此类实验工作。本文只介绍frp这个免费的小工具。
准备工作:
有一个公网IP的服务器(VPS),根据服务器环境,和主机环境下载相应的frp服务器端和客户端。我这里服务器服务器环境是linux 64位,客户端环境是linux 64 端。所以到官网https://github.com/fatedier/frp/releases下载相应版本,写文档时,版本为: v0.21.0; 解压后获得7个文件
开始配置服务端:
服务端只需要两个文件: frps和frps.ini ; 其中frps是服务端执行文件, frps.ini是配置文件; 配置文件如下:
[common]
bind_addr = 0.0.0.0
bind_port = 7000
auto_token = sss
bind_addr 为绑定的本机IP,bind_port 为frp客户端连接的端口, auto_token是客户端与服务端的连接密码。
配置好后即可以运行, 运行命: :./frps -c ./frps.ini
配置客户端:
同样,客户端配置也只需要两个文件: frpc和frpc.ini 其中frpc是客户端执行文件, frpc.ini是配置文件, 配置文件如下:
[common]
server_addr = 172.16.0.31
server_port = 7000
auto_token = sss
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
server_addr是服务器端的公网IP地址,server_port是frp服务端口号,auto_token是连接服务器的口令,必须和服务器保持一致。[ssh]是客户端通过服务器与用户之间的通道名,每个客户端必须不一样,remote_port是服务器端对外提供本机服务的端口号,即用户连接172.16.0.31:6000,相当于连接127.0.0.1:22,即客户端上的ssh服务。
运行客户端:./frpc -c ./frpc.ini
测试
这样我们就可以在外网通过 ssh 172.16.0.31 -p 6000 连接到内网机器的ssh服务上了。 同理 也可代理https http 等tcp服务。
网友评论