超详细的frp内网穿透
内网穿透和防火墙问题
什么是内网穿透?
简单来说,就是将内网的电脑利用公网的IP来连接,公网服务器IP作为一个转发的过程。
其中分为服务端server,运行在公网服务器
客户端client,运行在内网电脑!
frp内网穿透
推荐使用,简单,快捷
下载 linux版本
[root@VM-4-8-centos .ssh]# uname -r
4.18.0-305.10.2.el8_4.x86_64
wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz
解压
tar -xvf frp_0.38.0_linux_amd64.tar
#或者 如果是tar.gz 需要加z表示gzip文件
tar -zxvf frp_0.38.0_linux_amd64.tar.gz
安装 配置
进入解压后的目录:
cd frp_0.33.0_linux_amd64
,然后进入解压目录之后使用用vim/nano等编辑器编辑frps.ini
文件(可以下载到本地,编辑好后再上传上去)
通过 SSH 访问内网机器 以及配置http服务器
1.在具有公网 IP 的机器上部署 frps,修改
frps.ini
文件,这里使用了最简化的配置,设置了 frp 服务器用户接收客户端连接的端口
[common]
# frp监听的端口,默认是7000,可以改成其他的
bind_port = 7000
# 授权码,请改成更复杂的
token = 12345678
# frp管理后台端口,请按自己需求更改
dashboard_port = 7500
# frp管理后台用户名和密码,请改成自己的
dashboard_user = admin
dashboard_pwd = admin
enable_prometheus = true
# frp日志配置
log_file = /var/log/frps.log
log_level = info
log_max_days = 3
2.在需要被访问的内网机器上(SSH 服务通常监听在 22 端口)部署 frpc,修改 frpc.ini 文件,假设 frps 所在服务器的公网(服务器的)IP 为 x.x.x.x:
# 客户端配置
[common]
server_addr = 服务器ip
# 请换成设置的服务器端口
server_port = 7000
token = 12345678
# 配置ssh服务
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 自定义的远程服务器端口,例如2222
# 配置http服务,可用于小程序开发、远程调试等
[web]
type = http
local_ip = 127.0.0.1
local_port = 8080
subdomain = test.hijk.pw
remote_port = 自定义的远程服务器端口,例如1280
#其他服务可以自己添加相应端口,例如VNC服务
[range:VNC-Pi]
type = tcp
local_ip = 127.0.0.1
local_port = 5900 #本地机器端口
remote_port = 5901
分别启动 frps 和 frpc。(看下方启动发发)
通过 SSH 访问内网机器,假设用户名为 test:
ssh -oPort=6000 test@x.x.x.x
frp 会将请求
x.x.x.x:6000
的流量转发到内网机器的 22 端口。
更多示例参考官方文档:https://gofrp.org/docs/examples/vhost-http/
启动
简单启动测试
编写配置文件,
先通过 ./frps -c ./frps.ini 启动服务端,
再通过 ./frpc -c ./frpc.ini 启动客户端。
如果需要在后台长期运行,建议结合其他工具使用,例如 systemd 和 supervisor。(看下方)
配置为系统服务
mkdir -p /etc/frp
cp frps.ini /etc/frp
cp frps /usr/bin
#如果需要在后台长期运行,建议结合其他工具使用,例如 systemd 和 supervisor。
cp systemd/frps.service /usr/lib/systemd/system/
systemctl enable frps
systemctl start frps
# 客户端配置后台(也就是内网机器)
sudo mkdir -p /etc/frp
sudo cp frpc.ini /etc/frp
sudo cp frpc /usr/bin
# Centos
sudo cp systemd/frpc.service /usr/lib/systemd/system/
# 乌班图
sudo cp systemd/frpc.service /lib/systemd/system/
sudo systemctl enable frpc
systemctl start frpc
防火墙问题(Centos为例) 非常重要!
1.首先是,云服务器页面配置,规则里面放通设置的端口。
2.若云服务器提供商设置的防火墙也打开了,但是还是访问不了的话,是因为CentOS7系统中的防火墙没有所需要的端口,需要进行如下操作:
系统防火墙,放通端口或者永久关闭(不安全)
如果是firewall防火墙 添加放通规则
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --permanent --add-port=1280/tcp
firewall-cmd --permanent --add-port=38952/tcp
firewall-cmd --permanent --add-port=2223/tcp
ssh: connect to host 110.42.206.214 port 2222: Connection refused
firewall-cmd --reload
## 查看当前开发的端口
firewall-cmd --zone=public --list-ports
如果iptables防火墙
iptables -L -n #查看当前所有的iptables配置
添加允许INPUT访问规则,以下时常见服务的端口设置,如果需要拒绝访问,则将ACCEPT改为DROP即可 端口
iptables -A INPUT -p tcp --dport 7000 -j ACCEPT
iptables -A INPUT -p tcp --dport 1280 -j ACCEPT
添加使用IP限制INPUT访问规则,这里拿SSH为例,192.168.0.100为允许的IP
#DELETE
iptables -D INPUT -p tcp --dport 22 -j ACCEPT
#ADD
iptables -A INPUT -s 192.168.0.100 -p tcp --dport 22 -j ACCEPT
添加完保存
iptables-save
iptables-save
[root@VM-4-8-centos frp_0.38.0_linux_amd64]# iptables-save
# Generated by iptables-save v1.8.4 on Thu Nov 18 09:15:10 2021
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -p tcp -m tcp --dport 7000 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 1280 -j ACCEPT
COMMIT
一个比较久的错误关于iptables
发现保存之后很多命令用不了,开始以为是系统问题,后面发现是没有安装iptable的服务,先安装即可
1.安装
yum install iptables-services
2.设置开机启动:
systemctl enable iptables.service
3.以下指令都可以使用了
systemctl stop iptables
systemctl start iptables
systemctl restart iptables
systemctl reload iptables
4.然后添加上面规则并保存
iptables -A INPUT -p tcp --dport 7000 -j ACCEPT
iptables -A INPUT -p tcp --dport 1280 -j ACCEPT
iptables -A INPUT -p tcp --dport 1280 -j ACCEPT
总结
因为对云服务器防火墙规则已经修改放行,并没有关注系统的软件如iptables或者firewall对于到端口系统被防火墙拦截问题,后面经过思考发现是系统防火墙问题,
最开始以为是iptables的防火墙问题,添加端口放行之后仍然无效
然后排除firewall的防火墙,放行之后。但是发现还是客户端连接服务器任然有问题,然后紧接着继续排除搜索相关问题
然后发现是软件本身对tls的支持问题,需要修改配置。
仍然被阻断问题
commen下添加`tls_enable=true`
参考https://blog.phpgao.com/frp_tcp_reset.html
修改完成之后,7000成功绑定
ssh连接问题
本以为都可以了,结果发现端口被拒绝!此时web管理页面正常登录,发现端口号和设置的不一样,放行此端口号使用该端口号登录成功。(解决了因为客户端配置文件中后面的文字没删。。也没注释!导致设置的端口无效)
本文来自博客园,作者:勒勒乐了,转载请注明原文链接:https://www.cnblogs.com/matytan/p/15979647.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步