frp内网穿透教程及内网穿透FRP一键安装脚本

现在不少家里都置办了NAS一类的设备,有不少败家的IT男也开始用尽方法去开发这些网络设备的用途,但是由于种种原因,我们的家用网络由于部署了内网,且很多没有公网ip,所以在外面直接访问家里的设备是不现实的的,于是乎类似于DDNS(以花生壳为代表的)以及内网穿透软件(Ngrok和frp为代表的)的软件或者服务应运而生,最近微魔看到了一个frp的一键脚本,对小白是比较友好的,于是就分享给大家,实际上,由于是Go语言编写,frp和ngrok本身的安装难度很低(直接下载就可以了),关键是配置文件可能需要一些时间去学习。

#突破LAN# 内网穿透FRP一键安装脚本

注意:frp的作者声称目前frp依然在不断的探索阶段,软件不适用于生产环境!关于frp的官方说明可以到Github地址查看:https://github.com/fatedier/frp

FRP包含两个,一个是frps(服务器端),一个是frpc(客户端);安装前,你需要(1)一台具有ipv4的VPS(用于运行frps);(2)本地主机(用于运行frpc)

FRP一键安装脚本,Github地址:https://github.com/dylanbai8/frpspro,系统要求CentOS 7+、Debian 8+(理论上该脚本在其他发行版上也可以用)

一、在服务器端运行脚本

wget -N –no-check-certificate git.io/f.sh && chmod +x f.sh && bash f.sh install

由于默认的token安装级别比较低,建议更换成更复杂的

bash f.sh token
脚本还支持其他功能

bash f.sh bind_port #修改 bind_port
bash f.sh vhost_http_port #修改 vhost_http_port
bash f.sh vhost_https_port #修改 vhost_https_port
bash f.sh dashboard_port #修改 dashboard_port
bash f.sh dashboard_user #修改 dashboard_user
bash f.sh dashboard_pwd #修改 dashboard_pwd
bash f.sh bind_udp_port #修改 bind_udp_port
bash f.sh kcp_bind_port #修改 kcp_bind_port
bash f.sh subdomain_host #修改 subdomain_host (用于泛解析子域名)
bash f.sh uninstall #卸载 frps
二、在客户端上的设置

(1)Windows下

如果你是想在Windows上实现被穿透功能的话,可以直接下载一键包里的Windows便携启动脚本(FrpsPro.zip),参照frpc.ini里的内容适当修改即可(加红的地方是必须要修改的,server_addr改成刚才服务器的ip,token改成刚才修改过的token)

# 绑定你的 frps 服务器:
# 1.服务器IP地址或域名 2.密钥 3.端口
# 如网络卡慢,可删除最后一行注释标签“#”开启kcp传输

[common]
server_addr = 170.130.142.170
token = 12345678
server_port = 7000
# protocol = kcp

# http 端口转发设置
# custom_domains 可以是域名或者服务器 IP
# 如需开启密码访问,删除最后两行注释标签“#”即可
[http_001]
type = http
local_port = 80
custom_domains = vmvps.com
# http_user = admin
# http_pwd = admin
# https 端口转发,需要使用时删除掉每行注释标签“#”即可

# [https_001]
# type = https
# local_port = 443
# custom_domains = vmvps.com (如果去掉#注释,这里也需要修改,如果没有则不需要)
# 开启本机文件共享

[share_file]
type = tcp
remote_port = 8080
plugin = static_file
# 要对外暴露的文件目录
plugin_local_path = D:\
plugin_strip_prefix = static
plugin_http_user = admin
plugin_http_passwd = admin
# 修改链接内为自己的服务器IP,通过浏览器访问 http://170.130.142.170:8080/static/
# 来查看位于 C:\ 目录下的文件,会要求输入已设置好的用户名和密码(如不需要可以注释掉)
# 提示:此功能可以用于搭建静态博客

# 远程桌面,无需修改。如不需要此项可在每行前加“#”号注释掉
# 默认远程桌面连接端口为:9090

[remote_desktop]
type = tcp
local_port = 3389
remote_port = 9090
(2)Linux下

到Frp官方的Github上下载最新客户端(zip里的frpc和frpc.ini):https://github.com/fatedier/frp/releases

配置文件(frp.ini)可以参照下面的修改,比如我想实现使用vmvps.com:7000访问家里在80端口架设的一个网站,然后运行./frpc -c ./frpc.ini就可以了

[common]
server_addr = 170.130.142.170
token = 12345678
server_port = 7000
# protocol = kcp

[web]
type = http
local_port = 80
custom_domains = vmvps.com
下面是本文所说的脚本源代码,实际上手动安装也非常的简单,大家可以参照这个脚本学习

#!/bin/bash

