server1:10.10.10.1:内网服务器;无代理
server2:10.10.10.2:内网服务器;有代理(代理端口为8888)
server3:192.168.1.xx:外网服务器
使用frp实现通过外网访问server3(的指定端口)从而访问内网服务器server1, server2是server1的代理服务器。
1.配置server3的frps.ini(服务端)
[common]
bind_port = 7000
auth_token = influx
2.配置server1的frpc.ini (客户端)
[common]
server_addr = 192.168.1.xx
server_port = 7000
auth_token = influx
http_proxy = http://10.10.10.2:8888
https_proxy =https://10.10.10.2:8888
[bc_ssh]
type = tcp
local_port = 3125
remote_port = 5066
说明:
server_port 为server3 frp服务绑定的端口号(frps与frpc一致)
auth_token 为frps与frpc的认证秘钥 (frps与frpc一致)
http_proxy/https_proxy 为内网(server2)代理服务器的地址+代理服务端口号
由于server1没有外网也没有代理,所以只能通过server2的代理连接外网服务器上的frps
type=tcp 设置访问方式为tcp
local_port =3125 本地访问(ssh访问)端口为3125
remote_port =5066 设置远程对外端口为5066(就是设置server3访问server1的端口)
3.启动frps 和frpc
server3上启动:
./frps -c frps.ini
server1上启动:
./frpc -c frpc.ini
后台持续启动
nohup ./frps -c frps.ini&
nohup ./frpc -c frpc.ini&
4.通过server3访问server1(ssh)
确保服务器安装了ssh
ssh -p 5066 @username192.168.1.xx:5066
注意:
username 为server1也就是10.10.10.1的用户名;password也是server1的password
由于frpc的remote_port = 5066所以在server3的端口是5066就指定了访问的是server1
遇到的问题
frp服务端需和客户端版本一致(最好一致吧)
执行./frpc -c frpc.ini
时报错,返回:
login to server failed:ConnectTcpServer using proxy error, StatusCode [403]
403是forbbiden/refused
解决办法:
1.检查服务器有没有设置代理的环境变量HTTP_PROXY,(在/ etc/profile或者/etc/environment)删除代理环境变量
或者 直接执行
http_proxy="" ./frpc -c frpc_.ini
2.检查代理服务器上(server2)的 squid配置
把#http_access deny CONNECT !SSL_ports
注释掉
或者类似的deny项都注释掉
如果用的是别的代理软件,如tinyproxy,在配置文件中添加
ConnectPort 7000
保存restart proxy服务