vnc」タグアーカイブ

使用frp转发vnc和ssh端口到固定ip的服务器

写这篇日记是因为最近一个学妹来问我相关的问题,而我刚好在三年前搭建过这样一个服务。不过在开始之前,必须声明,这篇文章的应用场景非常非常有限。如果你搜到了这篇文章,请先想一想,是不是自己的需求错了。你真的需要搭建这样一个服务吗?

进入正题。我的应用场景是,我刚好有一个服务器,拥有固定ip地址。而我实验室内部的电脑1有防火墙,不能从学校外部访问。我家的电脑2没有固定的ip地址,不能从家外访问。

但是,学校的电脑1,通过学校指定的http proxy可以主动访问外网,并且连接到我的服务器。家里的电脑2也是,虽然ip地址总是改变,但是能够访问我自己的服务器。

那么,解决方案就显而易见了。我们需要搭建一个服务,来接受来自电脑1和电脑2的主动连接请求,并保持这个连接。这样,第三者只需访问服务器的指定端口即可通过反向代理连接到电脑1和电脑2,从而实现内网穿透或是动态转发。

巧的是,frp这一软件刚好能够实现这个需求,同时绑定vnc和ssh的转发。frp分为server端和client端。server端安装在固定ip的服务器上,监听来自client的请求。

安装方法网上有很多,很容易搜索到。下面的安装和配置参考这篇博客:

https://blog.csdn.net/m0_49946916/article/details/107889425

安装运行frps

https://github.com/fatedier/frp 下载最新的frp,上传到VPS,然后按照下面的运行即可

# 解压
tar xf frp_0.33.0_linux_amd64.tar.gz
cd frp_0.33.0_linux_amd64
# 复制可执行程序
cp frps /usr/bin/
# 创建配置文件目录
mkdir /etc/frp
# 复制配置文件
cp frps.ini /etc/frp/
# 复制服务启动脚本
cp systemd/frps.service /etc/systemd/system/
# 重新加载配置文件
systemctl daemon-reload
# 开机启动frps
systemctl enable frps
# 启动frps
systemctl start frps

编辑配置文件,sudo nano /etc/frp/frps.ini

[common]
bind_addr =0.0.0.0
bind_port =7000
token = my_password

这篇教程可能是写的比较早,后期frp的作者在github上更新了web界面来监控运行状态。因此,我自己的配置文件其实还有下半部分

dashboard_port = 7500
# dashboard's username and password are both optional
dashboard_user = my_user
dashboard_pwd = my_password

保存,然后重启一下服务。

接下来,我们配置frpc,也就是电脑1和电脑2 。我的两台电脑是mac系统。不过我相信,linux系统应该也差不多。windows系统可能需要你自己搜一搜配置方法了,不过貌似也差不多。

安装运行frpc

同样下载程序,解压,然后新建一个目录,将frpc和frpc.ini复制到新建的目录

frpc.ini的配置项:

[common]
server_addr = 你的服务器ip
server_port = 7000
protocol = kcp
token = my_password
; login_fail_exit = false

[vnc_Mac1]
type = tcp
local_ip = 127.0.0.1
local_port = 5900
remote_port = 9200
use_encryption = true
use_compression = true

[ssh_Mac1]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 9222
use_encryption = true
use_compression = true

上边的common就是要连接的服务器。下面的vnc和ssh就是要转发的两项服务。哦对了,vnc server需要自己提前装好。我的就是默认的vnc 5900端口,ssh 22端口,如果你不是默认的,需要自己改。下面的remote port就是要从服务器访问的端口。比如vnc那里,就是9200,而ssh就是9222端口。这里可以改成你自己喜欢的。

最终效果,就像是你自己diy了一个teamviewer公司一样。但是不得不说,这个只是用来应急的,因为远程连接的时候,屏幕刷新率只有几个fps。不过清晰度是高清的,延迟也还算可以接受,毕竟我的学校,我的电脑,服务器都在东京,延迟也高不到哪里。