#====================================================
# System Request: Centos 7+ Debian 8+
# Author: dylanbai8
# * Frps 一键安装脚本,Frpc Windows 便捷脚本!Frp 远程桌面!
# * 开源地址:https://github.com/dylanbai8/frpspro
# Blog: https://oo0.bid
#====================================================

# 获取frps最新版本号
get_version(){
api_url=”https://api.github.com/repos/fatedier/frp/releases/latest”

new_ver=`curl ${PROXY} -s ${api_url} –connect-timeout 10| grep ‘tag_name’ | cut -d\” -f4`

touch ./version.txt
cat < ./version.txt
${new_ver}
EOF

sed -i ‘s/v//g’ ./version.txt
get_releases=$(cat ./version.txt)

releases_url=https://github.com/fatedier/frp/releases/download/${new_ver}/frp_${get_releases}_linux_amd64.tar.gz
windows_url=https://github.com/fatedier/frp/releases/download/${new_ver}/frp_${get_releases}_windows_amd64.zip
rm -rf ./version.txt
}

# 安装frps
install_frps(){
wget -N –no-check-certificate ${releases_url}

tar -zxvf frp*.tar.gz

rm -rf /usr/local/frps
mkdir /usr/local/frps

mv ./frp*/frps /usr/local/frps/frps
mv ./frp*/frps_full.ini /usr/local/frps/frps.ini

rm -rf ./frp*
}

# 添加开机自启动
add_auto_run(){
touch /etc/systemd/system/frps.service
cat < /etc/systemd/system/frps.service
[Unit]
Description=frps server
After=network.target
Wants=network.target
[Service]
Type=simple
PIDFile=/var/run/frps.pid
ExecStart=/usr/local/frps/frps -c /usr/local/frps/frps.ini
RestartPreventExitStatus=23
Restart=always
User=root
[Install]
WantedBy=multi-user.target
EOF
}

# 启动frps
run_frps(){
systemctl daemon-reload
systemctl enable frps >/dev/null 2>&1
systemctl start frps
systemctl restart frps
}

# 卸载frps
set_uninstall(){
systemctl stop frps
systemctl disable frps
rm -rf /usr/local/frps
rm -rf /etc/systemd/system/frps.service >/dev/null 2>&1
echo -e “卸载成功!”
}

# 展示菜单
load_menu(){
local_ip=`curl -4 ip.sb`
clear
echo “”
echo -e “——————–安装完成———————-“
echo -e “管理面板:http://${local_ip}:7500”
echo -e “用户名:admin  密码:admin”
echo -e “默认 bind_port:7000”
echo -e “默认 token:12345678”
echo “”
echo -e “默认 vhost_http_port:80”
echo -e “默认 vhost_https_port:443”
echo “”
echo -e “默认 bind_udp_port:7001”
echo -e “默认 kcp_bind_port:7000”
echo -e “默认 allow_ports:2000-3000,3001,3003,4000-50000”
echo “”
echo -e “Windows 便捷脚本:https://github.com/dylanbai8/frpspro/raw/master/FrpsPro.zip”
echo -e “Windows 最新内核:${windows_url}”
echo -e “————————————————–“
}

# 各种设置项
# ====================================

set_bind_port(){
get_value=””
echo -e “你正在设置 bind_port “

read -e -p “请输入:” get_value
[[ -z ${get_value} ]] && get_value=”none”
if [ “${get_value}” = “none” ];then
set_bind_port
else
echo -e “你设置的值为:${get_value}”
fi

sed -i ‘/^bind_port/c\bind_port = ‘”${get_value}”” /usr/local/frps/frps.ini
systemctl restart frps
echo -e “设置成功!”
}

set_bind_udp_port(){
get_value=””
echo -e “你正在设置 bind_udp_port “

read -e -p “请输入:” get_value
[[ -z ${get_value} ]] && get_value=”none”
if [ “${get_value}” = “none” ];then
set_bind_udp_port
else
echo -e “你设置的值为:${get_value}”
fi

sed -i ‘/^bind_udp_port/c\bind_udp_port = ‘”${get_value}”” /usr/local/frps/frps.ini
systemctl restart frps
echo -e “设置成功!”
}

set_kcp_bind_port(){
get_value=””
echo -e “你正在设置 kcp_bind_port “

read -e -p “请输入:” get_value
[[ -z ${get_value} ]] && get_value=”none”
if [ “${get_value}” = “none” ];then
set_kcp_bind_port
else
echo -e “你设置的值为:${get_value}”
fi

sed -i ‘/^kcp_bind_port/c\kcp_bind_port = ‘”${get_value}”” /usr/local/frps/frps.ini
systemctl restart frps
echo -e “设置成功!”
}

