frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。 本文将基于 frp 来实现内网穿透。
frp 的作用:
1.利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。
2.对于 http, https 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。
3.利用处于内网或防火墙后的机器,对外网环境提供 tcp 和 udp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。
在具有公网IP的服务器或VPS上安装运行 frp 的服务端程序frps,并在处于内网的目标主机上面安装运行 frp 的客户端程序 frpc ,然后 User 就可以通过公网服务器来实现内网穿透从而访问内网主机。
环境:
配置 ssh 访问内网机器
1.下载安装包:
在公网服务器和内网机器上都要下载安装包并解压:
1 | $ wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_linux_amd64.tar.gz |
2.在公网服务器上配置并启动:
修改配置文件修改配置文件 $ vi frps.ini,如下:
1 | [common] |
配置很简单,然后启动:
1 | $ nohup ./frps -c frps.ini & |
查看 nohup.out 的信息,success:
1 | # tail -f nohup.out |
3.在内网机器上配置并启动:
修改配置文件 $ vi frpc.ini,如下:
1 | [common] |
启动客户端程序::
1 | $ nohup ./frpc -c frpc.ini & |
查看 nohup.out 的信息,success:
1 | $ tail -f nohup.out |
4.登录:
1 | ssh -oPort=6000 username@server_addr |
或者
1 | ssh -p 6000 username@server_addr |
上面登录使用的 username 是内网机器的用户名,server_addr是公网服务器的IP,port 6000就是设置的 remote_port,最后的登录密码是内网机器的密码,而不是公网机器的密码,这一点一定要注意。
问题解决:
在启动服务端和客户端程序之后,可能发现还是无法登录到内网内网机器,在内网机器上面执行 tail -f nohup.out 查看启动命令的执行结果,可以发现以下的问题:
1 | $ tail -f nohup.out |
仔细检查了一下,发现是公网服务器防火墙的原因,没有允许对应端口的流量通过,所以需要配置防火墙:
1 | #firewall-cmd --zone=public --add-port=3389/tcp --permanent |
阿里云服务器需要在esc管理中配置安全组规则中添加3389,6000端口