frp工具使用教程-linux (内网渗透 内网穿透)
服务端linux ,客户端linux
linux下frp实现内网穿透_linux frp-CSDN博客
1- 下载
快速练级:
wget https://gitee.com/wang-huamao/soft/raw/master/neiwang/frp_0.53.0_linux_amd64.tar.gz
备用连接:
wget https://github.com/fatedier/frp/releases/download/v0.53.0/frp_0.53.0_linux_amd64.tar.gz
tar xf frp_0.53.0_linux_amd64.tar.gz
进入文件夹,有两个名称文件frpc(c结尾代表client)和frps(s结尾代表server),分别是服务端程序和服务端配置程序。
需要将frpc拷贝至客户端,即内网服务器,或者在客户端直接下载也可以,客户端只需要使用frpc文件即可。
frp是一个专注于内网穿透的高性能的反向代理应用,支持TCP,UDP,HTTP,HTTPS等多种协议。可以将内网服务以安全、便捷的方式通过具有公网IP节点的中转暴露到公网。
市面上一些主流的内网穿透工具有:Ngrok,Natapp,花生壳,Ssh、autossh,Frp,Lanproxy,Spike。
这里介绍使用frp工具。
2- 启动服务端
添加 frps.ini 文件
./frps -c frps.ini
3- windows 客户端配置
这里用win 的客户端来连接 Linux 上的 frp 服务
服务器需要开启 7000端口。
frpc.ini
# 客户端配置
[common]
#服务器ip
server_addr = 8.130.78.133
# 与frps.ini的bind_port一致
server_port = 7000
# 与frps.ini的token一致
token = 12345678
# 配置ssh服务, 也可以用来映射其他端口如3389
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
# 这个remote_port端口自定义,配置完成后会在公网服务器开启6000端口,来映射内网主机3389端口
remote_port = 6001
# 如果第3方连接 8.130.78.133:6000 , 则实际上是连接的内网主机的 22端口
#socks5代理配置 ,一般这个用途比较多
[socks5]
type=tcp
plugin=socks5
# socks代理账号密码,需要修改不要使用弱口令
plugin_user=admin
plugin_passwd=admin
#映射到共外网服务器的端口
remote_port = 8000
4-linux 客户端
如果你是 想 ssh linux(局域网)可以参考如下:
frpc.ini
# 客户端配置
[common]
#服务器ip
server_addr = 8.130.78.133
# 与frps.ini的bind_port一致
server_port = 7000
# 与frps.ini的token一致
token = 12345678
# 配置ssh服务, 也可以用来映射其他端口如3389
[ssh_1]
type = tcp
local_ip = 127.0.0.1
local_port = 22
# 这个remote_port端口自定义,配置完成后会在公网服务器开启6000端口,来映射内网主机3389端口
remote_port = 6001
# 如果第3方连接 8.130.78.133:6000 , 则实际上是连接的内网主机的 22端口
浏览器打开web管理界面,http://192.168.80.133:7500/,可查看端口映射相关情况
plugin_user=admin
plugin_passwd=admin
正常启动时没有报错的
如果报错:
[ssh] start error: proxy [ssh] already exists
需要修改 frpc.ini 的中:
把[ssh] 改为 [ssh_1] 或者[ssh_ABC123],等其他命名,即可解决冲突问题。
其他错误:
[ssh_1] start error: port already used
解决办法:
远程端口被占用,换一个端口。
4:后台启动
对于正式环境,可以配置后台启动,并报存日志输出到相关文件。
服务端:
nohup ./frps -c frps.ini > /usr/local/frp/frp.log 2>&1 &
客户端:
nohup ./frpc -c frpc.ini > /usr/local/frp/frp.log 2>&1 &
下面设置frp服务开机自启:
服务端设置:
进入文件夹:
cd /etc/systemd/system
创建启动文件:
vim frp.service
编写启动文件,其中启动路径是自己的路径:
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/opt/frp/frps -c /opt/frp/frps.ini
ExecReload=/opt/frp/frps reload -c /opt/frp/frps.ini
[Install]
WantedBy=multi-user.target
保存退出之后,设置开机自启:
systemctl start frp.service
systemctl enable frp.service
检查: lsof -i:7000
客户端开机自启:
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/opt/frp/frpc -c /opt/frp/frpc.ini
ExecReload=/opt/frp/frpc reload -c /opt/frp/frpc.ini
[Install]
WantedBy=multi-user.targe
我的案例:
beian2v2G - 跳转10.0.0.199
8.130.78.133 , 60001
http://8.130.78.133:7500/
windows 开机启动配置:
windows将nginx 注册为windows服务(开机自启) : 连接
frpc-service.xml
<service>
<!-- 服务ID。它应该在整个Windows系统中是唯一的-->
<id>frpc-service</id>
<!-- 在系统服务中显示的名称 -->
<name>frpc-service</name>
<!-- 服务描述 -->
<description>frpc服务</description>
<!-- 启动可执行文件的路径 -->
<executable>D:\02-tools\vpn\frp\frp-windows\2-frp-windows-custom\frpc.exe </executable>
<arguments>-c frpc.ini</arguments>
<!-- 日志模式 -->
<log mode="roll-by-size">
<sizeThreshold>10240</sizeThreshold>
<keepFiles>8</keepFiles>
</log>
</service>
{#more-15767}
添加http 服务
服务端需要配置:
#服务器端配置
[common]
# frp监听的端口,默认是7000,可以改成其他的
bind_port = 7000
#web服务http接口,就是你打开网址时输入的端口号,因为80端口被占用,所以我使用了别的
vhost_http_port = 6004
# 授权码,请改成更复杂的,这个token之后在客户端会用到
token =12345678
# frp管理后台端口,请按自己需求更改
dashboard_port = 7500
# frp管理后台用户名和密码,请改成自己的
dashboard_user = admin
dashboard_pwd = admin
enable_prometheus = true
也可以参考 其他的
vhost_http_port=80 #服务器监听80端口
vhost_https_port=443 #服务器监听443端口,Https
然后客户端的配置如下:
[web1]
type = http
local_ip = 127.0.0.1
# 我window上的虚拟机地址, 如果是本机的可以直接写 127.0.0.1
local_port = 80
# 这个网址需要在外部云服务器上绑定
custom_domains = ks1.k8sdashu.cn
[web2]
type = http
local_ip = 10.0.0.108
# 我window上的虚拟机地址, 如果是本机的可以直接写 127.0.0.1
local_port = 30880
# 这个网址需要在外部云服务器上绑定
custom_domains = ks.k8sdashu.cn
其他可以参考:
[web] #暴露公司内网的git代码托管服务
type = http #选择http类型
local_port = 88 #gitlab本地监听地址,默认是80,需要修改gitlab配置为88或其他端口,以避免与内网nginx端口占用的冲突
custom_domains = git.domain.com #外网域名,该域名可以在dns解析到xxx.xxx.xxx.xxx的外网服务器ip上,这样在外就可以通过域名访问公司内部服务
[web2] #暴露更多的公司内网测试环境服务
type = http
local_port = 80 #nginx本地监听地址,外网进来的服务通过nginx匹配各种domain来区分请求,转发
custom_domains = test.domain.com
[web3]
type = http
local_port = 80
custom_domains = test2.domain.com
访问如图:
http://ks.k8sdashu.cn:6004/login
http://ks1.k8sdashu.cn:6004/
http://ks.k8sdashu.cn:6004/
./start.sh client启动脚本如下:(server端类似)
#!/bin/sh
PID=`ps aux|grep frp|grep -v 'grep'|awk '{print $2}'`
if [ "$PID" = "" ]; then
echo 'start frpc now.'
./frpc -c ./frpc.ini > c.log &
sleep 2
tail -n 20 c.log
echo 'start finished'
else
echo $PID 'stop frpc'
kill -9 $PID
./frpc -c ./frpc.ini > client.log &
echo 'start it now'
sleep 2
tail -n 20 client.log
echo 'start finished'
fi