不学习是会 被override的!.|

勒勒乐了

园龄:3年4个月粉丝:5关注:3

2022-03-08 11:20阅读: 2231评论: 0推荐: 0

超详细的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
  1. 分别启动 frps 和 frpc。(看下方启动发发)

  2. 通过 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配置  

image-20211118090659734

添加允许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管理页面正常登录,发现端口号和设置的不一样,放行此端口号使用该端口号登录成功。(解决了因为客户端配置文件中后面的文字没删。。也没注释!导致设置的端口无效)

image-20211118103353997

posted @   勒勒乐了  阅读(2231)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起