set_vhost_http_port(){
get_value=””
echo -e “你正在设置 vhost_http_port “

read -e -p “请输入:” get_value
[[ -z ${get_value} ]] && get_value=”none”
if [ “${get_value}” = “none” ];then
set_vhost_http_port
else
echo -e “你设置的值为:${get_value}”
fi

sed -i ‘/^vhost_http_port/c\vhost_http_port = ‘”${get_value}”” /usr/local/frps/frps.ini
systemctl restart frps
echo -e “设置成功!”
}

set_vhost_https_port(){
get_value=””
echo -e “你正在设置 vhost_https_port “

read -e -p “请输入:” get_value
[[ -z ${get_value} ]] && get_value=”none”
if [ “${get_value}” = “none” ];then
set_vhost_https_port
else
echo -e “你设置的值为:${get_value}”
fi

sed -i ‘/^vhost_https_port/c\vhost_https_port = ‘”${get_value}”” /usr/local/frps/frps.ini
systemctl restart frps
echo -e “设置成功!”
}

set_dashboard_port(){
get_value=””
echo -e “你正在设置 dashboard_port “

read -e -p “请输入:” get_value
[[ -z ${get_value} ]] && get_value=”none”
if [ “${get_value}” = “none” ];then
set_dashboard_port
else
echo -e “你设置的值为:${get_value}”
fi

sed -i ‘/^dashboard_port/c\dashboard_port = ‘”${get_value}”” /usr/local/frps/frps.ini
systemctl restart frps
echo -e “设置成功!”
}

set_dashboard_user(){
get_value=””
echo -e “你正在设置 dashboard_user “

read -e -p “请输入:” get_value
[[ -z ${get_value} ]] && get_value=”none”
if [ “${get_value}” = “none” ];then
set_dashboard_user
else
echo -e “你设置的值为:${get_value}”
fi

sed -i ‘/^dashboard_user/c\dashboard_user = ‘”${get_value}”” /usr/local/frps/frps.ini
systemctl restart frps
echo -e “设置成功!”
}

set_dashboard_pwd(){
get_value=””
echo -e “你正在设置 dashboard_pwd “

read -e -p “请输入:” get_value
[[ -z ${get_value} ]] && get_value=”none”
if [ “${get_value}” = “none” ];then
set_dashboard_pwd
else
echo -e “你设置的值为:${get_value}”
fi

sed -i ‘/^dashboard_pwd/c\dashboard_pwd = ‘”${get_value}”” /usr/local/frps/frps.ini
systemctl restart frps
echo -e “设置成功!”
}

set_token(){
get_value=””
echo -e “你正在设置 token “

read -e -p “请输入:” get_value
[[ -z ${get_value} ]] && get_value=”none”
if [ “${get_value}” = “none” ];then
set_token
else
echo -e “你设置的值为:${get_value}”
fi

sed -i ‘/^token/c\token = ‘”${get_value}”” /usr/local/frps/frps.ini
systemctl restart frps
echo -e “设置成功!”
}

set_subdomain_host(){
get_value=””
echo -e “你正在设置 subdomain_host “

read -e -p “请输入:” get_value
[[ -z ${get_value} ]] && get_value=”none”
if [ “${get_value}” = “none” ];then
set_subdomain_host
else
echo -e “你设置的值为:${get_value}”
fi

sed -i ‘/^subdomain_host/c\subdomain_host = ‘”${get_value}”” /usr/local/frps/frps.ini
systemctl restart frps
echo -e “设置成功!”
}

# ====================================

# 关闭apache2 释放80端口
set_unapache2(){
systemctl disable httpd >/dev/null 2>&1
systemctl stop httpd >/dev/null 2>&1
killall -9 httpd >/dev/null 2>&1

systemctl disable apache2 >/dev/null 2>&1
systemctl stop apache2 >/dev/null 2>&1
killall -9 apache2 >/dev/null 2>&1

systemctl disable firewalld >/dev/null 2>&1
systemctl stop firewalld >/dev/null 2>&1
killall -9 firewalld >/dev/null 2>&1

systemctl disable iptables >/dev/null 2>&1
systemctl stop iptables >/dev/null 2>&1
killall -9 iptables >/dev/null 2>&1

echo -e “关闭 apache2 成功!”
echo -e “关闭 防火墙 成功!”
}

# 安装流程
set_install(){
get_version
install_frps
add_auto_run
run_frps
load_menu
}

# 脚本菜单
case “$1” in
bind_port|bind_udp_port|kcp_bind_port|vhost_http_port|vhost_https_port|dashboard_port|dashboard_user|dashboard_pwd|token|subdomain_host|install|uninstall|unapache2)
set_$1
;;
*)
echo -e
;;
esac

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注