frp实现内网穿透

准备

  1. 公网ip的服务器

  2. 内网windows主机

  3. 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客户端

连接成功!

posted @ 2022-05-22 15:48  Pikachuuuuu  阅读(346)  评论(0)    收藏  举报