Frp内网穿透
本文最后更新于:2024年9月16日 下午
两个问题
1.frps和frpc有什么区别?
s指的是server端,c指的是客户端
2.需要什么东西?
一个vps 或者别人已经搭好的免费的frp服务,比如ddnsto.com
如何利用VPS自建frp服务
1.frps服务端搭建
首先到 frp 的 releases 页面下载最新版的对应 VPS 的处理器架构的压缩包 https://github.com/fatedier/frp/releases 如何知道 VPS 的处理器架构?在 VPS 上运行这个命令:
1 |
|
如果输出x86_64则需要下载带linux_amd64的那个压缩包; 如果输出的是其他的,则在文件列表中找 linux 的对应架构的压缩包 以x86_64架构举例(目前大多数都应该是这个架构)
1 |
|
然后试着运行一下frps,看看能否运行
1 |
|
正常情况下会输出一串帮助信息,那么就说明你下载了正确架构的版本 如果提示-bash: ./frps: cannot execute binary file: Exec format error就说明你下错版本了
2.配置frps服务器
参考以下配置说明来书写配置文件frps.ini,你可以先在电脑上打一份草稿 此处只解释说明一些必要和常用的配置,如需研究完整配置说明请看目录下的frps_full.ini,以及参考frp中文说明
1 |
|
然后把你的准备好的配置文件内容写入frps.ini
1 |
|
试着启动一下frps
1 |
|
如果没有出现错误提示就说明配置没有问题,可以正常使用 接着按下Ctrl + C可以终止程序运行
3. 使 frps 在后台持续运行
启动 直接使用前面的命令行来运行是不行的,因为在关掉 ssh 窗口后程序frps就会停止运行,因此要使用nohup [command] &这种操作来使其在后台运行
1 |
|
并且程序的所有输出(日志)会被写入nohup.out文件中,你可以使用cat命令查看其内容
停止 想停止的话,结束frps即可
1 |
|
重启 那就先停止再启动
加入开机自启 编辑/etc/rc.local文件,将启动那句命令加到exit 0语句之前(如果有)
注意:debian9需要自行创建rc.local文件,详细看这https://sb.sb/blog/debian-9-rc-local/
4.配置frpc客户端
在梅林固件中,安装“frpc穿透”software,里面的配置对照第3步中的frps.ini进行配置即可,注意ac66u b1必须用虚拟内存软件,必须用虚拟内存软件,必须用虚拟内存软件,重要的事情说三遍 目前自己只是实现了udp的穿透形式:即 example.com:端口 进行穿透,当然首先需要将域名解析到frps服务器的ip
后记
这里只是记录自己目前实现的配置,感谢 https://moe.best/tutorial/frp.html 这个教程
更新于2021年5月4日
由于经过两年时间frp版本的更新,除了以上基本功能外,再记录两个有用的新特性:
安全暴露内网服务
对于某些服务来说如果直接暴露于公网上将会存在安全隐患。
使用 stcp(secret tcp)
类型的代理可以避免让任何人都能访问到要穿透的服务,但是访问者也需要运行另外一个
frpc
客户端。
1.frps.ini
内容如下: 1
2[common]
bind_port = 7000
2.在需要暴露到内网的机器上部署 frpc
,且配置如下:
1
2
3
4
5
6
7
8
9
10[common]
server_addr = x.x.x.x
server_port = 7000
[secret_ssh]
type = stcp
# 只有 sk 一致的用户才能访问到此服务
sk = abcdefg
local_ip = 127.0.0.1
local_port = 22
3.在想要访问内网服务的机器上也部署 frpc
,且配置如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14[common]
server_addr = x.x.x.x
server_port = 7000
[secret_ssh_visitor]
type = stcp
# stcp 的访问者
role = visitor
# 要访问的 stcp 代理的名字
server_name = secret_ssh
sk = abcdefg
# 绑定本地端口用于访问 SSH 服务
bind_addr = 127.0.0.1
bind_port = 6000
4.通过 SSH
访问内网机器,假设用户名为 test
: 1
ssh -p 6000 test@127.0.0.1
添加为系统服务
目前最新版的frp是0.36.2,下载下来以后其中有一个 systemd
文件夹,当中有文件 frps.service
和
frpc.service
查看 frps.service
的内容如下: 1
2
3
4
5
6
7
8
9
10
11
12
13[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frps -c /etc/frp/frps.ini
[Install]
WantedBy=multi-user.target1
2
3
4
5
6
7
8
9
10
11
12
13
14# 在下载解压后的frp文件夹内执行
cp frps /usr/bin
mkdir /etc/frp
cp frps.ini /etc/frp
#/etc/systemd/system或/lib/systemd/system是存放系统服务的文件夹
cp ./systemd/frps.service /etc/systemd/system
#激活系统服务
systemctl enable frps.service
#enable的作用就是创建了一个链接到/etc/systemd/system/multi-user.target文件夹
#测试启动服务
systemctl start frps.servicefrpc
设置为系统服务
参考文献: