frp折腾记——在Centos 7和Ubuntu 16.04上部署frp进行内网穿透
首先上frp项目首页:frp的Github项目页。
科普!frp是什么
frp是个自己人(国人)创作的软件(所以中文文档还是很完善的,基本上有什么不懂的直接在上面查就行了)。用frp搭配一台拥有公网ip的主机可以为没有公网ip的主机(例如内网的主机)提供端口转发等服务,这样就可以让用户从外网直接连接到内网的主机(举个具体的例子:在家里连到公司的电脑上进行项目管理)。
配置!穿越战火的信使(服务端frp部署)
其实更加像是驿站或者说中间人惹。。。
服务端的系统是centos。
frp部署还是很简单的,贫僧的方法是直接从项目页把发布了的压缩包下载到主机上(看自己系统是什么就下什么,因为贫僧的是64位的linux系统,所以就下载了名字里有linux_amd64的),然后解压,添加执行、读写权限就可以直接用了(chmod
指令的用法这里就不提了)。
重点是填写frps.ini
,里面要对应你需要的服务填上对应的内容(具体的可以参考中文文档或者贫僧下面的例子)。
例如贫僧需要的是vnc和ssh,那么就需要这么做:
[common]
bind_port = 7000
[vnc]
type = tcp
auth_token = xxx
[ssh]
type = tcp
auth_token = xxx
这样就可以了,直接用下面这条指令开启服务(假设你已经进入了加压出来的目录里面):
./frps -c ./frps.ini
守护进程的勇者
输入上面这条指令之后就开启对应的服务了,但是辛辛苦苦发起的进程可能会因为用户登出主机或关闭终端而暴毙,所以必须要召唤出一名勇者来守护她。因此我们需要用到的就是supervisor,这是一款用python开发的软件,能够在进程突然中止的时候重新复活进程。
注意的是,在centos上不能够直接yum install supervisor
,否则会出现unix:///var/run/supervisor.sock no such file
错误,正确的安装方法是:pip install supervisor
,具体的原因贫僧没有深究,不过可以看这里解释。据说在ubuntu下apt安装的话也会出问题,但是贫僧只在centos上遇到了这个问题。
然后开始召唤勇者:
在/etc/supervisor/conf.d
新建文件frp.conf
,内容:
[program:frp]
command = /到frp文件夹的路径/frps -c /到frp文件夹的路径/frps.ini
autostart = true
贫僧遇到的情况是上面这个操作只能够在ubuntu里面起作用,在centos的话就必须把上面的内容直接复制粘贴到/etc/supervisord.conf
文件里面的最后面,然后重启supervisor进程。这里又出了一个状况,在ubuntu下可以用sudo systemctl restart supervisor
重启,在centos下就不行,一定要kill掉进程(先ps -ef | grep supervisor
找到对应的进程,不过注意要找的进程名字是类似路径那样的/bin/python /bin/supervisord -c /etc/supervisord.conf
,不是grep --color=auto supervisor
这样的,要kill掉前面那个,直接kill 前面那个进程的pid
,第一个出现的数字就是进程的pid),然后重新启动(supervisord -c /etc/supervisord.conf
,所以要加内容到/etc/supervisord.conf
)。
在ubuntu和centos下都可以用这个指令看frp运行了没有:
sudo supervisorctl status
如果运行了的话会输出frp
(因为文件第一行就是[program:frp]
,改成别的名字其实也可以的说)。
等候着的故人(客户端部署)
客户端也要下载好frp项目里面发布的压缩包,解压之后编辑frpc.ini:
[common]
server_addr = x.x.x.x
server_port = 7000
[vnc]
type = tcp
local_ip = 127.0.0.1
local_port = 5900
remotep_port = 5910
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
最上面的x.x.x.x
填服务端的ip地址。
然后启动服务(假设你已经进入了加压出来的目录里面):
./frpc -c ./frpc.ini
注意:通常是先开启服务端再开启客户端,否则可能客户端会自己关掉。
然后就可以欢快地使用了!
写信的你(怎么使用)
这里只举个ssh的例子,反正vnc之类的差不多。
假设用的是windows,那么可以直接在putty里面的ip填上面填的服务器地址x.x.x.x,端口填6000(因为上面配置是让服务器监听6000的,虽然说最终会转发到22端口),然后就和平时用ssh没什么两样了。
如果是直接用ssh连的话:
ssh -oPort=6000 [email protected]x.x.x.x
贫僧没试过直接用ssh(上面这个来自官方文档)。。。都是用putty的,所以上面这条指令仅供参考。
参考:
使用 frp 轻松实现内网穿透
解决unix:///var/run/supervisor.sock no such file的方法
python supervisor管理进程时遇到的问题
上一篇: Testing