frp实现内网穿透
准备
-
公网ip的服务器
-
内网windows主机
-
从 github frp 上下载对应操作系统的frp
-
将 frps 及 frps.ini 放到具有公网 IP 的机器上
-
将 frpc 及 frpc.ini 放到处于内网环境的机器上。
-
公网服务器配置
解压后进入frp的文件夹内,修改frps.ini
[common]
bind_port = 7000 # frp服务端端口(必须)
#dashboard_port = 7500
token = 12345678
#dashboard_user = admin
#dashboard_pwd = admin
- “bind_port”表示用于客户端和服务端连接的端口,这个端口号我们之后在配置客户端的时候要用到。
- “dashboard_port”是服务端仪表板的端口,若使用7500端口,在配置完成服务启动后可以通过浏览器访问 x.x.x.x:7500 (其中x.x.x.x为VPS的IP)查看frp服务运行信息。(我们不需要)
- “token”是用于客户端和服务端连接的口令,请自行设置并记录,稍后会用到。
- “dashboard_user”和“dashboard_pwd”表示打开仪表板页面登录的用户名和密码,自行设置即可。(我们不需要)
配置完成后,执行下面命令,就可以启动frp了(服务端)
./frps -c ./frps.ini
如果想要后台运行
nohup ./frps -c frps.ini &
【注意!】检查你的公网服务器,7000端口是否对外开放了,端口开放之后要重启防火墙才能生效,在服务端运行以下代码
$ firewall-cmd --reload
客户端配置
解压后进入frp的文件夹内,修改frpc.ini
[common]
server_addr = xxx.xxx.xxx.xxx #frp服务端地址,必须是公网ip或者域名
server_port = 7000 #frp服务端端口,即填写服务端配置中的 bind_port
token = 12345678 #同frp服务端的token
[ssh]
type = tcp #连接类型,填tcp或udp
local_ip = 127.0.0.1 #填127.0.0.1或内网ip都可以
local_port = 22 #需要转发到的端口,ssh端口是22
remote_port = 6000 #frp服务端的远程监听端口,即你访问服务端的remote_port就相当于访问客户端的 local_port,如果填0则会随机分配一个端口
配置完成后,执行下面命令,就可以启动frp了(客户端)
./frpc -c ./frpc.ini
如果想要后台运行
nohup ./frpc -c frpc.ini &
【注意!】检查你的公网服务器,6000端口是否对外开放了,端口开放之后要重启防火墙才能生效,在服务端运行以下代码
$ firewall-cmd --reload
此时可以在局域网外使用相应程序访问 x.x.x.x:xxxx (IP为VPS的IP,端口为自定义的remote_port)即可访问到相应服务。
注意:
如果卡在以上界面,一段时间后报错,并且服务器logs没有任何响应:
[W] [control.go:109] login to server failed: dial tcp xx.xx.xx.xx:7000: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
dial tcp xx.xx.xx.xx:7000: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
这时说明服务器的防火墙没有打开该端口,除了firewall防火墙,还用到了iptables防火墙。
注意到以下关于防火墙的命令:
我们需要将7000(服务器端中的bind_port)端口放行,再服务端中输入以下命令:
iptables -F
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 7000 -j ACCEPT
然后重新连接windows客户端
连接成功!